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

Thanks again for a great wiki!

On Wed, Dec 2, 2009 at 3:56 AM, Vincent Massol <vinc...@massol.net> 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
> users@xwiki.org
> http://lists.xwiki.org/mailman/listinfo/users
>
_______________________________________________
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users

Reply via email to