7

Ho un EJB definita come questo:NameNotFoundException quando si chiama un EJB in Weblogic 10.3

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

Quando è distribuito a Weblogic (WL), si ottiene il nome MyBean. Non sono sicuro se questo è importante.

provo a chiamare il fagiolo con questo codice:

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"); 

Qualcuno sa il motivo per cui ottengo il seguente errore?

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' 
+1

Il vostro fagioli hanno più interfacce aziendali remote? –

+0

Sì, l'interfaccia HelloWorld. Ci scusiamo per i nomi zoppi. Sto cercando di familiarizzare con gli EJB. – Sajee

+0

Questo è solo uno, non più :) Ho comunque risposto ad entrambi i casi. –

risposta

10

di ricercare un'interfaccia remota di un session bean con interfacce multiple a distanza commerciali (ad esempio com.acme.FooBusiness1, com.acme.FooBusiness2), è necessario ad occhiata un nome derivato dalla combinazione di nome JNDI globale del ejb bersaglio (il mappedName() in @Stateless) e la specifica interfaccia remota conferenze, separati da un "#":

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

Nel caso tipico di un chicco di avere solo una remota Interfaccia conferenze, senza questo modulo completo. In tal caso, il nome JNDI del bean può essere utilizzato direttamente:

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

Quella era la parte teorica. Ora la pratica. Nel tuo caso, da quello che posso vedere, stai accedendo all'EJB da Weblogic quindi preferirei usare il costruttore no-arg InitialContext() (e usare un file di configurazione jndi.properties per altri ambienti) ma questa è solo una nota a margine. Quindi, si dovrebbe guardare in alto com.foo.HelloWorld, l'interfaccia remota, non com.foo.HelloWorldBean, l'attuazione:

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

E se il vostro fagiolo ha un solo telecomando interfaccia di lavoro, questo dovrebbe funzionare:

(HelloWorld) ic.lookup("HelloWorld"); 
+0

Pascal: Ho provato ic.lookup ("HelloWorld # com.foo.HelloWorld") e ottengo lo stesso errore di cui sopra.Ho provato ic.lookup ("HelloWorld") e ottengo lo stesso errore di cui sopra: javax.naming.NameNotFoundException: Impossibile risolvere 'HelloWorld'. Risolto '' [l'eccezione di root è javax.naming.NameNotFoundException: impossibile risolvere 'HelloWorld' .Risolto '']; nome rimanente 'HelloWorld' – Sajee

+0

Ho distribuito l'EJB a Weblogic e appare come myBean nella pagina Distribuzioni nella console di gestione WL, ma quando guardo l'albero JNDI, non riesco a trovare myBean o HelloWorld da nessuna parte in quell'albero. traccia? – Sajee

+0

In @Stateless, @name() è l'equivalente di annotazione di in ejb-jar.xml. Se non viene specificato il nome @Stateless(), per impostazione predefinita il nome della classe di bean non qualificato. Quindi non so da dove viene "myBean". Quindi, sì, il tuo EJB dovrebbe essere visibile nell'albero JNDI come "HelloWorld" (il nome che hai specificato). Sei sicuro che la distribuzione sia andata bene e che il tuo EJB sia stato distribuito? –

Problemi correlati