如seej2ee兄遇到的问题也困扰我很久。
banq说的很对:带 java:comp/env是标准JNDI写法,不带是根据具体容器如Weblogic写法或JBoss写法。此举体现在java:comp/env的配置是写在EJB-jar.xml(J2EE规范)中的,而不带此表头的jndi名是写在weblogic或jboss的配置文件中的(如weblogic中为weblogic-ejb-jar.xml)。
我也一直在研究怎么使用标准的java:comp/env样式的jndi调用EJB。
我的使用经验偶得,大家参考:
现有三个EJB:1、facade sessionBean
2、bussion sessionBean
3、bussion entityBean
我的意图是使用1调用2、3两个本地bean(我使用的是websphere)
当然2、3两个bean由websphere生成的jndi名远程调用可以使用(就是无java:comp/env的调用)。
在1这个bean 中设置2、3连个bean的引用,ejb-jar.xml引用配置代码如下:
<ejb-local-ref id="EJBLocalRef_1147745685937">
<ejb-ref-name>ejb/Pragrammer</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>com.diablo.PragrammerEntity.PragrammerLocalHome</local-home>
<local>com.diablo.PragrammerEntity.PragrammerLocal</local>
<ejb-link>Programmer.jar#Pragrammer</ejb-link>
</ejb-local-ref>
<ejb-local-ref id="EJBLocalRef_1147745789937">
<ejb-ref-name>ejb/Hello</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local-home>com.diablo.HelloLocalHome</local-home>
<local>com.diablo.HelloLocal</local>
<ejb-link>HelloLocalTest.jar#Hello</ejb-link>
</ejb-local-ref>
注意其中的两个EJB-ref-name:ejb/Hello和EJB/Pragrammer
在1这个bean中调用2、3连个bean时,就可使用带java:comp/env的jndi:
Object obj = ctx.lookup("java:comp/env/ejb/Hello");
Object obj = ctx.lookup("java:comp/env/ejb/Pragrammer");
能成功调用。
一点心得,供大家参考!