当前位置: 技术问答>java相关
如何在servlet中调用EJB2.0实体Bean(使用本地接口)
来源: 互联网 发布时间:2015-06-20
本文导语: 在Servlet中: 1. Context ctx = this.getInitialContext(); 2. Object ref = ctx.lookup("EjbAccounts"); 3. EjbAccountsHome home = (EjbAccountsHome)ref; 执行第3行出错: java.lang.ClassCastException: webtest.EjbAccountsBean_vfjrgd_LocalH...
在Servlet中:
1. Context ctx = this.getInitialContext();
2. Object ref = ctx.lookup("EjbAccounts");
3. EjbAccountsHome home = (EjbAccountsHome)ref;
执行第3行出错:
java.lang.ClassCastException: webtest.EjbAccountsBean_vfjrgd_LocalHomeImpl
at webtest.Servlet3.doGet(Servlet3.java:54)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:263)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:200)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:2390)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:1959)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:137)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
请各位高手回答,谢谢!
1. Context ctx = this.getInitialContext();
2. Object ref = ctx.lookup("EjbAccounts");
3. EjbAccountsHome home = (EjbAccountsHome)ref;
执行第3行出错:
java.lang.ClassCastException: webtest.EjbAccountsBean_vfjrgd_LocalHomeImpl
at webtest.Servlet3.doGet(Servlet3.java:54)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:263)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:200)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:2390)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:1959)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:137)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
请各位高手回答,谢谢!
|
检查你的LocalHome接口的jndi名字是否正确,而且我好像记得Servlet中好像不能使用LocalHome接口,反正我知道在EJB中是可以使用的,它要求必须在一个虚拟机中使用,有时Servlet和EJB的虚拟机不是一个。
|
好像使用你的getInitialContext() 方法是不正确的,你的这个方法实际上是采用了远程访问EJB的方法而不是本地访问.
试试如此调用:
Context ctx = new InitialContext();
试试如此调用:
Context ctx = new InitialContext();
|
请参照weblogic文档中关于local interface的说明,里面写的很清楚:
想要使用local interface,那么调用者和EJB必须在同一个jar(ear,zip)里面.
我试过在ejb之间的调用,是成功的。
想要使用local interface,那么调用者和EJB必须在同一个jar(ear,zip)里面.
我试过在ejb之间的调用,是成功的。
|
小小说的对。
在weblogic里,weblogic会为你的ejb创建新的JVM和Servlet的JVM不同,这也是为什么调用者要
在同一个包里的原因
在weblogic里,weblogic会为你的ejb创建新的JVM和Servlet的JVM不同,这也是为什么调用者要
在同一个包里的原因