I couldn't manage to implement a fix. I removed "module" from GuiceManaged annotation, and hard coded the module instance into GuiceManagedInstanceResolver. But when I tried to register the created injector to servlet context with this code:
Injector injector = Guice.createInjector(moduleInstances); ServletContext servletContext = (ServletContext) webServiceContext.getMessageContext(). get(MessageContext.SERVLET_CONTEXT); servletContext.setAttribute(Injector.class.getName(), injector); it throws an IllegalStateException with "getMessageContext() can only be called while servicing a request". I am not sure that I am on the correct path either. I'll try to retrieve the injector within the servlets' init methods and call injector.injectDependencies(this). > Currently there is no way of getting the injector from jax-ws > guicemanaged > (or setting it) > > The best fix is probably to pin the injector to the > WebServiceContext/ServletContext like guice servlet is doing, I'll > experiment with ways of exposing the injector and get back real soon > > I'm also currently doing a better jax-ws - guice servlet integration > (minimal web.xml and no sun-jaxws.xml), but i've run into some > problems > there and getting answers from the jax-ws authors is quite difficult. > If > anyone knows an answer to this question, i'd be happy:http:// > forums.java.net/jive/thread.jspa?threadID=63821&tstart=15 > > -- > Marcus Eriksson > > On Sun, Aug 30, 2009 at 5:00 PM, Stuart McCulloch <[email protected]> > wrote: > > 2009/8/30 Chris Stockton <[email protected]> > > >> No, there's no state in the module. But if I have a class bound in > >> Singleton scope in my module and the module is loaded twice, each > injector > >> will have a separate instance of the class. > > > note that Guice singletons are per-injector, so you would get two > instances > > of the class even if you passed the same module instance into each > > injector: > > > http://groups.google.com/group/google-guice/msg/9350be0b7d596795 > > > ( unless of course you bound the class using 'toInstance()' to an object > > that > > you created in the module, rather than binding it in the singleton > scope > > ) > > > imho it looks more like you need to use the same injector, rather than > the > > same module instance - is there any way you could get the injector from > > JAX-WS and re-use that in the servlet context listener? (or vice-versa) > > > On Sun, Aug 30, 2009 at 3:24 AM, Stuart McCulloch <[email protected] > >wrote: > > >>> 2009/8/30 Chris <[email protected]> > > >>>> Is there a way to inject JAX-WS web services and servlets using the > >>>> same, single instance of my Guice module? > > >>>> Say I have a web service: > > >>>> @GuiceManaged(module=MyModule.class) > >>>> @WebService > >>>> class MyWebService { > >>>> } > > >>>> and a GuiceServletContextListener > > >>>> class MyGuiceServletContextListener extends > >>>> GuiceServletContextListener { > >>>> protected Injector getInjector() { return Guice.createInjector(new > >>>> MyModule()); } > >>>> } > > >>>> My web services are injected using the guicemanaged.jar by annotating > >>>> the SIB class with a @GuiceManaged(module=MyModule.class) annotation > >>>> and my servlets are injected using > >>>> GuiceServletContextListener.getInjector() method and each instantiates > >>>> its own copy of MyModule. > > >>>> Is there a way to have both the GuiceManaged and > >>>> GuiceServletContextListener use the same instance of MyModule? Can/ > >>>> should I make MyModule a static class? > > >>> just wondering why you need a single instance of your module? does it > >>> have some sort of state? > > >>> -- > >>> Cheers, Stuart > > > -- > > Cheers, Stuart -- You received this message because you are subscribed to the Google Groups "google-guice" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-guice?hl=en.
