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: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to