public static Class createProxy(final Class<?> classToProxy, final ClassLoader cl, final String proxyName, final Class... interfaces) { final String classFileName = proxyName.replace('.', '/'); try { return cl.loadClass(proxyName); } catch (final Exception e) { // no-op } final ReentrantLock lock = LocalBeanProxyFactory.LOCK; lock.lock(); try { try { // Try it again, another thread may have beaten this one... return cl.loadClass(proxyName); } catch (final Exception e) { // no-op } final byte[] proxyBytes = generateProxy(classToProxy, classFileName, interfaces); return Unsafe.defineClass(classToProxy, proxyName, proxyBytes); } catch (final Exception e) { throw new InternalError("LocalBeanProxyFactory.createProxy: " + Debug.printStackTrace(e)); } finally { lock.unlock(); } }
public static Class createProxy(final Class<?> classToProxy, final ClassLoader cl, final String proxyName, final Class... interfaces) { final String classFileName = proxyName.replace('.', '/'); try { return cl.loadClass(proxyName); } catch (final Exception e) { // no-op } final ReentrantLock lock = LocalBeanProxyFactory.LOCK; lock.lock(); try { try { // Try it again, another thread may have beaten this one... return cl.loadClass(proxyName); } catch (final Exception e) { // no-op } final byte[] proxyBytes = generateProxy(classToProxy, classFileName, interfaces); return Unsafe.defineClass(cl, classToProxy, proxyName, proxyBytes); } catch (final Exception e) { throw new InternalError("LocalBeanProxyFactory.createProxy: " + Debug.printStackTrace(e)); } finally { lock.unlock(); } }