簡體   English   中英

在Wicket WebPage中使用EJB

[英]Using EJB in Wicket WebPage

當我使用@EJB批注通過普通HttpServlet中的遠程接口訪問無狀態EJB時,它可以正常工作:

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

但是,當我在Wicket WebPage中嘗試相同的操作時,得到的空值是bean的回報:

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

此“意外的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)
  ....

有部署到GlassFish v2.1.1服務器的帶Bean的ejb模塊和帶servlet的wick和Web頁的Web模塊(如果有任何意義)。

如何通過檢票頁面中的遠程接口使用我的企業bean?

您可以在以下位置找到Java EE集成項目: http : //wicketstuff.org/confluence/display/STUFFWIKI/wicket-contrib-javaee

由於Wicket組件實例化不受DI容器的管理,因此它必須提供代理注入機制。 有一個標准的實現方法,基於org.apache.wicket.injection.Injector類。

進一步回答先前的答案:由於ejb3樣式,在第一步使用@Stateless注釋聲明name元素是一種更好的方法,而不是在如何使用ejb注釋的整個第三步中聲明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM