2010-06-17 21 views
2

Lorsque j'utilise l'annotation @EJB pour accéder EJB sans état via l'interface à distance en commun HttpServlet, il fonctionne bien:utilisant EJB dans Wicket WebPage

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

Mais quand je suis en train de la même chose dans Wicket WebPage , je reçois nulle en échange de haricots:

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

Les plusieurs lignes de cette « RuntimeException inattendue » sont:

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

Il existe des ejb-module avec bean et web-module avec une page web servlet et wicket déployée sur le serveur GlassFish v2.1.1 (si cela a un sens).

Que dois-je faire pour utiliser mon enterprise bean via interface à distance dans la page Web wicket?

Répondre

4

Le projet d'intégration Java EE se trouvent ici: http://wicketstuff.org/confluence/display/STUFFWIKI/wicket-contrib-javaee

En tant que composant Wicket instanciation est non manageables par le conteneur de DI, il doit fournir un mécanisme d'injection de proxy. Il existe une façon standard de l'implémenter, basée sur la classe org.apache.wicket.injection.Injector.

+0

J'ai trouvé ce site seulement quelques heures avant que vous ayez répondu, mais merci quand même. –

1

Suite à la réponse précédente: en raison de style EJB3, il est mieux de déclarer élément nom au sein @Stateless annotation à 1ère étape au lieu de toute la 3ème étape using ejb annotation how to.