2

@EJB アノテーションを使用して、共通の HttpServlet のリモート インターフェイスを介してステートレス EJB にアクセスすると、問題なく動作します。

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

しかし、Wicket WebPage で同じことをしようとすると、Bean と引き換えに null が返されます。

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

GlassFish v2.1.1 サーバーにデプロイされた bean を含む ejb-module と、サーブレットおよび wicket Web ページを含む web-module があります (これが意味を成す場合)。

ウィケット Web ページでリモートインターフェイスを介してエンタープライズ 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スタイルのため、 ejbアノテーションを使用する3番目のステップ全体ではなく、1番目のステップで@Statelessアノテーション内でname要素を宣言する方が良い方法です。

于 2010-06-18T19:16:24.773 に答える