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;
+ }
+}