henning 2004/08/24 14:11:52
Modified: . Tag: TURBINE_2_3_BRANCH project.xml
xdocs Tag: TURBINE_2_3_BRANCH changes.xml
src/java/org/apache/turbine/services/assemblerbroker/util/java
Tag: TURBINE_2_3_BRANCH JavaBaseFactory.java
Log:
Add a Class Cache for the Java Assemblerbroker factories to speed up
the name to class translation process.
Patch supplied by Brian Lawler ([EMAIL PROTECTED]).
Revision Changes Path
No revision
No revision
1.136.2.12 +5 -1 jakarta-turbine-2/project.xml
Index: project.xml
===================================================================
RCS file: /home/cvs/jakarta-turbine-2/project.xml,v
retrieving revision 1.136.2.11
retrieving revision 1.136.2.12
diff -u -r1.136.2.11 -r1.136.2.12
--- project.xml 22 Aug 2004 23:51:59 -0000 1.136.2.11
+++ project.xml 24 Aug 2004 21:11:51 -0000 1.136.2.12
@@ -22,7 +22,7 @@
<pomVersion>3</pomVersion>
<name>jakarta-turbine-2</name>
<id>turbine</id>
- <currentVersion>2.3.1-rc2</currentVersion>
+ <currentVersion>2.3.1-rc3-dev</currentVersion>
<organization>
<name>Apache Software Foundation</name>
<url>http://jakarta.apache.org/</url>
@@ -245,6 +245,10 @@
<contributor>
<name>Chris Kimpton</name>
<email>[EMAIL PROTECTED]</email>
+ </contributor>
+ <contributor>
+ <name>Brian Lawler</name>
+ <email>[EMAIL PROTECTED]</email>
</contributor>
<contributor>
<name>Josh Lucas</name>
No revision
No revision
1.60.2.20 +17 -0 jakarta-turbine-2/xdocs/changes.xml
Index: changes.xml
===================================================================
RCS file: /home/cvs/jakarta-turbine-2/xdocs/changes.xml,v
retrieving revision 1.60.2.19
retrieving revision 1.60.2.20
diff -u -r1.60.2.19 -r1.60.2.20
--- changes.xml 22 Aug 2004 23:52:00 -0000 1.60.2.19
+++ changes.xml 24 Aug 2004 21:11:52 -0000 1.60.2.20
@@ -73,6 +73,23 @@
-->
+<section name="Turbine 2.3-rc3-dev">
+
+<subsection name="Other changes">
+<p>
+ <ul>
+ <li>
+ JavaBaseFactory executed a Class.forName() every time it was
+ searching for a named class, which showed up as a very costly
+ API call in our profiling. A synchronized cache has been added
+ to cache previously obtained class instances inside this class.
+ </li>
+ </ul>
+</p>
+</subsection>
+
+</section>
+
<section name="Turbine 2.3-rc2">
<p>
No revision
No revision
1.8.2.4 +16 -2
jakarta-turbine-2/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaBaseFactory.java
Index: JavaBaseFactory.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaBaseFactory.java,v
retrieving revision 1.8.2.3
retrieving revision 1.8.2.4
diff -u -r1.8.2.3 -r1.8.2.4
--- JavaBaseFactory.java 16 Aug 2004 22:57:48 -0000 1.8.2.3
+++ JavaBaseFactory.java 24 Aug 2004 21:11:52 -0000 1.8.2.4
@@ -16,8 +16,11 @@
* limitations 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;
@@ -48,6 +51,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());
@@ -82,7 +91,12 @@
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()
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]