Repository: deltaspike
Updated Branches:
  refs/heads/master 080a62e11 -> 1ce13b856


DELTASPIKE-1039 LinkageError on container reboot

Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/1ce13b85
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/1ce13b85
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/1ce13b85

Branch: refs/heads/master
Commit: 1ce13b85647a5695667927d0692cc63560e36bd3
Parents: 080a62e
Author: tandraschko <[email protected]>
Authored: Wed Dec 9 10:38:00 2015 +0100
Committer: tandraschko <[email protected]>
Committed: Wed Dec 9 10:38:00 2015 +0100

----------------------------------------------------------------------
 .../apache/deltaspike/core/util/ClassUtils.java | 32 ++++++++++++++++++++
 .../proxy/api/DeltaSpikeProxyFactory.java       | 13 ++++++--
 2 files changed, 43 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/1ce13b85/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/util/ClassUtils.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/util/ClassUtils.java
 
b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/util/ClassUtils.java
index 044e6d9..af574c2 100644
--- 
a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/util/ClassUtils.java
+++ 
b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/util/ClassUtils.java
@@ -114,6 +114,19 @@ public abstract class ClassUtils
     {
         return (Class<T>) tryToLoadClassForName(name);
     }
+    
+    /**
+     * Tries to load a class based on the given name and interface or abstract 
class.
+     * @param name name of the concrete class
+     * @param targetType target type (interface or abstract class)
+     * @param classLoader The {@link ClassLoader}.
+     * @param <T> current type
+     * @return loaded class or null if it isn't in the classpath
+     */
+    public static <T> Class<T> tryToLoadClassForName(String name, Class<T> 
targetType, ClassLoader classLoader)
+    {
+        return (Class<T>) tryToLoadClassForName(name, classLoader);
+    }
 
     /**
      * Tries to load a class based on the given name
@@ -132,6 +145,25 @@ public abstract class ClassUtils
             return null;
         }
     }
+    
+    /**
+     * Tries to load a class based on the given name
+     * @param name name of the class
+     * @param classLoader The {@link ClassLoader}.
+     * @return loaded class or <code>null</code> if it isn't in the classpath
+     */
+    public static Class tryToLoadClassForName(String name, ClassLoader 
classLoader)
+    {
+        try
+        {
+            return classLoader.loadClass(name);
+        }
+        catch (ClassNotFoundException e)
+        {
+            //do nothing - it's just a try
+            return null;
+        }
+    }
 
     /**
      * Loads class for the given name

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/1ce13b85/deltaspike/modules/proxy/api/src/main/java/org/apache/deltaspike/proxy/api/DeltaSpikeProxyFactory.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/proxy/api/src/main/java/org/apache/deltaspike/proxy/api/DeltaSpikeProxyFactory.java
 
b/deltaspike/modules/proxy/api/src/main/java/org/apache/deltaspike/proxy/api/DeltaSpikeProxyFactory.java
index 1e19ab1..ddd9d00 100644
--- 
a/deltaspike/modules/proxy/api/src/main/java/org/apache/deltaspike/proxy/api/DeltaSpikeProxyFactory.java
+++ 
b/deltaspike/modules/proxy/api/src/main/java/org/apache/deltaspike/proxy/api/DeltaSpikeProxyFactory.java
@@ -78,11 +78,20 @@ public abstract class DeltaSpikeProxyFactory
         return GeneratorHolder.generator;
     }
 
+    public <T> Class<T> resolveAlreadyDefinedProxyClass(Class<T> targetClass)
+    {
+        Class<T> proxyClass = 
ClassUtils.tryToLoadClassForName(constructProxyClassName(targetClass),
+                targetClass,
+                targetClass.getClassLoader());
+
+        return proxyClass;
+    }
+    
     public <T> Class<T> getProxyClass(BeanManager beanManager, Class<T> 
targetClass,
             Class<? extends InvocationHandler> delegateInvocationHandlerClass)
     {
         // check if a proxy is already defined for this class
-        Class<T> proxyClass = 
ClassUtils.tryToLoadClassForName(constructProxyClassName(targetClass), 
targetClass);
+        Class<T> proxyClass = resolveAlreadyDefinedProxyClass(targetClass);
         if (proxyClass == null)
         {
             proxyClass = createProxyClass(beanManager, 
targetClass.getClassLoader(), targetClass,
@@ -95,7 +104,7 @@ public abstract class DeltaSpikeProxyFactory
     private synchronized <T> Class<T> createProxyClass(BeanManager 
beanManager, ClassLoader classLoader,
             Class<T> targetClass, Class<? extends InvocationHandler> 
delegateInvocationHandlerClass)
     {
-        Class<T> proxyClass = 
ClassUtils.tryToLoadClassForName(constructProxyClassName(targetClass), 
targetClass);
+        Class<T> proxyClass = resolveAlreadyDefinedProxyClass(targetClass);
         if (proxyClass == null)
         {
             ArrayList<Method> allMethods = collectAllMethods(targetClass);

Reply via email to