Java – JNDI lookup of EJB3 in ear file on GlassFish
I have an ear file containing a large number of jars, one of which contains local session beans (EJB3) I need to perform JNDI lookup of these session beans from unmanaged POJOs, which are also included in the ear (in this case, the same as jars in EJBs) I tried to follow GlassFish EJB FAQ, but no matter what I tried, I will continue to receive javax naming. NameNotFoundException.
I'm not sure about something Where should I put my EJB jar XML (I tried ears meta inf and jars meta INF)? I need sun EJB jar XML? What exactly is EJB link and what does it do? What might I have done wrong (my configuration is almost the same as the local lookup given in the FAQ)?
I listed some configurations I tried and the results are as follows:
<enterprise-beans>
<session>
<ejb-name>ITestBean</ejb-name>
<ejb-class>com.test.TestBean</ejb-class>
<ejb-local-ref>
<ejb-ref-name>ITestBean</ejb-ref-name>
<local>com.test.ITestBean</local>
</ejb-local-ref>
</session>
</enterprise-beans>
Application deployment but JNDI lookup returned null
<enterprise-beans>
<session>
<ejb-name>ITestBean</ejb-name>
<ejb-class>com.test.TestBean</ejb-class>
<ejb-local-ref>
<ejb-ref-name>ITestBean</ejb-ref-name>
<local>com.test.ITestBean</local>
<ejb-link>ITestBean</ejb-link>
</ejb-local-ref>
</session>
</enterprise-beans>
Application not deployed: unable to determine the local business and remote business assignment of unresolved EJB ref itestbean @ JNDI for EJB 3.0 Ref
<enterprise-beans>
<session>
<ejb-name>ITestBean</ejb-name>
<ejb-class>com.test.TestBean</ejb-class>
<ejb-local-ref>
<ejb-ref-name>ITestBean</ejb-ref-name>
<local>com.test.ITestBean</local>
<ejb-link>MyJar.jar#ITestBean</ejb-link>
</ejb-local-ref>
</session>
</enterprise-beans>
Application not deployed: error: unresolved: myjar jar#ITestBean.
<enterprise-beans>
<session>
<ejb-name>ITestBean</ejb-name>
<local>com.test.ITestBean</local>
<ejb-local-ref>
<ejb-ref-name>ITestBean</ejb-ref-name>
</ejb-local-ref>
</session>
</enterprise-beans>
Error processing ejbdescriptor
Solution
You can always use system Out or dump all names in initialcontext in the log
//Get all the names in the initial context
NamingEnumeration children = initialContext.list("");
while(children.hasMore()) {
NameClassPair ncPair = (NameClassPair)children.next();
System.out.print(ncPair.getName() + " (type ");
System.out.println(ncPair.getClassName() + ")");
}
}
