Author: tv
Date: Sat Nov 15 13:39:20 2008
New Revision: 717930

URL: http://svn.apache.org/viewvc?rev=717930&view=rev
Log:
Ported the class cache for JavaBaseFactory from Turbine 2.3

Modified:
    
turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaBaseFactory.java

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaBaseFactory.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaBaseFactory.java?rev=717930&r1=717929&r2=717930&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaBaseFactory.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaBaseFactory.java
 Sat Nov 15 13:39:20 2008
@@ -20,13 +20,16 @@
  * under the License.
  */
 
-
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+
 import org.apache.turbine.Turbine;
 import org.apache.turbine.TurbineConstants;
 import org.apache.turbine.modules.Assembler;
@@ -52,6 +55,12 @@
     /** Logging */
     protected Log log = LogFactory.getLog(this.getClass());
 
+    /**
+     * A cache for previously obtained Class instances, which we keep in order
+     * to reduce the Class.forName() overhead (which can be sizable).
+     */
+    private Map classCache = Collections.synchronizedMap(new HashMap());
+
     static
     {
         ObjectUtils.addOnce(packages, GenericLoader.getBasePackage());
@@ -74,19 +83,22 @@
         {
             for (Iterator it = packages.iterator(); it.hasNext();)
             {
-                StringBuffer className = new StringBuffer();
+                StringBuffer sb = new StringBuffer();
 
-                className.append(it.next());
-                className.append('.');
-                className.append(packageName);
-                className.append('.');
-                className.append(name);
+                
sb.append(it.next()).append('.').append(packageName).append('.').append(name);
+                
+                String className = sb.toString();
 
                 log.debug("Trying " + className);
 
                 try
                 {
-                    Class servClass = Class.forName(className.toString());
+                    Class servClass = (Class) classCache.get(className);
+                    if(servClass == null)
+                    {
+                        servClass = Class.forName(className.toString());
+                        classCache.put(className, servClass);
+                    }
                     assembler = (Assembler) servClass.newInstance();
                     break; // for()
                 }


Reply via email to