On Tue, Oct 1, 2013 at 10:12 AM, Jeremie BOUSQUET
<jeremie.bousquet(a)gmail.com> wrote:
2013/10/1 Thomas Mortagne
<thomas.mortagne(a)xwiki.com>
I don't understand why you use
XWiki#getXWiki, this method job is to
initialize everything related to the request which you usually don't
care in a background thread (in as you can see in your case does not
work since you don't have an request in that thread).
In fact I use the following to not have update date automatically set
when
saving document:
doc.setContentDirty(false);
doc.setMetaDataDirty(false);
This is not available from Document but from XWikiDocument, that's why I
use XWiki#getXWiki#saveDocument.
This is old code. I realize now that maybe I could just update underlying
XWikiDocument returned by Document#getDoc, then use Document#saveDocument
to save it ?
You should not use api.Document in java. This is a scripting API and
to use only in scripts IMO.
I'm not sure about what else I could use ... I use the Bridge when possible
(but it's limited not so better ...), I would use the new model if it was
in place and stable.
All this code was at start migrated from a Groovy script, so I kept usage
of old core for some things.
If I understood what you said, this was already discussed here:
My conclusion was to rely on old core for the time being ...
Thanks,
Jeremie
A good helper when you need a usable XWikiContext wherether you are in
the XWikiContext provider as in:
@Inject
Provider<XWikiContext> xcontext;
it gives you the current context in a request thread and one suitable
for background thread otherwise.
In fact currently in the component called from my job, I use the
following
to retrieve context and xwiki old-core api, in
initialize():
ExecutionContext context = execution.getContext();
this.context = (XWikiContext) context.getProperty("xwikicontext");
this.xwiki = this.context.getWiki();
Only Execution is @Injected.
I'll try to get XWikiContext injected as you propose.
Thanks !
Jeremie
>
> On Mon, Sep 30, 2013 at 11:57 PM, Jeremie BOUSQUET
> <jeremie.bousquet(a)gmail.com> wrote:
> > Hello,
> >
> > I'm trying to save a document from inside a job [1] execution, as
follows
> > roughly:
> >
> > xwiki.getXWiki(context).saveDocument(doc, comment, context);
> >
> > Nothing really special ... It used to work (out of a job), but now it
> > throws NPE:
> >
> >
<trace>com.xpn.xwiki.XWiki.stripSegmentFromPath(XWiki.java:4725)</trace>
> >
<trace>com.xpn.xwiki.XWiki.getRequestWikiName(XWiki.java:566)</trace>
> > <trace>com.xpn.xwiki.XWiki.getXWiki(XWiki.java:492)</trace>
> >
>
<trace>org.xwiki.contrib.mailarchive.internal.persistence.XWikiPersistence.saveAsUser(XWikiPersistence.java:678)</trace>
> >
> > Checking source code, it happens there (sorry, I roughly decompiled
it):
> >
> > /* 560 */ if ("1".equals(Param("xwiki.virtual.usepath",
"1"))) {
> > /* 561 */ String uri = request.getRequestURI();
> > /* 562 */ if (LOGGER.isDebugEnabled()) {
> > /* 563 */ LOGGER.debug("Request uri is: " + uri);
> > /* */ }
> > /* */
> > /* 566 */ uri = stripSegmentFromPath(uri,
> request.getContextPath());
> >
> > From the logs in DEBUG, I see:
> >
> > "Request uri is: null"
> >
> > ... which is kind of logical I believe, as I'm in a Thread triggered
by
> > another thread, and not directly in an
http request.
> >
> > I'm not sure of what I should do from here ... And if my analysis is
> > correct, or if something else is wrong. Maybe I should do something
with
ExecutionContext ...
Thanks,
BR,
Jeremie
[1]
http://extensions.xwiki.org/xwiki/bin/view/Extension/Job+Module
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs
--
Thomas Mortagne
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs
--
Thomas Mortagne
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs