سؤال

ولدي EJB يعرف بأنه ذلك:

package com.foo;
@Stateless (mappedName="HelloWorld")
public class HelloWorldBean implements HelloWorld, HelloWorldLocal
....

عند انها المنتشرة في يبلوغيتش (WL)، فإنه يحصل على myBean الاسم. أنا لست متأكدا إذا كان هذا هو المهم.

وأنا أحاول أن استدعاء الفول مع هذا الرمز:

Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://localhost:7001");
ic = new InitialContext(ht);
tp = (HelloWorld) ic.lookup("HelloWorld#com.foo.HelloWorldBean");

أحد يعرف لماذا أحصل على الخطأ التالي؟

javax.naming.NameNotFoundException: While trying to lookup 'HelloWorld#com.foo.HelloWorldBean' didn't find subcontext 'HelloWorld#com'.
 Resolved '' [Root exception is javax.naming.NameNotFoundException: While trying
 to lookup 'HelloWorld#com.foo.HelloWorldBean' didn't find
 subcontext 'HelloWorld#com'. Resolved '']; remaining name 'HelloWorld#com/foo/HelloWorldBean'
هل كانت مفيدة؟

المحلول

لبحث واجهة عن بعد من فول الدورة مع العديد من واجهات الأعمال عن بعد (egcom.acme.FooBusiness1، com.acme.FooBusiness2)، تحتاج لبحث وهو اسم مشتق من الجمع بين اسم JNDI العالمي في المنظمة بتبني الهدف (في mappedName() في @Stateless) وتحديدا بعد اجهة الأعمال، مفصولة "#":

InitialContext ic = new InitialContext();
FooBusiness1 bean1 = (FooBusiness1) ic.lookup("FooEJB#com.acme.FooBusiness1");
FooBusiness2 bean2 = (FooBusiness2) ic.lookup("FooEJB#com.acme.FooBusiness2");

في حالة نموذجية من الفول وجود واحد فقط واجهة العمل عن بعد، وليس بحاجة إلى هذا الشكل مؤهل بشكل كامل. في هذه الحالة، يمكن أن تستخدم اسم JNDI الحبة مباشرة:

FooBusiness bean = (FooBusiness) ic.lookup("FooEJB");

وكان هذا هو الجزء النظري. الآن هذه الممارسة. في قضيتك، من ما أستطيع أن أرى، يمكنك الوصول إلى EJB من يبلوغيتش لذلك أود أن تستخدم بدلا من ذلك عدم وسيطة InitialContext() منشئ (واستخدام ملف التكوين jndi.properties لبيئات أخرى) ولكن هذا هو مجرد ملاحظة جانبية. ثم، يجب أن ننظر حتى com.foo.HelloWorld، واجهة عن بعد، وليس com.foo.HelloWorldBean، تنفيذ:

InitialContext ic = new InitialContext();
(HelloWorld) ic.lookup("HelloWorld#com.foo.HelloWorld");

وإذا الفول لديه واجهة العمل عن بعد واحد فقط، وهذا ينبغي العمل:

(HelloWorld) ic.lookup("HelloWorld");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top