Использование EJB в Wicket WebPage - PullRequest
2 голосов
/ 18 июня 2010

Когда я использую аннотацию @EJB для доступа к EJB без сохранения состояния через удаленный интерфейс в обычном HttpServlet, все работает нормально:

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

Но когда я пытаюсь сделать то же самое в Wicket WebPage, я получаю ноль в обмен на бин:

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 развернут ejb-модуль с бином и веб-модулем с веб-страницей сервлета и калитки (если это имеет смысл).

Что я должен сделать , чтобы использовать мой корпоративный бин через удаленный интерфейс на веб-странице калитки?

Ответы [ 2 ]

4 голосов
/ 18 июня 2010

Проект интеграции Java EE можно найти здесь: http://wicketstuff.org/confluence/display/STUFFWIKI/wicket-contrib-javaee

Поскольку создание экземпляра компонента Wicket не управляется контейнером DI, он должен обеспечивать механизм внедрения прокси.Существует стандартный способ реализации этого, основанный на классе org.apache.wicket.injection.Injector.

1 голос
/ 18 июня 2010

В дополнение к предыдущему ответу: благодаря стилю ejb3 лучше объявить элемент name в @ Stateless аннотации на 1-м шаге вместо всего 3-го шага в , используяEJB аннотации, как .

...