On Oct 20, 2009, at 3:04 PM, Asiri Rathnayake wrote:

> Hi Vincent,
>
> On Tue, Oct 20, 2009 at 6:18 PM, Vincent Massol <[email protected]>  
> wrote:
>
>> IMO the problem is the design of XWikiDavServlet.
>> It shouldn't contain any field.
>>
>> For example why not use the component manager to load a component to
>> perform the handling of DAV requests?
>>
>
>
> jackrabbit DavServlet has following abstract methods:
>
> <code>
> /**
>     * Checks if the precondition for this request and resource is  
> valid.
>     *
>     * @param request
>     * @param resource
>     * @return
>     */
>    abstract protected boolean isPreconditionValid(WebdavRequest  
> request,
> DavResource resource);
>
>    /**
>     * Returns the <code>DavSessionProvider</code>.
>     *
>     * @return the session provider
>     */
>    abstract public DavSessionProvider getDavSessionProvider();
>
>    /**
>     * Returns the <code>DavSessionProvider</code>.
>     *
>     * @param davSessionProvider
>     */
>    abstract public void setDavSessionProvider(DavSessionProvider
> davSessionProvider);
>
>    /**
>     * Returns the <code>DavLocatorFactory</code>.
>     *
>     * @return the locator factory
>     */
>    abstract public DavLocatorFactory getLocatorFactory();
>
>    /**
>     * Sets the <code>DavLocatorFactory</code>.
>     *
>     * @param locatorFactory
>     */
>    abstract public void setLocatorFactory(DavLocatorFactory
> locatorFactory);
>
>    /**
>     * Returns the <code>DavResourceFactory</code>.
>     *
>     * @return the resource factory
>     */
>    abstract public DavResourceFactory getResourceFactory();
>
>    /**
>     * Sets the <code>DavResourceFactory</code>.
>     *
>     * @param resourceFactory
>     */
>    abstract public void setResourceFactory(DavResourceFactory
> resourceFactory);
>
>    /**
>     * Returns the value of the 'WWW-Authenticate' header, that is  
> returned
> in
>     * case of 401 error.
>     *
>     * @return value of the 'WWW-Authenticate' header
>     */
>    abstract public String getAuthenticateHeaderValue();
> </code>
>
> Now I have few doubts about why there are setXXX() methods but the  
> point is
> we need those instance variables if we are to implement these methods.

We could still either make them components and look them up in  
getXXX() or have a manager component that returns them.

Thanks
-Vincent

>
> Thanks.
>
> - Asiri
>
>
>
>> The CM would be retrieved from the servlet context.
>>
>> Thanks
>> -Vincent
>>
>> On Oct 20, 2009, at 2:36 PM, Asiri Rathnayake wrote:
>>
>>> Hi,
>>>
>>>
>>> ok that's better indeed. The reason is that according to the spec a
>>>> Servlet can be serialized (saved on disk) if the memory becomes low
>>>> and thus must be able to be loaded back into memory at a later  
>>>> point
>>>> (the same need for load-balancing).
>>>>
>>>> However your change has introduced another problem: transient means
>>>> the field will not be saved when the servlet is serialized. Thus  
>>>> when
>>>> it's deserialized these fields will be null and the code will  
>>>> fail...
>>>>
>>>> Whereas before the servlet would have failed on serialization,  
>>>> it'll
>>>> now fail on deserialization...
>>>>
>>>> Note: Deserialization will not call the constructor.
>>>>
>>>
>>> I was hoping upon de serialization it will call init() where i
>>> initialize
>>> these variables. But I can't find a reference that says so (yet).
>>>
>>>
>>>
>>>> Solution: either make the field objects serializable or capture
>>>> deserialization to set up the transient field values. Note that  
>>>> this
>>>> last solution may potentially cause problems with threading so this
>>>> might need to be synchronized I think. The best solution is to make
>>>> the field Objects Serializable IMO.
>>>>
>>>
>>> One instance variable used is provided by jackrabbit library which
>>> is not
>>> serializable. I can do a custom serialization or,
>>>
>>> I can create these instance variable for each request (get***) which
>>> is a
>>> waste.
>>>
>>> Looking around to see if there is another way.
>>>
>>> Thanks.
>>>
>>> - Asiri
>>>
>>>
>>>>
>>>> WDYT?
>>>>
>>>> Thanks
>>>> -Vincent
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to