在Wicket网页中使用EJB
当我在公共HttpServlet中使用@EJB注释通过远程接口访问无状态EJB时,它工作正常:在Wicket网页中使用EJB,wicket,ejb-3.0,java-ee-5,Wicket,Ejb 3.0,Java Ee 5,当我在公共HttpServlet中使用@EJB注释通过远程接口访问无状态EJB时,它工作正常: public class ListMsgs extends HttpServlet { @EJB private Msgs msgsRI; ... protected void processRequest(...) ... { List msgs = msgsRI.getAll(); ... } ... } 但是,当我在Wicket网页中尝试相同的事情时
public class ListMsgs extends HttpServlet
{
@EJB
private Msgs msgsRI;
...
protected void processRequest(...) ...
{
List msgs = msgsRI.getAll();
...
}
...
}
但是,当我在Wicket网页中尝试相同的事情时,我得到了null作为bean的回报:
public class ListM extends WebPage
{
@EJB
private Msgs msgsRI;
...
public ListM()
{
List msgs = msgsRI.getAll(); // NullPointerException
...
}
...
}
此“意外运行时异常”的几行是:
WicketMessage: Can't instantiate page using constructor public testapp.web.ListM()
Root cause:
java.lang.NullPointerException
at testapp.web.ListM.<init>(ListM.java:22)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:192)
at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:57)
at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:298)
at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320)
at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234)
at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1250)
at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1428)
at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:479)
at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:138)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
....
WicketMessage:无法使用构造函数public testapp.web.ListM()实例化页面
根本原因:
java.lang.NullPointerException
在testapp.web.ListM.(ListM.java:22)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:513)
位于org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:192)
位于org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:57)
位于org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:298)
位于org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320)
位于org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234)
位于org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
位于org.apache.wicket.RequestCycle.ProcessEventsAndResponse(RequestCycle.java:1250)
位于org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
位于org.apache.wicket.RequestCycle.steps(RequestCycle.java:1428)
在org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
位于org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:479)
位于org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:138)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
....
GlassFish v2.1.1服务器上部署了带有bean的ejb模块和带有servlet和wicket网页的web模块(如果这有意义的话)
如何通过wicket网页中的远程接口使用我的企业bean?可以在这里找到Java EE集成项目:
由于Wicket组件实例化不受DI容器的管理,因此它必须提供代理注入机制。有一个标准的实施方法,以org.apache.wicket.injection.Injector类为基础。进一步补充前面的答案:由于ejb3风格,最好在第一步声明@Stateless注释中的名称元素,而不是整个第三步。在您回答之前的几个小时,我发现了这个站点,不过还是谢谢你。