On 24.12.2008, at 04:05, Sergiu Dumitriu wrote:

> Juergen Lorenz Simon wrote:
>> Hi,
>>
>> On 18.12.2008, at 15:08, Thomas Mortagne wrote:
>>
>>> On Thu, Dec 18, 2008 at 3:03 PM, Juergen Lorenz Simon <[email protected]
>>>> wrote:
>>>> Hi,
>>>>
>>>> On 18.12.2008, at 14:37, Thomas Mortagne wrote:
>>>>
>>>>> On Thu, Dec 18, 2008 at 1:54 PM, Juergen Lorenz Simon <[email protected]
>>>>>> wrote:
>>>>>> Hi Thomas,
>>>>>>
>>>>>> no, I do not create a context myself. I'm running this in Eclipse
>>>>> But where do you get the XWikiContext you give to
>>>>> createExternalURL() ?
>>>>
>>>> When the indexing plugin is instantiated I grab the context:
>>>>
>>>>   public IndexUpdater(XWiki wiki, XWikiContext context) {
>>>>      this.xwiki = wiki;
>>>>      this.context = context;
>>>>   }
>>>>
>>>> Which is obtained from XWiki at plugin initialization time:
>>>>
>>>> public void init(XWikiContext context) {
>>>>      ...
>>>>       // initialize the actual plugin
>>>>      indexUpdater = new IndexUpdater(context.getWiki(), context);
>>>>      indexUpdater.start();
>>>>
>>>>      // Hook into the document change notifications
>>>>      DocChangeRule docChangeRule = new DocChangeRule(indexUpdater);
>>>>
>>>> context
>>>> .getWiki().getNotificationManager().addGeneralRule(docChangeRule);
>>>> }
>>>>
>>>> Do you think I should use the context that comes in the notify()
>>>> method instead?
>>> No need, even if it's cleaner but it should be exactly the same java
>>> object I think, so I don't understand why your context's request
>>> object is wrong.
>
> No, that is not true. The context received from the notification
> mechanism is always the current context, while the one from the
> initialization is the context created for the first request that
> triggered the initialization.
>
> The stale context has references to the initial ServletRequest and
> ServletResponse objects, but the container (usually) closes those
> objects. This is container-specific, and I was also bugged by this
> problem in Tomcat. So, what happens in Tomcat (if I remember correctly
> what I found a long time ago debugging), is that its  
> HttpServletRequest
> object is a wrapper over another class holding the actual request  
> data.
> After the request finishes, the internal object is cleaned, but the
> request wrapper remains in the XWikiContext, although all the calls  
> will
> fail (the internal object is missing, thus the NPE).

Spot on. When using the context coming in with the notify() method,  
the url is correct.

Thanks!

J.L.Simon

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to