2

当我使用@EJB注解通过普通HttpServlet中的远程接口访问无状态EJB时,它可以正常工作:

public class ListMsgs extends HttpServlet
{
  @EJB
  private Msgs msgsRI;
  ...
  protected void processRequest(...) ...
  {
    List msgs = msgsRI.getAll();
    ...
  }
  ...
}

但是当我在 Wicket WebPage 中尝试同样的事情时,我得到 null 作为 bean 的回报:

public class ListM extends WebPage
{
  @EJB
  private Msgs msgsRI;
  ...
  public ListM()
  {
    List msgs = msgsRI.getAll(); // NullPointerException
    ...
  }
  ...
}

这个“Unexpected RuntimeException”的几行是:

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)
  ....

有带有 bean 的 ejb-module 和带有 servlet 和 wicket 网页的 web-module 部署到 GlassFish v2.1.1 服务器(如果这有意义的话)。

我应该怎么做才能通过检票口网页中的远程接口使用我的企业 bean ?

4

2 回答 2

4

Java EE 集成项目可以在这里找到:http ://wicketstuff.org/confluence/display/STUFFWIKI/wicket-contrib-javaee

由于 Wicket 组件实例化不受 DI 容器管理,它必须提供代理注入机制。有一种基于 org.apache.wicket.injection.Injector 类的标准实现方式。

于 2010-06-18T13:25:40.027 回答
1

进一步回答先前的答案:由于 ejb3 样式,在第一步中在@Stateless注释中声明名称元素是更好的方法,而不是在使用 ejb 注释时的整个第三步如何

于 2010-06-18T19:16:24.773 回答