On Tue, May 13, 2014 at 9:04 PM, Jeremie BOUSQUET
<jeremie.bousq...@gmail.com> wrote:
> 2014-05-13 19:10 GMT+02:00 Thomas Mortagne <thomas.morta...@xwiki.com>:
>
>> On Tue, May 13, 2014 at 6:29 PM, Jeremie BOUSQUET
>> <jeremie.bousq...@gmail.com> wrote:
>> > 2014-05-13 17:53 GMT+02:00 Thomas Mortagne <thomas.morta...@xwiki.com>:
>> >
>> >> The ExecutionContext returned by execution.getContext(); comes from a
>> >> ThreadLocal which means it's not a singleton associated to the main
>> >> wiki but a new ExecutionContext generated for each http request.
>> >>
>> >
>> > That is what I understood, but that means that for my component to
>> operate
>> > on correct wiki (in correct context), it should reassign his own
>> "context"
>> > member for each request - and not do it once at component initialization
>> > time.
>>
>> I'm not sure I understand, are you talking about storing the
>> XWikiContext in your component instance at init ?
>>
>
> Yes in fact it's what I did (the "this.context = " in my sample code). I
> realize that I didn't think about it so much when I did it :)
>
>
>>
>> The XWikiContext should never ever be stored, instead you should
>> always request the current one when you need it. Among other things
>> the XWikiContext is not thread safe at all and is supposed to always
>> be used in the Thread it's been created for.
>>
>
> Here I have to apologize because we already had this discussion here, and
> you already suggested to use Provider<XWikiContext>, but I completely
> forgot about it.
>
> I suggest that the component tutorial could be updated around this context
> stuff ?
> http://platform.xwiki.org/xwiki/bin/view/DevGuide/WritingComponents#HTheXWikicontext
>
> I would propose to replace:
>
> "If you still need to access the old XWiki context, then you can get a
> reference to it from the execution context, but you should not cast it to
> an XWikiContext, which would pull the whole xwiki-core as a dependency, but
> to a Map. You won't be able to access all the properties, like the current
> user name or the URL factory, but you can access anything placed in the
> internal map of the XWikiContext."
>
> By:
>
> "If you still need to access the old XWiki context, then you can get a
> reference to it from an injected XWikiContext Provider, but you should not
> cast it to an XWikiContext, which would pull the whole xwiki-core as a
> dependency, but to a Map.

This is not going to be very easy since you have to know the
XWikiContext class to use that Provider ;)

> You won't be able to access all the properties,
> like the current user name or the URL factory, but you can access anything
> placed in the internal map of the XWikiContext."
>
> And to replace the sample code by:
>
> "
> /** Provides access to the XWiki context. Injected by the Component
> Manager. */
>     @Inject
>     private Provider<XWikiContext> xcontextProvider;
>
>     [...]
>
> private void workWithTheContext()
>  {
>         Map<Object, Object> xwikiContext = (Map<Object, Object>)
> xcontextProvider.get();
>         // Do something with the XWiki context
>  }"
>
>
>
>>
>> >
>> >
>> >>
>> >> By the way you should really use Provider<XWikiContext> component
>> instead.
>> >>
>> >
>> > I will, thanks. Does it have a different/better behaviour or is just the
>> > preferred way ?
>> >
>> >
>> >> _______________________________________________
>> >> 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
>>
>>
>>
>> --
>> Thomas Mortagne
>> _______________________________________________
>> 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



-- 
Thomas Mortagne
_______________________________________________
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users

Reply via email to