private Object newProxy(final Object handle, final InvocationHandler invocationHandler) { ClassLoader loader = handle.getClass().getClassLoader(); if (loader == null) { loader = ClassLoader.getSystemClassLoader(); } if (!Proxy.isProxyClass(handle.getClass())) { final Object proxy = LocalBeanProxyFactory.Unsafe.allocateInstance(getProxy(handle.getClass(), loader)); DynamicSubclass.setHandler(proxy, invocationHandler); return proxy; } return Proxy.newProxyInstance(loader, getAPi(handle.getClass()), invocationHandler); }
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(); } }
public static Class createSubclass(final Class<?> abstractClass, final ClassLoader cl, boolean proxyNonAbstractMethods) { final String proxyName = getSubclassName(abstractClass); try { return cl.loadClass(proxyName); } catch (final Exception e) { // no-op } final ReentrantLock lock = 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 } return LocalBeanProxyFactory.Unsafe.defineClass(cl, abstractClass, proxyName, generateBytes(abstractClass, proxyNonAbstractMethods)); } catch (final Exception e) { throw new InternalError(DynamicSubclass.class.getSimpleName() + ".createSubclass: " + Debug.printStackTrace(e)); } finally { lock.unlock(); } }
public static Class createSubclass(final Class<?> abstractClass, final ClassLoader cl, final boolean proxyNonAbstractMethods) { final String proxyName = getSubclassName(abstractClass); try { return cl.loadClass(proxyName); } catch (final Exception e) { // no-op } final ReentrantLock lock = 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 } return LocalBeanProxyFactory.Unsafe.defineClass(abstractClass, proxyName, generateBytes(abstractClass, proxyNonAbstractMethods)); } catch (final Exception e) { throw new InternalError(DynamicSubclass.class.getSimpleName() + ".createSubclass: " + 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(classToProxy, proxyName, proxyBytes); } catch (final Exception e) { throw new InternalError("LocalBeanProxyFactory.createProxy: " + Debug.printStackTrace(e)); } finally { lock.unlock(); } }
public static Object constructProxy(final Class clazz, final InvocationHandler handler) throws IllegalStateException { final Object instance = Unsafe.allocateInstance(clazz); Unsafe.setValue(getDeclaredField(clazz, BUSSINESS_HANDLER_NAME), instance, handler); Unsafe.setValue(getDeclaredField(clazz, NON_BUSINESS_HANDLER_NAME), instance, NON_BUSINESS_HANDLER); return instance; }
public static Object constructProxy(final Class clazz, final InvocationHandler handler) throws IllegalStateException { final Object instance = Unsafe.allocateInstance(clazz); Unsafe.setValue(getDeclaredField(clazz, BUSSINESS_HANDLER_NAME), instance, handler); Unsafe.setValue(getDeclaredField(clazz, NON_BUSINESS_HANDLER_NAME), instance, NON_BUSINESS_HANDLER); return instance; }
private Object newProxy(final Object handle, final InvocationHandler invocationHandler) { ClassLoader loader = handle.getClass().getClassLoader(); if (loader == null) { loader = ClassLoader.getSystemClassLoader(); } if (!Proxy.isProxyClass(handle.getClass())) { final Object proxy = LocalBeanProxyFactory.Unsafe.allocateInstance(getProxy(handle.getClass(), loader)); DynamicSubclass.setHandler(proxy, invocationHandler); return proxy; } return Proxy.newProxyInstance(loader, handle.getClass().getInterfaces(), invocationHandler); }