JiveJdon Community Forums
在线134人 J道首页 | 论坛首页 | 培训咨询 | 开源框架 | 精华 | 查搜 | 注册 | 登陆 |
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表
???en_US.forumThreadNext.name??? 下一主题
这个主题共有 7 回复 / 1 页 [ ]  发表新帖子  回复该主题贴
thinkjava

发表文章: 108
注册时间: 2007年11月03日 19:22
你好,banq,请教一个EJB的问题 发表: 2006年06月14日 09:43 回复
在得到Home实例时:
第一:Context init = new InitialContext();
Context tx = (Context) init.lookup("java:comp/env");
Object obj = tx.lookup("ejb/HelloWorld");

第二:Context init = new InitialContext();
Object obj = tx.lookup("java:comp/env/ejb/HelloWorld");

第三:Context init = new InitialContext();
Object obj = tx.lookup("ejb/HelloWorld");

请问以上三种是不是得到HOME实例的三种方式,其中java:comp/env是什么意思呀?
多谢指导
banq

发表文章: 8929
注册时间: 2002年08月03日 17:08
Re: 你好,banq,请教一个EJB的问题 发表: 2006年06月14日 15:40 回复
java:comp/env是J2EE规定的JNDI写法字符串。
thinkjava

发表文章: 108
注册时间: 2007年11月03日 19:22
Re: 你好,banq,请教一个EJB的问题 发表: 2006年06月14日 17:24 回复
我也知道,只是什么意思?还有就是那三种写法,为什么有时候用第一种,有时候用第二种,有时候用第三种,我在网上看到人家这么用的,请问什么情况下,有哪一种?这三种有什么区别?谢谢答复
banq

发表文章: 8929
注册时间: 2002年08月03日 17:08
Re: 你好,banq,请教一个EJB的问题 发表: 2006年06月14日 17:26 回复
带 java:comp/env是标准JNDI写法,不带是根据具体容器如Weblogic写法或JBoss写法。
thinkjava

发表文章: 108
注册时间: 2007年11月03日 19:22
Re: 你好,banq,请教一个EJB的问题 发表: 2006年06月14日 17:30 回复
谢谢答复,我用的是weblogic8,如果带java:comp/env的话,就出错,如果不带的话,就没有问题,请问是什么原因?
thinkjava

发表文章: 108
注册时间: 2007年11月03日 19:22
Re: 你好,banq,请教一个EJB的问题 发表: 2006年06月14日 17:38 回复
出的错是:
javax.naming.NameNotFoundException: While trying to look up EJB/HelloWorld in java:comp/env.; remaining name 'ejb/HelloWorld'
- Could not complete request
java.lang.NullPointerException
at com.moloon.service.ejb.TestEJB.invokeEjb(TestEJB.java:69)
at com.moloon.service.springmvc.TestEJBController.handleRequest(TestEJBController.java:20)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:675)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:623)
at org.springframework.web.servlet.FrameworkServlet.serviceWrapper(FrameworkServlet.java:384)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:344)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1072)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6981)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3892)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2766)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
<2006-6-14 下午05时34分32秒 CST> <Error> <HTTP> <BEA-101020> <[ServletContext(id=41001,name=J2EE_Web,context-path=/J2EE_Web)] Servlet failed with Exception
java.lang.NullPointerException
at com.moloon.service.ejb.TestEJB.invokeEjb(TestEJB.java:69)
at com.moloon.service.springmvc.TestEJBController.handleRequest(TestEJBController.java:20)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:675)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:623)
at org.springframework.web.servlet.FrameworkServlet.serviceWrapper(FrameworkServlet.java:384)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:344)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1072)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6981)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3892)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2766)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
>
banq

发表文章: 8929
注册时间: 2002年08月03日 17:08
Re: 你好,banq,请教一个EJB的问题 发表: 2006年06月15日 09:05 回复
>如果带java:comp/env的话
这中叫EJB Reference,是比较复杂的,java:comp/env后面的字符串必须在当前EJBEJB-jar.xml中的EJB-local-reference中定义。

而如果不带java:comp/env,那么那个JNDI就无需上面一样的定义。

使用EJB Reference是为了让调用者和被调用者的JNDI名解耦,因为JNDI名是和容器相关,所以,为屏蔽容器的特殊性,增加移植性,使用reference有必要。
xuechen0721

发表文章: 24
注册时间: 2006年01月04日 22:50
Re: 你好,banq,请教一个EJB的问题 发表: 2006年06月15日 09:33 回复
如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");
能成功调用。
一点心得,供大家参考!
这个主题有 7 回复 / 1 页 [ ]
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表    返回页首  返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Spring Struts
查询本论坛内 回复超过的热门帖子
快速发表回复
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-07 jdon.com

anti spam