البحث المرجعي الكائن من JNDI النتائج في classcastexception
سؤال
أواجه مشاكل في الاتصال بـ EJB3 عديمة الجنسية خارج الحاوية.
رمز للحصول على مرجع الكائن:
Context envCtx = (Context) context.lookup("ejb");
MyObject o = (MyObject) envCtx.lookup(MyObject);
يؤدي الصف الثاني إلى استثناء:
java.lang.ClassCastException: javax.naming.Reference
يمكنني استخدام jboss.org 5.1.0 ga.
استنادًا إلى بعض المنشورات الأخرى ، أظن أن هذا قد يكون بسبب إصدار خاطئ من مكتبات العملاء. ومع ذلك ، لست متأكدًا من جرة (جرة) المكتبة التي يجب أن أدرجها في الجرة؟ (أحصل على الخطأ باستخدام 5.0.4.ga Jnpserver.)
المحلول
بالنسبة إلى JBoss ، يجب أن يبدو الرمز الخاص بك شيئًا كهذا:
Properties properties = new Properties();
properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.factory.url.pkgs","=org.jboss.naming:org.jnp.interfaces");
properties.put("java.naming.provider.url","localhost:1099");
Context context = new InitialContext(properties);
(EchoBeanRemote) c.lookup("EchoBean/remote");
إذا كنت تفضل ذلك ، يمكنك وضع إعدادات jndi Environment في jndi.properties
ملف (يجب أن يكون على classpath):
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=jnp://localhost:1099
واستخدام غير ARG InitialContext
البناء:
Context context = new InitialContext();
(EchoBeanRemote) c.lookup("EchoBean/remote");
من الواضح أن هذا أكثر محمولة.
وفي كلتا الحالتين ، ستحتاج jbossall-client.jar
على classpath على جانب العميل.
ملاحظة: يمكنك التحقق من اسم JNDI العالمي تم تسجيل الفول الخاص بك في في عرض Jndi من وحدة التحكم JMX المستندة إلى الويب (إذا كانت لا تزال موجودة).