Author: rmannibucau
Date: Thu Jun 21 13:42:20 2012
New Revision: 1352533
URL: http://svn.apache.org/viewvc?rev=1352533&view=rev
Log:
managing concurrency in LocalBeanProxyGeneratorImpl.createProxy
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java?rev=1352533&r1=1352532&r2=1352533&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java
Thu Jun 21 13:42:20 2012
@@ -114,11 +114,18 @@ public class LocalBeanProxyGeneratorImpl
} catch (Exception e) {
}
- try {
- byte[] proxyBytes = generateProxy(clsToProxy, clsName);
- return (Class<?>) defineClass.invoke(unsafe, proxyName,
proxyBytes, 0, proxyBytes.length, clsToProxy.getClassLoader(),
clsToProxy.getProtectionDomain());
- } catch (Exception e) {
- throw new InternalError(e.toString());
+ synchronized (LocalBeanProxyGeneratorImpl.class) { // it can be done
by concurrent threads
+ try { // try it again
+ return cl.loadClass(proxyName);
+ } catch (Exception e) {
+ }
+
+ try {
+ byte[] proxyBytes = generateProxy(clsToProxy, clsName);
+ return (Class<?>) defineClass.invoke(unsafe, proxyName,
proxyBytes, 0, proxyBytes.length, clsToProxy.getClassLoader(),
clsToProxy.getProtectionDomain());
+ } catch (Exception e) {
+ throw new InternalError(e.toString());
+ }
}
}