Author: chris.laprun(a)jboss.com
Date: 2007-05-08 19:08:48 -0400 (Tue, 08 May 2007)
New Revision: 7225
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/servlet/WSDLPortFixFilter.java
Log:
- JBPORTAL-1390: Use ThreadLocal for a better (correct!) cache handling.
Modified: trunk/wsrp/src/main/org/jboss/portal/wsrp/servlet/WSDLPortFixFilter.java
===================================================================
--- trunk/wsrp/src/main/org/jboss/portal/wsrp/servlet/WSDLPortFixFilter.java 2007-05-08
22:58:55 UTC (rev 7224)
+++ trunk/wsrp/src/main/org/jboss/portal/wsrp/servlet/WSDLPortFixFilter.java 2007-05-08
23:08:48 UTC (rev 7225)
@@ -54,8 +54,7 @@
*/
public class WSDLPortFixFilter implements Filter
{
- private String processedWSDL;
- private StringWriter cachedWriter;
+ private static final ThreadLocal local = new ThreadLocal();
public void init(FilterConfig filterConfig) throws ServletException
{
@@ -87,21 +86,22 @@
}
// create the processed wsdl if required and cache the value
- synchronized (this)
+ CachedDataHolder holder = (CachedDataHolder)local.get();
+ if (holder == null)
{
- if (processedWSDL == null)
- {
- processedWSDL = replaceURLsBy(wsdl, new
PortReplacementGenerator(req.getServerPort()));
- cachedWriter = new StringWriter(processedWSDL.length());
- cachedWriter.write(processedWSDL);
- }
+ holder = new CachedDataHolder();
+ holder.processedWSDL = replaceURLsBy(wsdl, new
PortReplacementGenerator(req.getServerPort()));
+ StringWriter cachedWriter = new StringWriter(holder.processedWSDL.length());
+ cachedWriter.write(holder.processedWSDL);
+ holder.cachedWriter = cachedWriter;
+ local.set(holder);
}
resp.setContentType("text/xml");
- resp.setContentLength(cachedWriter.toString().length());
+ resp.setContentLength(holder.cachedWriter.toString().length());
- resp.getWriter().print(cachedWriter.toString());
+ resp.getWriter().print(holder.cachedWriter.toString());
}
else
{
@@ -183,6 +183,12 @@
}
}
+ private class CachedDataHolder
+ {
+ private String processedWSDL;
+ private StringWriter cachedWriter;
+ }
+
// === Code duplicated from URLTools for easier inclusion === //
private static final Pattern LINK =
Pattern.compile("(?:location)\\s*=\\s*('|\")\\s*([^'\"]*)\\s*('|\")",
Show replies by date