You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/03/18 21:01:37 UTC

svn commit: r1302211 - in /openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client: EJBObjectHandler.java util/ util/ClassLoaderUtil.java

Author: rmannibucau
Date: Sun Mar 18 20:01:37 2012
New Revision: 1302211

URL: http://svn.apache.org/viewvc?rev=1302211&view=rev
Log:
resetting the current classloader to the openejb-client one only if needed classes can't be already found, this way we should be able to deploy a jar which is not in AppClassLoader

Added:
    openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/util/
    openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/util/ClassLoaderUtil.java
Modified:
    openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java

Modified: openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java?rev=1302211&r1=1302210&r2=1302211&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java (original)
+++ openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java Sun Mar 18 20:01:37 2012
@@ -16,6 +16,11 @@
  */
 package org.apache.openejb.client;
 
+import org.apache.openejb.client.proxy.ProxyManager;
+import org.apache.openejb.client.util.ClassLoaderUtil;
+
+import javax.ejb.EJBException;
+import javax.ejb.EJBObject;
 import java.lang.reflect.Method;
 import java.rmi.RemoteException;
 import java.util.ArrayList;
@@ -35,11 +40,6 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import javax.ejb.EJBException;
-import javax.ejb.EJBObject;
-
-import org.apache.openejb.client.proxy.ProxyManager;
-
 public abstract class EJBObjectHandler extends EJBInvocationHandler {
 
     protected static final Method GETEJBHOME = getMethod(EJBObject.class, "getEJBHome", null);
@@ -133,11 +133,12 @@ public abstract class EJBObjectHandler e
             interfaces.add(EJBObjectProxy.class);
 
             ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
-            if (oldCl != getClass().getClassLoader()) {
+            boolean parent = ClassLoaderUtil.isParent(getClass().getClassLoader(), oldCl);
+            if (!parent) {
                 Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
             }
             ejbObject = (EJBObjectProxy) ProxyManager.newProxyInstance(interfaces.toArray(new Class[interfaces.size()]), this);
-            if (oldCl != getClass().getClassLoader()) {
+            if (!parent) {
                 Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
             }
         } catch (IllegalAccessException e) {

Added: openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/util/ClassLoaderUtil.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/util/ClassLoaderUtil.java?rev=1302211&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/util/ClassLoaderUtil.java (added)
+++ openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/util/ClassLoaderUtil.java Sun Mar 18 20:01:37 2012
@@ -0,0 +1,19 @@
+package org.apache.openejb.client.util;
+
+public class ClassLoaderUtil {
+    private ClassLoaderUtil() {
+        // no-op
+    }
+
+    public static boolean isParent(final ClassLoader supposedParent, final ClassLoader supposedChild) {
+        ClassLoader parent = supposedChild;
+        while (parent != null) {
+            if (parent == supposedParent) {
+                return true;
+            }
+            parent = parent.getParent();
+        }
+
+        return false;
+    }
+}