On Aug 10, 2009, at 1:31 PM, Sergiu Dumitriu wrote:

> Vincent Massol wrote:
>> On Aug 10, 2009, at 12:41 PM, Sergiu Dumitriu wrote:
>>
>>> Anamaria Stoica wrote:
>>>> It looks like you can bind an instance to type in Guice. This is
>>>> done either
>>>> with Instance Bindings,
>>>> @Provides Methods or Provider Bindings, depending on the complexity
>>>> of the
>>>> class.
>>>> (http://code.google.com/p/google-guice/wiki/Bindings)
>>>>
>>>> All bindings are defined in a class that extends AbstractModule,
>>>> this would
>>>> be
>>>> XWSocialModule in my code (
>>>> https://svn.xwiki.org/svnroot/xwiki/sandbox/gsoc/opensocial/xwiki-social-opensocial/src/main/java/org/xwiki/opensocial/social/XWSocialModule.java)
>>>> .
>>>>
>>>>
>>>> These modules are then passed as arguments to
>>>> Guice.createInjector(), which
>>>> builds the injector.
>>>> In my application, the injector is build by
>>>> GuiceServletContextListener (
>>>> http://svn.apache.org/repos/asf/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/servlet/GuiceServletContextListener.java)
>>>> This servlet takes the context parameters defined in my web.xml;
>>>> these are:
>>>>
>>>> <context-param>
>>>>   <param-name>guice-modules</param-name>
>>>>   <param-value>
>>>>     org.apache.shindig.common.PropertiesModule:
>>>>     org.apache.shindig.gadgets.DefaultGuiceModule:
>>>>     org.apache.shindig.gadgets.oauth.OAuthModule:
>>>>     org.apache.shindig.common.cache.ehcache.EhCacheModule:
>>>>     org.xwiki.opensocial.social.XWSocialModule
>>>>   </param-value>
>>>> </context-param>
>>>>
>>>> <listener>
>>>>
>>>> <listener-
>>>> class>org.xwiki.container.servlet.XWikiServletContextListener</
>>>> listener-class>
>>>> </listener>
>>>>
>>>> Now, all I need to do is bind the instance of PersonServiceXW after
>>>> it has
>>>> been initialized by XWiki's Component Manager.
>>>> The binding will be done in XWSocialModule, using one of the  
>>>> instance
>>>> binding methods (Instance Bindings,
>>>> @Provides Methods or Provider Bindings).
>>>>
>>>> My questions are:
>>>> 1. How do I make sure PersonServiceXW has been initialized already
>>>> by the
>>>> XWiki CM before binding it for Guice ?
>>> List GuiceServletContextListener AFTER XWikiServletContextListener  
>>> in
>>> web.xml. The servlet spec specifies that listeners are called in the
>>> order they are encountered in web.xml, and  
>>> XWikiServletContextListener
>>> is the one that starts our component manager.
>>
>> For the future: we should not use other servlet context listener  
>> other
>> than the xwiki one. We need it to init the CM but once this is done
>> everything else should be done with it.
>>
>> So ideally you should instead create an EventListener that listen for
>> the application start event and initizalize shindig in there rather
>> than use an environment-specific servlet context listener.
>
> I'm not sure, but I think that Shindig works this way, there's nothing
> we can do about it.

Just checked
http://svn.apache.org/repos/asf/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/servlet/GuiceServletContextListener.java

It doesn't do much, just init Guice in a few lines.

Thanks
-Vincent

>> -Vincent
>>
>>>> 2. How do I get the initialized PersonServiceXW instance from
>>>> XWSocialModule?
>>> com.xpn.xwiki.web.Utils.getComponent(PersonServiceXW.class)
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to