You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Kurt Sys <ku...@gmail.com> on 2012/11/25 17:18:48 UTC

Re: Injector.get() in websession returns null [SOLVED]

That looks nicer than what I had :). Great, thanks a lot!
Kurt

2012/11/25 Martin Grigorov <mg...@apache.org>:
> I don't use Wicket-CDI in my applications so I don't have much experience
> with it but I just took a look at the APIs and here is how I would do it:
>
> CdiContainer.get().getNonContextualManager().inject(this);
>
>
> On Sun, Nov 25, 2012 at 4:59 PM, Kurt Sys <ku...@gmail.com> wrote:
>
>> Hey Martin,
>>
>> Thanks. The init-method of MySession looks now like this:
>> --
>>         private void init() {
>>                 BeanManager manager = null;
>>                 try {
>>                         manager = (BeanManager)
>> InitialContext.doLookup("java:comp/BeanManager");
>>                 } catch (NamingException e) {
>>                         e.printStackTrace();
>>                 }
>>
>>                 NonContextual.of(MySession.class, manager).inject(this);
>>        }
>> --
>>
>> I don't now if this is the proper way of injecting into the session. I
>> don't really get how NonContextual works, but so far, this is how I
>> understand it: the class-parameter in the 'of'-method defines which
>> non-contextual classes can be injected in (managed by) the manager,
>> and inject actually makes the instance managed by the container.
>>
>> And well... there might be an easier way to get the BeanManager, but
>> at least, it works now. Should I make BeanManager from MainApp
>> accessible so MySession can get it from there, or should I leave it
>> like it?
>>
>> Thanks again, that was pretty easy,
>> Kurt
>>
>>
>> 2012/11/25 Martin Grigorov <mg...@apache.org>:
>> > 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 <ku...@gmail.com> 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: users-unsubscribe@wicket.apache.org
>> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >>
>> >>
>> >
>> >
>> > --
>> > Martin Grigorov
>> > jWeekend
>> > Training, Consulting, Development
>> > http://jWeekend.com <http://jweekend.com/>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>
>
> --
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com <http://jweekend.com/>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org