كيفية الحصول على كائن محمل الفئة من تطبيق Javaee تحت JBOSS 5.x

StackOverflow https://stackoverflow.com/questions/1576519

  •  21-09-2019
  •  | 
  •  

سؤال

يحتوي تطبيق Javaee الخاص بنا على خدمات مسؤولة عن التثبيت وبدء خدمات أخرى اعتمادًا على التكوين المخزن في قاعدة بيانات. يتم تثبيت الخدمات باستخدام

ServiceControllerMBean.install(
    org.w3c.dom.Element element,
    javax.management.ObjectName objectName)

طريقة. تتطلب هذه الطريقة اسم محمل فئة كوسيطة ثانية. تحت JBOSS 4.x استخدمنا الاختراق التالي للحصول على اسم Loader Class:

final ServiceControllerMBean serviceController = 
    (ServiceControllerMBean) MBeanProxy.get(
        ServiceControllerMBean.class,
        ServiceControllerMBean.OBJECT_NAME, server);

final ClassLoader = serviceController.getClass().getClassLoader();

final ObjectName loader = new ObjectName(
    "jmx.loading:UCL=" + Integer.toHexString(classLoader.hashCode()))

ومع ذلك ، فإن هذا لا يعمل بموجب JBOSS 5.x لتسمية تحميل الفصل.

هل يمكن لشخص ما أن ينصح وسيلة للحصول على اسم Loader Class تحت JBOSS 5.x؟

شكرا لكم مقدما

هل كانت مفيدة؟

المحلول 2

بعد إجراء القليل من الأبحاث حول الموضوع تلقيت إجابة على سؤالي. على الرغم من أنني لا أحب ذلك كثيرًا لأنه يشبه الاختراق الآخر. لكنني سأستخدمه ما لم يقترح شخص ما حلًا أكثر أناقة. لذا:

في JBOSS 5.1.0 (واحد أنا ألعب مع) يتم تسجيل اللوادر الفئة بأسماء مثل:

jboss.classloader:id="vfsfile:<archive-file-name>"

في الوقت نفسه ، يبدو تمثيل سلسلة كائن Loader الذي يتم إرجاعه بواسطة طريقة ToString () مثل هذا:

BaseClassLoader@<memory-address>{vfsfile:<archive-file-name>}

لذلك ، من الممكن استخراج اسم أرشفة من تمثيل سلسلة Loader Class وإنشاء اسم مناسب منه.

نصائح أخرى

وجدت هذه الوثائق لهذه القضية:

تكوين ClassLoader

تصنيف usecase

من الجيد الحصول على رؤية نظرة ثاقبة.

وأخيرا موضوع منتدى لطيف وجدته:

http://www.coderanch.com/t/464514/jboss/class-loading-configuration

معلومات إضافية:

ClassLoader loader = Thread.currentThread().getContextClassLoader();
System.out.println( loader );  // sun.misc.Launcher$AppClassLoader@a12a00
loader = ThreadClassloader.class.getClassLoader();
System.out.println( loader );  // sun.misc.Launcher$AppClassLoader@a12a00

HPE هذا يساعدك على الحصول على مزيد من المعلومات من الكود الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top