X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=test%2Fenterprise%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Ftest%2Ftransactions%2FThreadSpecificProxyFactory.java;fp=test%2Fenterprise%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Ftest%2Ftransactions%2FThreadSpecificProxyFactory.java;h=0000000000000000000000000000000000000000;hb=e3d72f71c4fb6d6069679ab97a17546030a7fb7d;hp=78f4436751cfb0f176e78437261cf50ed8367754;hpb=86b68ca4594c43d09ca57f8a2f9522c604c76f1d;p=utils diff --git a/test/enterprise/src/main/java/org/wamblee/test/transactions/ThreadSpecificProxyFactory.java b/test/enterprise/src/main/java/org/wamblee/test/transactions/ThreadSpecificProxyFactory.java deleted file mode 100644 index 78f44367..00000000 --- a/test/enterprise/src/main/java/org/wamblee/test/transactions/ThreadSpecificProxyFactory.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright 2005-2010 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.wamblee.test.transactions; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; - -/** - * Thread-specific proxy is used to create implementations of interfaces that - * delegate to a thread-specific implementation of the service. - * - * It is used for instance to pass a transaction scoped entity manager around. - * - * The {@link #set(Object)} method sets the current service instance for the current thread. - * The {@link #get()} method gets the current service instance for the current thread. - * The {@link #getProxy()} method gets a proxy that will delegate at runtime to the thread-specific - * instance. The result from this method can be passed at construction of an object that will be used - * by multiple threads. - * - * This class is mostly used by other test tools. - * - * @param T - * Interface to proxy. - * @author Erik Brakkee - * - */ -public class ThreadSpecificProxyFactory { - private class ThreadSpecificInvocationHandler implements InvocationHandler { - - @Override - public Object invoke(Object aProxy, Method aMethod, Object[] aArgs) - throws Throwable { - try { - return aMethod.invoke(svc.get(), aArgs); - } catch (InvocationTargetException e) { - throw e.getCause(); - } - } - } - - private ThreadLocal svc = new ThreadLocal(); - private Class clazz; - - /** - * Constructs the factory. - * - * @param aClass - * Interface class of the service to proxy. - */ - public ThreadSpecificProxyFactory(Class aClass) { - if (!aClass.isInterface()) { - throw new IllegalArgumentException("Class " + aClass.getName() + - " is not an interface"); - } - clazz = aClass; - } - - /** - * Sets the thread-specific service. - * - * @param aService - * Service, use null value to reset. - */ - public void set(T aService) { - svc.set(aService); - } - - /** - * Gets the current thread-specific service. - * @return Service. - */ - public T get() { - return svc.get(); - } - - /** - * Gets the proxy that delegates to the thread-specific instance set by - * {@link #set(Object)} - * - * @return Proxy. - */ - public T getProxy() { - InvocationHandler handler = new ThreadSpecificInvocationHandler(); - Class proxyClass = Proxy.getProxyClass(clazz.getClassLoader(), - new Class[] { clazz }); - T proxy; - try { - proxy = (T) proxyClass.getConstructor( - new Class[] { InvocationHandler.class }).newInstance( - new Object[] { handler }); - return proxy; - } catch (Exception e) { - throw new RuntimeException("Could not create proxy for " + - clazz.getName(), e); - } - } -}