Hi, Wicket is a bit inconsistent with its CDI integration. It doesn't use wicket-ioc Injector at all. You have to use NonContextual.of(...).inject(this) instead.
On Sun, Nov 25, 2012 at 4:27 PM, Kurt Sys <[email protected]> wrote: > Hey all, > I'm trying to get cdi/injection to work with wicket. So far, > everything seems to be allright except for one thing: injecting into a > wicket-websession. Seems logical in some way, since a session is not a > component, so I tried using 'Injector.get().inject(this)', but > apparently, Injector.get() returns null. Injection into components > does work flawlessly (DaoService as well as other components are > injected into HomePage.java). > What am I missing? > > Thanks, > Kurt > > > Mainapp.java > -- > package mypackage; > > import javax.enterprise.inject.spi.BeanManager; > import javax.naming.InitialContext; > import javax.naming.NamingException; > import org.apache.wicket.Application; > import org.apache.wicket.Session; > import org.apache.wicket.cdi.CdiConfiguration; > import org.apache.wicket.protocol.http.WebApplication; > import org.apache.wicket.request.Request; > import org.apache.wicket.request.Response; > > public class MainApp > extends WebApplication { > > public MainApp() { > } > > @Override > public void init() { > super.init(); > > BeanManager manager = null; > try { > manager = (BeanManager) > InitialContext.doLookup("java:comp/BeanManager"); > } catch (NamingException e) { > e.printStackTrace(); > } > new CdiConfiguration(manager).configure(this); > } > > @Override > public void onDestroy() { > } > > public Class<? extends org.apache.wicket.Page> getHomePage() { > return HomePage.class; > } > > @Override > public final Session newSession(Request req, Response res) { > return new MySession(req); > } > } > -- > > MySession.java > -- > package mypackage; > > import javax.inject.Inject; > import org.apache.wicket.Session; > import org.apache.wicket.injection.Injector; > import org.apache.wicket.protocol.http.WebSession; > import org.apache.wicket.request.Request; > > public class MySession > extends WebSession { > > @Inject > DaoService daoService; > > public static MySession get() { > return (MySession) Session.get(); > } > > MySession(Request req) { > super(req); > init(); > } > > private void init() { > Injector.get().inject(this); > } > > private void test() { > daoService.someMethod(); > } > } > -- > I added the private void test-method to test if daoService is null. > However, there is a nullpointerexception earlier, at line > 'Injector.get().inject(this)'. I avoid 'this' in the constructor, so I > put it in a init-method. That keeps the code a little cleaner, I > think. > > DaoService.java: > -- > package mypackage; > > import java.util.List; > import javax.ejb.Stateless; > import javax.persistence.EntityManager; > import javax.persistence.PersistenceContext; > > @Stateless > public class DaoService { > > @PersistenceContext(unitName="testPU") > private EntityManager entityManager; > > public void someMethod() { > } > > [...] > } > -- > Injecting persistencecontext into daoservice does work fine. > > HomePage.java > -- > package mypackage; > > import javax.inject.Inject; > import org.apache.wicket.markup.html.basic.Label > import org.apache.wicket.model.PropertyModel; > > public class HomePage > extends BasePage { > > @Inject > DaoService daoService; > @Inject > Clock clock; > > public HomePage() { > add(new Label("time", new PropertyModel(this, > "clock.time"))); > daoService.someMethod(); > } > } > -- > No nullpointerexception or any other problem here. > > I don't get any issues as long as I don't open the webapp (the > application starts fine). Some logs (line numbers are incorrect: line > number 28 is the one with 'Injector.get()'; I deleted some comments to > keep it a little more readable): > -- > INFO: Server startup in 6005 ms > 25-nov-2012 16:00:59 org.apache.wicket.DefaultExceptionMapper internalMap > SEVERE: Unexpected error occurred > java.lang.NullPointerException > at mypackage.MySession.init(MySession.java:28) > at mypackage.MySession.<init>(MySession.java:24) > at mypackage.MainApp.newSession(MainApp.java:45) > at > org.apache.wicket.Application.fetchCreateAndSetSession(Application.java:1557) > at org.apache.wicket.Session.get(Session.java:152) > at org.apache.wicket.Restart > [...] > 25-nov-2012 16:00:59 org.apache.wicket.DefaultExceptionMapper map > SEVERE: unexpected exception when handling another exception: null > java.lang.NullPointerException > at mypackage.MySession.init(MySession.java:28) > at mypackage.MySession.<init>(MySession.java:24) > at mypackage.MainApp.newSession(MainApp.java:45) > at > org.apache.wicket.Application.fetchCreateAndSetSession(Application.java:1557) > at org.apache.wicket.Session.get(Session.java:152) > at > org.apache.wicket.RestartResponseAtInterceptPageException$InterceptData.get(RestartResponseAtInterceptPageException.java:146) > [...] > 25-nov-2012 16:00:59 org.apache.wicket.DefaultExceptionMapper map > SEVERE: unexpected exception when handling another exception: null > java.lang.NullPointerException > at mypackage.MySession.init(MySession.java:28) > at mypackage.MySession.<init>(MySession.java:24) > at mypackage.MainApp.newSession(MainApp.java:45) > at > org.apache.wicket.Application.fetchCreateAndSetSession(Application.java:1557) > at org.apache.wicket.Session.get(Session.java:152) > at > org.apache.wicket.RestartResponseAtInterceptPageException$InterceptData.get(RestartResponseAtInterceptPageException.java:146) > -- > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > -- Martin Grigorov jWeekend Training, Consulting, Development http://jWeekend.com <http://jweekend.com/>
