البحث المرجعي الكائن من JNDI النتائج في classcastexception

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

سؤال

أواجه مشاكل في الاتصال بـ 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 المستندة إلى الويب (إذا كانت لا تزال موجودة).

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