2016-04-12 9 views
0

Ich habe ein EJB-Modul (EAR1) in der Websphere deployed und möchte auf diese EJB von WAR zugreifen, die auch in der gleichen Websphere deplyed ist.EJB-Lookup in Websphere aus dem Container

Ich habe versucht mit unten Code, der nicht funktioniert.

public class RACAccessProvider { 

    private InitialContext myInitialContext; 

    public synchronized Object locateEJB(final Class clazz) throws ClassCastException, NamingException { 

     try { 
      System.out.println("looking up ejb.. for class " + clazz); 
      Object obj; 
      final String jndiName = clazz.getName(); 
      obj = myInitialContext.lookup(jndiName); 
      System.out.println("###lookuop object.." + obj); 
      return obj; 
     } catch (final Exception e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    public RACAccessProvider() { 
     System.out.println("Setting context in RACAccessProvider constructor..."); 
     final Properties context = new Properties(); 
     context.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"); 

     try { 
      myInitialContext = new InitialContext(context); 
     } catch (NamingException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Der obige Code hängt an der Linie

obj = myInitialContext.lookup(jndiName); 

Jede Hilfe sehr geschätzt wird.

+1

Sie didnt schreiben, was Version war verwenden Sie, aber wenn Sie auf der gleichen JVM sind nur verwenden 'Initial ctx = new InitailContext();' ohne Requisiten, die zweite - Wenn Sie Java EE 6 verwenden, können Sie versuchen, statt einer Suche eine @ EJB-Anmerkung zu verwenden. – Gas

+0

Haben Sie versucht, während des Hang-Vorgangs einen Thread-Dump auszuführen, um zu sehen, was passiert? –

Antwort

0

Zunächst müssen Sie eine andere Eigenschaft in dem Kontextobjekt setzen:

context.setProperty(Context.PROVIDER_URL, "corbaloc::localhost:2809") 

Zweitens, die jndi Namen, den Sie verwenden, nicht geeignet erscheinen. Es sollte so etwas wie

"java:comp/env/ejb/clazz" 
+0

Danke für die Antwort .. In Bezug auf den JNDI-Namen "java: comp/env/ejb/clazz", wenn meine Klasse com.pkg.MyEjbInterface ist, sollte der JNDI-Name "java: comp/env/ejb/com/pkg/MyEjbInterface "? –

+0

Es sollte dasselbe sein wie das, was Sie in Ihrer web.xml setzen – Sampada

+0

PROVIDER_URL ist für den Standardnamespace, aber "java:" ist ein nur lokaler Namespace, diese Kombination macht also keinen Sinn. –

0
you need to check if your jndi name is correctly mentioned, 
Also if initial context is initialized properly as per below code: 

InitialContext ic = new InitialContext(); 
String snName = "java:comp/env/mail/your_jndiname"; 
Session session = (javax.mail.Session)ic.lookup(snName);