On Tue, Oct 1, 2013 at 11:15 AM, Jeremie BOUSQUET
<jeremie.bousquet(a)gmail.com> wrote:
Le 1 oct. 2013 10:54, "Thomas Mortagne"
<thomas.mortagne(a)xwiki.com> a
écrit :
>
> On Tue, Oct 1, 2013 at 10:38 AM, Jeremie BOUSQUET
> <jeremie.bousquet(a)gmail.com> wrote:
> > 2013/10/1 Thomas Mortagne <thomas.mortagne(a)xwiki.com>
> >
> >> 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.
>>
>
> You mean this ?
>
http://nexus.xwiki.org/nexus/service/local/repositories/releases/archive/or…
>
> 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:
http://xwiki.markmail.org/message/di3c5hheqhqfgvpe
My conclusion was to rely on old core for the time being ...
com.xpn.xwiki.api.Document is an oldcore class too so I don't
understand what you mean exactly. Both classes are in the same module
but Document is really not well suited for java side and even less for
a background thread. All I'm saying here is: don't use
com.xpn.xwiki.api classes in Java, I don't see what the bridge has to
do with that.
Sorry I don't get it... Just above you said to not use XWiki#getXWiki
which
is in com.com.xwiki.
You are mixing two very different things here:
* you should not get the XWiki object using
com.xpn.xwiki.XWiki#getXWiki not matter what API you are using to
manipulate documents. This method is used at a low level to initialize
the context of a request. When you need the XWiki object, get it from
the XWikiContext object (XWikiContext#getWiki()).
I always
thought com.xpn.xwiki.api to form xwiki (old)
core api.
These are scripting API full of Velocity helpers and automatic right
checking that you usually don't care about when you are in Java or
that you checked yourself already before manipulating the documents.
You could see com.xpn.xwiki.api as an ancestor of a ScriptService for
the model.
These classes are what was published in your
javadoc since the
beginning almost.
Yes and that was an error.
Then again, what api should I use to manipulate
pages/objects from java ?
Your entry point for manipulating the model in Java is XWikiContext,
usually the easiest being the access it with the XWikiContext
provider.
Then you get everything else from it:
* xcontext.getWiki()
* xcontext.getWiki().getDocument(...)
* xcontext.getWiki().getDocument().getXObject(...)
* ...
Wow ok, sorry for that ... I finally got it :-)
In my mind I mixed getWiki() and getXWiki(), and I didn't realize that in
my code when I did xwiki.getXWiki(), I was calling it on
com.xpn.xwiki.XWiki - I thought I was in api.XWiki.
You're absolutely right of course, and I never intended to call this
getXWiki() method in fact. That's a crappy part that remained when I
quickly translated all this from groovy I think ...
Because on another parts I do exactly what you show (ie, use
xcontext.getWiki()).
Many thanks for your patience ! :)
Jeremie
>
> >
> > 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
>
_______________________________________________
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