You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2017/10/18 06:13:21 UTC
tapestry-5 git commit: reduce lock-contention during page loading #2
Repository: tapestry-5
Updated Branches:
refs/heads/master 1c42cceef -> b58621fbf
reduce lock-contention during page loading #2
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/b58621fb
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/b58621fb
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/b58621fb
Branch: refs/heads/master
Commit: b58621fbf8a01e9f7fea2c19881b83f5d6de651f
Parents: 1c42cce
Author: Michael Mikhulya <m....@gmail.com>
Authored: Tue Jul 19 11:55:30 2016 +0300
Committer: Jochen Kemnade <jk...@apache.org>
Committed: Wed Oct 18 08:11:34 2017 +0200
----------------------------------------------------------------------
.../internal/plastic/PlasticClassPool.java | 63 ++++++++++----------
.../internal/plastic/PlasticInternalUtils.java | 7 +++
2 files changed, 38 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b58621fb/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassPool.java
----------------------------------------------------------------------
diff --git a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassPool.java b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassPool.java
index 3cf1700..dfbb8cf 100644
--- a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassPool.java
+++ b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassPool.java
@@ -56,7 +56,7 @@ public class PlasticClassPool implements ClassLoaderDelegate, Opcodes, PlasticCl
* Maps class names to instantiators for that class name.
* Synchronized on the loader.
*/
- private final Map<String, ClassInstantiator> instantiators = PlasticInternalUtils.newMap();
+ private final Map<String, ClassInstantiator> instantiators = PlasticInternalUtils.newConcurrentMap();
private final InheritanceData emptyInheritanceData = new InheritanceData(null);
@@ -599,50 +599,49 @@ public class PlasticClassPool implements ClassLoaderDelegate, Opcodes, PlasticCl
public ClassInstantiator getClassInstantiator(String className)
{
- synchronized (loader)
+ ClassInstantiator result = instantiators.get(className);
+
+ if (result == null)
{
- if (!instantiators.containsKey(className))
+ try
{
- try
- {
- loader.loadClass(className);
- } catch (ClassNotFoundException ex)
- {
- throw new RuntimeException(ex);
- }
+ loader.loadClass(className);
+ result = instantiators.get(className);
+ } catch (ClassNotFoundException ex)
+ {
+ throw new RuntimeException(ex);
}
+ }
- ClassInstantiator result = instantiators.get(className);
- if (result == null)
- {
- // TODO: Verify that the problem is incorrect package, and not any other failure.
+ if (result != null)
+ {
+ return result;
+ }
- StringBuilder b = new StringBuilder();
- b.append("Class '")
- .append(className)
- .append("' is not a transformed class. Transformed classes should be in one of the following packages: ");
+ // TODO: Verify that the problem is incorrect package, and not any other failure.
- String sep = "";
+ StringBuilder b = new StringBuilder();
+ b.append("Class '")
+ .append(className)
+ .append("' is not a transformed class. Transformed classes should be in one of the following packages: ");
- List<String> names = new ArrayList<String>(controlledPackages);
- Collections.sort(names);
+ String sep = "";
- for (String name : names)
- {
- b.append(sep);
- b.append(name);
+ List<String> names = new ArrayList<String>(controlledPackages);
+ Collections.sort(names);
- sep = ", ";
- }
+ for (String name : names)
+ {
+ b.append(sep);
+ b.append(name);
- String message = b.append('.').toString();
+ sep = ", ";
+ }
- throw new IllegalArgumentException(message);
- }
+ String message = b.append('.').toString();
- return result;
- }
+ throw new IllegalArgumentException(message);
}
TypeCategory getTypeCategory(String typeName)
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b58621fb/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticInternalUtils.java
----------------------------------------------------------------------
diff --git a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticInternalUtils.java b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticInternalUtils.java
index 8dc86a3..f0ea0fb 100644
--- a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticInternalUtils.java
+++ b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticInternalUtils.java
@@ -25,6 +25,8 @@ import java.lang.reflect.Array;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -196,6 +198,11 @@ public class PlasticInternalUtils
return new HashMap<K, V>();
}
+ public static <K, V> ConcurrentMap<K, V> newConcurrentMap()
+ {
+ return new ConcurrentHashMap<K, V>();
+ }
+
public static <T> Set<T> newSet()
{
return new HashSet<T>();