Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.picocontainer.gems.adapters
Class ThreadLocalizing

    java.lang.Object
      org.picocontainer.behaviors.AbstractBehaviorFactory
          org.picocontainer.gems.adapters.ThreadLocalizing

All Implemented Interfaces:
  Serializable, org.picocontainer.BehaviorFactory, org.picocontainer.ComponentFactory

    public final class ThreadLocalizing

extends org.picocontainer.behaviors.AbstractBehaviorFactory

A `ComponentFactory` for components kept in `ThreadLocal` instances.

This factory has two operating modes. By default it ensures, that every thread uses its own component at any time. This mode (`ENSURE_THREAD_LOCALITY`) makes internal usage of a `ThreadLocalized`. If the application architecture ensures, that the thread that creates the component is always also the thread that is th only user, you can set the mode `THREAD_ENSURES_LOCALITY`. In this mode the factory uses a simple `Cached` that uses a `ThreadLocalReference` to cache the component.

See the use cases for the subtile difference:

`THREAD_ENSURES_LOCALITY` is applicable, if the pico container is requested for a thread local addComponent from the working thread e.g. in a web application for a request. In this environment it is ensured, that the request is processed from the same thread and the thread local component is reused, if a previous request was handled in the same thread. Note that thi scenario fails badly, if the thread local component is created because of another cached component indirectly by a dependecy. In this case the cached component already have an instance of the thread local component, that may have been created in another thread, since only the component adapter for the thread local component can ensure a unique component for each thread.

`ENSURES_THREAD_LOCALITY` solves this problem. In this case the returned component is just a proxy for the thread local component and this proxy ensures, that a new component is created for each thread. Even if another cached component has an indirect dependency on the thread local component, the proxy ensures unique instances. This is vital for a multithreaded application that uses EJBs.

Author:
  Jörg Schaible
See Also:
  Serialized Form

Field Summary
`static boolean` | `ENSURE_THREAD_LOCALITY` `ENSURE_THREAD_LOCALITY` is the constant for created `ComponentAdapter` instances, that ensure unique instances of the component by delivering a proxy for the component.
`static boolean` | `THREAD_ENSURES_LOCALITY` `THREAD_ENSURES_LOCALITY` is the constant for created `ComponentAdapter` instances, that create for the current thread a new component.

Constructor Summary
`` | `ThreadLocalizing()` Constructs a wrapping ThreadLocalizing, that ensures the usage of the ThreadLocal.
`` | `ThreadLocalizing(boolean ensure)` Constructs a wrapping ThreadLocalizing.
`protected` | `ThreadLocalizing(boolean ensure, ProxyFactory factory)` Constructs a wrapping ThreadLocalizing.
`` | `ThreadLocalizing(ProxyFactory proxyFactory)` Constructs a wrapping ThreadLocalizing, that ensures the usage of the ThreadLocal.

Method Summary
`org.picocontainer.ComponentAdapter` | `addComponentAdapter(org.picocontainer.ComponentMonitor componentMonitor, org.picocontainer.LifecycleStrategy lifecycleStrategy, Properties componentProperties, org.picocontainer.ComponentAdapter adapter)`
`org.picocontainer.ComponentAdapter` | `createComponentAdapter(org.picocontainer.ComponentMonitor componentMonitor, org.picocontainer.LifecycleStrategy lifecycleStrategy, Properties componentProperties, Object componentKey, Class componentImplementation, org.picocontainer.Parameter... parameters)`

Methods inherited from class org.picocontainer.behaviors.AbstractBehaviorFactory
`accept, arePropertiesPresent, getAndRemovePropertiesIfPresentByKey, mergeProperties, removePropertiesIfPresent, verify, wrap`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### ENSURE_THREAD_LOCALITY

    public static final boolean ENSURE_THREAD_LOCALITY

  `ENSURE_THREAD_LOCALITY` is the constant for created `ComponentAdapter` instances, that ensure unique instances of the component by delivering a proxy for the component.

  See Also:
    Constant Field Values

### THREAD_ENSURES_LOCALITY

    public static final boolean THREAD_ENSURES_LOCALITY

  `THREAD_ENSURES_LOCALITY` is the constant for created `ComponentAdapter` instances, that create for the current thread a new component.

  See Also:
    Constant Field Values

Constructor Detail

### ThreadLocalizing

    public ThreadLocalizing()

  Constructs a wrapping ThreadLocalizing, that ensures the usage of the ThreadLocal. The Proxy instances are generated by the JDK.

### ThreadLocalizing

    public ThreadLocalizing(ProxyFactory proxyFactory)

  Constructs a wrapping ThreadLocalizing, that ensures the usage of the ThreadLocal.

  Parameters:
    `proxyFactory` - The `ProxyFactory` to use.

### ThreadLocalizing

    public ThreadLocalizing(boolean ensure)

  Constructs a wrapping ThreadLocalizing.

  Parameters:
    `ensure` - `ENSURE_THREAD_LOCALITY` or `THREAD_ENSURES_LOCALITY`.

### ThreadLocalizing

    protected ThreadLocalizing(boolean ensure,
                               ProxyFactory factory)

  Constructs a wrapping ThreadLocalizing.

  Parameters:
    `ensure` - `ENSURE_THREAD_LOCALITY` or `THREAD_ENSURES_LOCALITY`.
    `factory` - The `ProxyFactory` to use.

Method Detail

### createComponentAdapter

    public org.picocontainer.ComponentAdapter createComponentAdapter(org.picocontainer.ComponentMonitor componentMonitor,
                                                                     org.picocontainer.LifecycleStrategy lifecycleStrategy,
                                                                     Properties componentProperties,
                                                                     Object componentKey,
                                                                     Class componentImplementation,
                                                                     org.picocontainer.Parameter... parameters)
                                                              throws org.picocontainer.PicoCompositionException

  Specified by:
    `createComponentAdapter` in interface `org.picocontainer.ComponentFactory`
  Overrides:
    `createComponentAdapter` in class `org.picocontainer.behaviors.AbstractBehaviorFactory`
  Throws:
    `org.picocontainer.PicoCompositionException`

### addComponentAdapter

    public org.picocontainer.ComponentAdapter addComponentAdapter(org.picocontainer.ComponentMonitor componentMonitor,
                                                                  org.picocontainer.LifecycleStrategy lifecycleStrategy,
                                                                  Properties componentProperties,
                                                                  org.picocontainer.ComponentAdapter adapter)

  Specified by:
    `addComponentAdapter` in interface `org.picocontainer.BehaviorFactory`
  Overrides:
    `addComponentAdapter` in class `org.picocontainer.behaviors.AbstractBehaviorFactory`

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright © 2003-2009 Codehaus. All Rights Reserved.