Thanks again, Vincent!  Yup, ComponentDescriptorFactory did the  
magic :-D

On Dec 4, 2009, at 1:39 AM, Vincent Massol <[email protected]> wrote:

>
> On Dec 3, 2009, at 4:34 PM, Lewis Denizen wrote:
>
>> Thanks Vincent!  That's exactly what I needed :-)  Just one more
>> question,
>> though..  Is it possible to inject dependencies by using the
>> attributes
>> defined within the class then?  Right now, using the
>> DefaultComponentDescriptor, I can inject dependencies using:
>>
>> componentDescriptor.addComponentDependency(QueryManager.class,
>> "default")
>>
>> but would be nice if it could auto-inject into something like:
>>
>> class UserXWQLDAO implements UserDAO
>> {
>>   @Requirement
>>   def QueryManager queryManager
>>   //...
>> }
>
> You'd need to use the annotation loader to do that.
> new ComponentAnnotationLoader().initialize(componentManager,
> classloader)
>
> However note that it'll re-register all components for which it finds
> annotations.
>
> I guess you could also use the ComponentDescriptorFactory class which
> would be much simpler since you pass to it the class to configure.
>
> See 
> http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-component/xwiki-component-default/src/main/java/org/xwiki/component/annotation/ComponentDescriptorFactory.java
>
> Thanks
> -Vincent
>
>> Thanks again for a great wiki!
>>
>> On Wed, Dec 2, 2009 at 3:56 AM, Vincent Massol <[email protected]>
>> wrote:
>>
>>> Hi Lewis,
>>>
>>> On Dec 1, 2009, at 7:12 PM, Lewis Denizen wrote:
>>>
>>>> Hi xwiki-users,
>>>>
>>>> I'm trying to bootstrap a component from the wiki itself (via
>>>> Groovy).  I
>>>> have an interface defined as follows:
>>>>
>>>> // This is the text inside the User.UserDAO document
>>>> {{groovy}}
>>>> interface UserDAO
>>>> {
>>>>  def ROLE = UserDAO.class.name
>>>>
>>>>  /**
>>>>   * Returns the current user name.
>>>>   */
>>>>  def getUserName()
>>>>
>>>>  /**
>>>>   * Returns the current user's password
>>>>   */
>>>>  def getPassword()
>>>> }
>>>> {{/groovy}}
>>>>
>>>> I also have a dummy implementation defined as follows:
>>>>
>>>> // This is the text inside the User.UserXWQLDAO document
>>>> {{include document="User.UserDAO" /}}
>>>> {{groovy}}
>>>> import org.xwiki.component.annotation.Component
>>>> import org.xwiki.component.annotation.Requirement
>>>> import org.xwiki.component.descriptor.DefaultComponentDescriptor
>>>> import org.xwiki.query.Query
>>>> import org.xwiki.query.QueryManager
>>>>
>>>> import com.xpn.xwiki.web.Utils
>>>>
>>>> @Component(roles = [ UserDAO.class ])
>>>> class UserXWQLDAO implements UserDAO
>>>> {
>>>>  @Requirement
>>>>  def QueryManager queryManager
>>>>
>>>>  /**
>>>>   * Returns the current user name.
>>>>   */
>>>>  def getUserName() {
>>>>      return "bleh"
>>>>  }
>>>>
>>>>  /**
>>>>   * Returns the current user's password
>>>>   */
>>>>  def getPassword() {
>>>>      return "bleh"
>>>>  }
>>>> }
>>>>
>>>> if(!Utils.componentManager.hasComponent(UserDAO.class))
>>>> {
>>>>  def componentDescriptor = new DefaultComponentDescriptor()
>>>>  componentDescriptor.setImplementation(UserDAO.class)
>>>>
>>>>  Utils.componentManager.registerComponent(componentDescriptor, new
>>>> UserXWQLDAO())
>>>> }
>>>> {{/groovy}}
>>>>
>>>> The first problem I ran into was that Groovy 1.6.5 ran into
>>>> IncompatibleClassChangeErrors (
>>> http://jira.codehaus.org/browse/GROOVY-3830
>>>> ).
>>>> Upgrading to 1.6.6 fixed this issue.  But, then I ran into a NPE:
>>>>
>>>> *exception*
>>>>
>>>> javax.servlet.ServletException: Failed to initialize Request/
>>>> Response or Session
>>>>
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .web.XWikiAction.initializeContainerComponent(XWikiAction.java:
>>>> 391)
>>>>
>>>> com
>>>> .xpn.xwiki.web.XWikiAction.initializeXWikiContext(XWikiAction.java:
>>>> 372)
>>>>     com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:112)
>>>>
>>>> org
>>>> .apache
>>>> .struts
>>>> .action.RequestProcessor.processActionPerform 
>>>> (RequestProcessor.java:
>>>> 431)
>>>>
>>>> org
>>>> .apache
>>>> .struts.action.RequestProcessor.process(RequestProcessor.java:
>>>> 236)
>>>>
>>>> org.apache.struts.action.ActionServlet.process(ActionServlet.java:
>>>> 1196)
>>>>
>>> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java: 
>>> 432)
>>>>     javax.servlet.http.HttpServlet.service(Unknown Source)
>>>>     javax.servlet.http.HttpServlet.service(Unknown Source)
>>>>
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .wysiwyg
>>>> .server.filter.ConversionFilter.doFilter(ConversionFilter.java:152)
>>>>     com.xpn.xwiki.web.ActionFilter.doFilter(ActionFilter.java:119)
>>>>
>>>> com
>>>> .xpn
>>>> .xwiki.plugin.webdav.XWikiDavFilter.doFilter(XWikiDavFilter.java:
>>>> 68)
>>>>
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .web
>>>> .SavedRequestRestorerFilter
>>>> .doFilter(SavedRequestRestorerFilter.java:
>>>> 295)
>>>>
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .web
>>>> .SetCharacterEncodingFilter
>>>> .doFilter(SetCharacterEncodingFilter.java:
>>>> 112)
>>>>
>>>> *root cause*
>>>>
>>>> org.xwiki.container.servlet.ServletContainerException: Failed to
>>>> initialize request
>>>>
>>>> org
>>>> .xwiki
>>>> .container
>>>> .servlet
>>>> .internal
>>>> .DefaultServletContainerInitializer
>>>> .initializeRequest(DefaultServletContainerInitializer.java:98)
>>>>
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .web.XWikiAction.initializeContainerComponent(XWikiAction.java:
>>>> 387)
>>>>
>>>> com
>>>> .xpn.xwiki.web.XWikiAction.initializeXWikiContext(XWikiAction.java:
>>>> 372)
>>>>     com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:112)
>>>>
>>>> org
>>>> .apache
>>>> .struts
>>>> .action.RequestProcessor.processActionPerform 
>>>> (RequestProcessor.java:
>>>> 431)
>>>>
>>>> org
>>>> .apache
>>>> .struts.action.RequestProcessor.process(RequestProcessor.java:
>>>> 236)
>>>>
>>>> org.apache.struts.action.ActionServlet.process(ActionServlet.java:
>>>> 1196)
>>>>
>>> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java: 
>>> 432)
>>>>     javax.servlet.http.HttpServlet.service(Unknown Source)
>>>>     javax.servlet.http.HttpServlet.service(Unknown Source)
>>>>
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .wysiwyg
>>>> .server.filter.ConversionFilter.doFilter(ConversionFilter.java:152)
>>>>     com.xpn.xwiki.web.ActionFilter.doFilter(ActionFilter.java:119)
>>>>
>>>> com
>>>> .xpn
>>>> .xwiki.plugin.webdav.XWikiDavFilter.doFilter(XWikiDavFilter.java:
>>>> 68)
>>>>
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .web
>>>> .SavedRequestRestorerFilter
>>>> .doFilter(SavedRequestRestorerFilter.java:
>>>> 295)
>>>>
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .web
>>>> .SetCharacterEncodingFilter
>>>> .doFilter(SetCharacterEncodingFilter.java:
>>>> 112)
>>>>
>>>> *root cause*
>>>>
>>>> java.lang.NullPointerException
>>>>
>>>>
>>>> Haven't investigated any further than this, but has anyone
>>>> successfully
>>>> created components completely within a wiki document?  That would
>>>> just be so
>>>> cool!  Great work!
>>>
>>> Yes, I've done that several times.
>>>
>>> Here's an example:
>>>
>>> http://svn.xwiki.org/svnroot/xwiki/platform/xwiki-applications/trunk/ircbot/src/main/resources/IRC/JiraBotlet.xml
>>> (search for registerComponent).
>>>
>>> Hope it helps,
>>> -Vincent
> _______________________________________________
> users mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/users
_______________________________________________
users mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/users

Reply via email to