Yes, that is true.

Bruno?

regards,

Martin

On 2/19/06, Claudio Tasso <[EMAIL PROTECTED]> wrote:
> Hi,
> 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.
>
> Please, let me know your opinions.
>
>
>
>
>


--

http://www.irian.at

Your JSF powerhouse -
JSF Consulting, Development and
Courses in English and German

Professional Support for Apache MyFaces

Reply via email to