wicket - 在 Wicket 网页中使用 EJB

标签 wicket ejb-3.0 java-ee-5

当我使用@EJB注释通过普通HttpServlet中的远程接口(interface)访问无状态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 的 web-module,以及部署到 GlassFish v2.1.1 服务器的 wicket 网页(如果这有意义的话)。

我应该怎样做才能通过 wicket 网页中的远程接口(interface)使用我的企业 Bean?

最佳答案

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

由于 Wicket 组件实例化不受 DI 容器管理,因此它必须提供代理注入(inject)机制。有一个基于 org.apache.wicket.injection.Injector 类的标准方法来实现这一点。

关于wicket - 在 Wicket 网页中使用 EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3066076/

相关文章:

ajax - Wicket 和丰富的 ajax 网站 : easiest way to do it?

java - 如何在 ajax 调用上更新 Wicket 口 AjaxEditableMultiLineLabel 模型

java - 将 EJB3 注入(inject)基于注释的 JSF2 支持 bean 导致 javax.naming.NameNotFoundException :

java - 如何在 EJB 3 中动态设置 @RolesAllowed

java - 我的 ejb-jar.xml 在哪里?

java - java MDB 中处理异常的最佳方法是什么?

ajax - Wicket Ajax 将一个下拉列表更新到另一个

html - 如何在 wicket 中启用组件生成的 HTML/CSS

java - 当前最佳的单元测试 EJB3/JPA 框架

java-ee-6 - SAP NetWeaver Java EE AS