[ http://issues.apache.org/jira/browse/TOMAHAWK-108?page=all ]
     
Mario Ivankovits resolved TOMAHAWK-108:
---------------------------------------

    Resolution: Fixed

Made AddResource request scope so it is request safe now.
Its still not "thread safe" but this is not required as the request-thread is 
now the only thread accessing it.

> ExtensionsFilter is not THREAD SAFE
> -----------------------------------
>
>          Key: TOMAHAWK-108
>          URL: http://issues.apache.org/jira/browse/TOMAHAWK-108
>      Project: MyFaces Tomahawk
>         Type: Bug
>  Environment: JDK 1.5, OC4J
>     Reporter: Claudio Tasso
>     Assignee: Mario Ivankovits
>     Priority: Critical

>
> Using Tomahawk I experimented some problems with the ExtensionFilter, in 
> particular some errors occur when the MyFaces javascript is written inside 
> the body of the response.
> This is the typical error message:
> java.lang.StringIndexOutOfBoundsException
>    at java.lang.StringBuffer.insert(StringBuffer.java:905)
>    at 
> org.apache.myfaces.renderkit.html.util.DefaultAddResource.writeMyFacesJavascriptBeforeBodyEnd(DefaultAddResource.java:658)
>    at 
> org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:138)
>    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) - Developer 
> Preview 
> 4].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:699)
>    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) - Developer 
> Preview 
> 4].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:397)
>    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) - Developer 
> Preview 
> 4].server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:833)
>    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) - Developer 
> Preview 
> 4].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:430)
>    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) - Developer 
> Preview 
> 4].server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:216)
>    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) - Developer 
> Preview 4].server.http.HttpRequestHandler.run(HttpRequestHandler.java:119)
>    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) - Developer 
> Preview 4].server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)
>    at 
> oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:215)
>    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) - Developer 
> Preview 
> 4].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
>    at java.lang.Thread.run(Thread.java:534)
> This error occurs randomly. Looking at the AddResourceFactory code, I see 
> that only one AddResource instace exists and this instance is shared among  
> the servlet threads.
> The ExtensionFilter calulates the beforeBodyEndPosition value  (which is a 
> DefaultAddResource property) and then this value is used for writing inside a 
> StringBuffer which should contain the response body.
> This is the code in ExtensionFilter the I'm talking about:
> addResource.parseResponse(extendedRequest, extendedResponse.toString(),
>                    servletResponse);
> addResource.writeMyFacesJavascriptBeforeBodyEnd(extendedRequest,
>                    servletResponse);
> The problem is that a typical race condition seems to happen.
> The beforeBodyEndPosition value is calulated for Thread1, which is suspended. 
> Then, Thread 2 starts and it modifies the beforeBodyEndPosition value. When 
> Thread2 terminates, Thread1 resumes and it tries to write inside its body 
> response at an index which is no more valid.
> The reason of this behaviour is (according to me) the following: there is 
> just one instance of DefaultAddResource,  so the execution of  
> AddResource.parseResponse and AddResource.writeMyFacesJavascriptBeforeBodyEnd 
> should be atomic. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to