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 <kurt....@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 <mgrigo...@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 <kurt....@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-unsubscr...@wicket.apache.org
> >> For additional commands, e-mail: users-h...@wicket.apache.org
> >>
> >>
> >
> >
> > --
> > Martin Grigorov
> > jWeekend
> > Training, Consulting, Development
> > http://jWeekend.com <http://jweekend.com/>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>


-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>

Reply via email to