You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by tv...@apache.org on 2011/11/10 20:24:06 UTC
svn commit: r1200487 - in /turbine/core/trunk/src: changes/changes.xml
java/org/apache/turbine/services/rundata/TurbineRunDataService.java
Author: tv
Date: Thu Nov 10 19:24:06 2011
New Revision: 1200487
URL: http://svn.apache.org/viewvc?rev=1200487&view=rev
Log:
Add class cache for TurbineRunDataService
Modified:
turbine/core/trunk/src/changes/changes.xml
turbine/core/trunk/src/java/org/apache/turbine/services/rundata/TurbineRunDataService.java
Modified: turbine/core/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/turbine/core/trunk/src/changes/changes.xml?rev=1200487&r1=1200486&r2=1200487&view=diff
==============================================================================
--- turbine/core/trunk/src/changes/changes.xml (original)
+++ turbine/core/trunk/src/changes/changes.xml Thu Nov 10 19:24:06 2011
@@ -25,6 +25,13 @@
<body>
<release version="4.0-M2" date="in Subversion">
+ <action type="add" dev="tv">
+ Add class cache for TurbineRunDataService
+ </action>
+ <action type="update" dev="tv">
+ Remove duplicate data storage in DefaultTurbineRunData and
+ DefaultPipelineData
+ </action>
<action type="update" dev="tv" issue="TRB-72">
Services that implement TurbineServiceProvider are inited early by default
</action>
Modified: turbine/core/trunk/src/java/org/apache/turbine/services/rundata/TurbineRunDataService.java
URL: http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/rundata/TurbineRunDataService.java?rev=1200487&r1=1200486&r2=1200487&view=diff
==============================================================================
--- turbine/core/trunk/src/java/org/apache/turbine/services/rundata/TurbineRunDataService.java (original)
+++ turbine/core/trunk/src/java/org/apache/turbine/services/rundata/TurbineRunDataService.java Thu Nov 10 19:24:06 2011
@@ -36,7 +36,6 @@ import org.apache.fulcrum.parser.Paramet
import org.apache.fulcrum.parser.ParserService;
import org.apache.fulcrum.pool.PoolException;
import org.apache.fulcrum.pool.PoolService;
-import org.apache.turbine.Turbine;
import org.apache.turbine.services.InitializationException;
import org.apache.turbine.services.TurbineBaseService;
import org.apache.turbine.services.TurbineServices;
@@ -75,6 +74,9 @@ public class TurbineRunDataService
/** The map of configurations. */
private final Map<String, Object> configurations = new HashMap<String, Object>();
+ /** A class cache. */
+ private final Map<String, Class<?>> classCache = new HashMap<String, Class<?>>();
+
/** Private reference to the pool service for object recycling */
private PoolService pool = null;
@@ -163,6 +165,18 @@ public class TurbineRunDataService
}
/**
+ * Shutdown the service
+ *
+ * @see org.apache.turbine.services.TurbineBaseService#shutdown()
+ */
+ @Override
+ public void shutdown()
+ {
+ classCache.clear();
+ super.shutdown();
+ }
+
+ /**
* Gets a default RunData object.
*
* @param req a servlet request.
@@ -198,8 +212,6 @@ public class TurbineRunDataService
throws TurbineException,
IllegalArgumentException
{
- // a map to hold information to be added to pipelineData
- Map<Class<?>, Object> pipelineDataMap = new HashMap<Class<?>, Object>();
// The RunData object caches all the information that is needed for
// the execution lifetime of a single request. A RunData object
// is created/recycled for each and every request and is passed
@@ -224,18 +236,32 @@ public class TurbineRunDataService
TurbineRunData data;
try
{
- Class<?> runDataClazz = Class.forName(cfg[0]);
- Class<?> parameterParserClazz = Class.forName(cfg[1]);
- Class<?> cookieParserClazz = Class.forName(cfg[2]);
+ Class<?> runDataClazz = classCache.get(cfg[0]);
+ if (runDataClazz == null)
+ {
+ runDataClazz = Class.forName(cfg[0]);
+ classCache.put(cfg[0], runDataClazz);
+ }
+
+ Class<?> parameterParserClazz = classCache.get(cfg[1]);
+ if (parameterParserClazz == null)
+ {
+ parameterParserClazz = Class.forName(cfg[1]);
+ classCache.put(cfg[1], parameterParserClazz);
+ }
+
+ Class<?> cookieParserClazz = classCache.get(cfg[2]);
+ if (cookieParserClazz == null)
+ {
+ cookieParserClazz = Class.forName(cfg[2]);
+ classCache.put(cfg[2], cookieParserClazz);
+ }
data = (TurbineRunData) pool.getInstance(runDataClazz);
ParameterParser pp = (ParameterParser) parserService.getParser(parameterParserClazz);
data.setParameterParser(pp);
CookieParser cp = (CookieParser) parserService.getParser(cookieParserClazz);
data.setCookieParser(cp);
- // also copy data directly into pipelineData
- pipelineDataMap.put(ParameterParser.class, pp);
- pipelineDataMap.put(CookieParser.class, cp);
Locale locale = req.getLocale();
@@ -268,23 +294,14 @@ public class TurbineRunDataService
// Set the request and response.
data.setRequest(req);
data.setResponse(res);
- // also copy data directly into pipelineData
- pipelineDataMap.put(HttpServletRequest.class, req);
- pipelineDataMap.put(HttpServletResponse.class, res);
// Set the servlet configuration.
data.setServletConfig(config);
- // also copy data directly into pipelineData
- pipelineDataMap.put(ServletConfig.class, config);
// Set the ServerData.
ServerData sd = new ServerData(req);
data.setServerData(sd);
- // also copy data directly into pipelineData
- pipelineDataMap.put(ServerData.class, sd);
- // finally put the pipelineDataMap into the pipelineData object
- data.put(Turbine.class, pipelineDataMap);
return data;
}