On 30 Mar 2012, at 22:59, diogoeag wrote:

> HI,
> 
> Thanks for the reply.
> 
> I've read the issue that you have mentioned and I didn't understand how can 
> we solve the problem. 
> 
> Can you help me on how to solve my issue with the information that you gave 
> me? 

Right now each ServletModule requests _static_ injection on the GuiceFilter 
class (see InternalServletModule for the exact line), so the static pipeline 
field in GuiceFilter will only point back to the last injector that had a 
ServletModule. The static pipeline is used whenever you use the web.xml style 
of configuration.

That's why you see the warning message (happens when the GuiceFilter class sees 
multiple static injection) and probably why only one application is active.

One solution is to switch to a programmatic configuration approach - ie. get 
the GuiceFilter instance from each injector and register that with the web 
container. Then each GuiceFilter instance will use an injected pipeline 
(courtesy of the injector used to retrieve the GuiceFilter) over the static 
pipeline. You'll still see the warning message because the ServetModules will 
still request static injection, but can safely ignore it.

However, with the changes to guice-servlet suggested in comment 5 of issue 618 
you could also extend the GuiceFilter class and still use the web.xml approach 
- only this time you'd name the subclass in the web.xml and have your own code 
in the constructor to bootstrap a different injector for each instance created 
of the filter (say using some filter parameter to load the appropriate servlet 
module class at runtime).

> On Friday, March 30, 2012 3:16:38 PM UTC+1, Stuart McCulloch wrote:
> On 30 Mar 2012, at 22:10, diogoeag wrote:
> 
>> Hi All,
>> 
>> We are using Jetty embedded and reuse lots of classes in a common lib that 
>> require guice.
>> 
>> Usually what we do in our GuiceFilter of each web app is:
>> 
>> public class GuiceConfig extends GuiceServletContextListener {
>>     @Override
>>     protected Injector getInjector() {
>>         final Map<String, String> params = new HashMap<String, String>();
>>           params.put(PackagesResourceConfig.PROPERTY_PACKAGES, 
>> "com.company.app.resources");
>> 
>>         return Guice.createInjector(new ServletModule() {
>>             @Override
>>             protected void configureServlets() {
>>                 serve("/*").with(GuiceContainer.class, params);
>>             }
>>         });
>>     }
>> }
>> 
>> 
>> Our problem is that when we are deploying the applications the following 
>> warning happens:
>> 
>> ! GuiceFilter.setPipeline:87                      Multiple Servlet injectors 
>> detected. This is a warning indicating that you have more than one 
>> GuiceFilter running in your web application. If this is deliberate, you may 
>> safely ignore this message. If this is NOT deliberate however, your 
>> application may not work as expected.
>> 
>> And only one application is working after the server startup. Is there any 
>> other way to solve the problem rather than having the guice jar in each web 
>> app ? (this is not an option for us, because then we get lots of class cast 
>> exceptions due to our commons libs not being in the same classloader)
> 
> See http://code.google.com/p/google-guice/issues/detail?id=618#c2
> 
>> Cheers
>>  
>> On Saturday, February 5, 2011 9:10:29 PM UTC, Evan Ruff wrote:
>> Guy guys!
>> 
>> I'm making some progress with the Guice. I've successfully implemented guice 
>> in all of my applications and have even migrated everything over to 
>> gwt-dispatch! I'm really beginning to get the hang of it and I'm starting to 
>> understand just how powerful it is. Now, I'm starting to push GIN down into 
>> all the GWT stuff... exciting! 
>> 
>> Everything is looking good (no turtles!) in development. I'm running into 
>> one (simple?) issue with deployment. I am running a single Tomcat 7 server 
>> for staging. I have two hosts (stage and admin) and am deploying three 
>> webapps (moose.war, charts.war, sem.war). These are all independent 
>> contexts. moose.war goes to the admin virtual host as ROOT, and the other 
>> two go to the stage host. When I deploy the first WAR to the server, it 
>> works great. As soon as I deploy the other, I get a WARNING in the log:
>> 
>> WARNING: Multiple Servlet injectors detected. This is a warning indicating 
>> that you have more than one GuiceFilter running in your web application. If 
>> this is deliberate, you may safely ignore this message. If this is NOT 
>> deliberate however, your application may not work as expected.
>> 
>> Now, if I go to access a servlet from either WAR, they both give 404s! 
>> They're using similar web.xml files with:
>>      <filter>
>>              <filter-name>guiceFilter</filter-name>
>>              
>> <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
>>      </filter>
>> 
>>      <filter-mapping>
>>              <filter-name>guiceFilter</filter-name>
>>              <url-pattern>/*</url-pattern>
>>      </filter-mapping>
>> 
>>      <listener>
>>              <listener-class>com.hs.***MY.LISTENER.HERE***</listener-class>
>>      </listener>
>> 
>> I have tried altering the filter url-pattern but nothing seems to be helping 
>> the conflict. If I use Tomcat Manager to turn the hosts on/off as well as 
>> the various contexts, I can make them each work individually, but none at a 
>> time.
>> 
>> Is there a scoping issue somewhere? How can I get around this?!
>> 
>> Thanks!!
>> 
>> E
>> 
>> 
>> 
>> 
>> 
>> 
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "google-guice" group.
> To view this discussion on the web visit 
> https://groups.google.com/d/msg/google-guice/-/RrkhzVk38j0J.
> 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.

-- 
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.

Reply via email to