org.wamblee.general
Class ThreadSpecificProxyFactory<T>

java.lang.Object
  extended by org.wamblee.general.ThreadSpecificProxyFactory<T>

public class ThreadSpecificProxyFactory<T>
extends Object

Thread-specific proxy is used to create implementations of interfaces that delegate to a thread-specific implementation of the service.

It can be used for instance to create a contextual reference to an entity manager that delegates to a thread-specific instance.

The set(Object) method sets the current service instance for the current thread. The get() method gets the current service instance for the current thread. The 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 infrastructure code (utilities) and test tools.

Care has been taken so that the invocation handler is serializable. However, it is only serializable within one virtual machine. It cannot be used in a distributed context where it can be sent to another JVM.

This class currently does not do any cleanup. So it should not be used in production code but only in test utilities.

Author:
Erik Brakkee

Nested Class Summary
static interface ThreadSpecificProxyFactory.CreationCallback<T>
          Optional callback invoked to create the thread-specific object when there is no object yet associated with the current thread.
 
Constructor Summary
ThreadSpecificProxyFactory(Class<T> aClass)
          Constructs the factory.
ThreadSpecificProxyFactory(Class<T> aClass, ThreadSpecificProxyFactory.CreationCallback<T> aCallback)
          Constructs the factory with a callback to create thread-specific objects automatically.
 
Method Summary
 T get()
          Gets the current thread-specific service.
 T getProxy()
          Gets the proxy that delegates to the thread-specific instance set by set(Object)
 void set(T aService)
          Sets the thread-specific service.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ThreadSpecificProxyFactory

public ThreadSpecificProxyFactory(Class<T> aClass)
Constructs the factory.

Parameters:
aClass - Interface class of the service to proxy.

ThreadSpecificProxyFactory

public ThreadSpecificProxyFactory(Class<T> aClass,
                                  ThreadSpecificProxyFactory.CreationCallback<T> aCallback)
Constructs the factory with a callback to create thread-specific objects automatically.

Parameters:
aClass - Interface class of the service to proxy.
aCallback - Callback to create the object if it does not exist. When null, then no initialization is done.
Method Detail

set

public void set(T aService)
Sets the thread-specific service.

Parameters:
aService - Service, use null value to reset.

get

public T get()
Gets the current thread-specific service. To get a contextual reference that can be used by any thread but delegates to a thread-specific instance, use getProxy().

Returns:
Service.

getProxy

public T getProxy()
Gets the proxy that delegates to the thread-specific instance set by set(Object)

Returns:
Proxy.


Copyright © 2011. All Rights Reserved.