org.codehaus.groovy.runtime.metaclass
Class ThreadManagedMetaBeanProperty

java.lang.Object
  extended by groovy.lang.MetaProperty
      extended by groovy.lang.MetaBeanProperty
          extended by org.codehaus.groovy.runtime.metaclass.ThreadManagedMetaBeanProperty

public class ThreadManagedMetaBeanProperty
extends MetaBeanProperty

This MetaBeanProperty will create a pseudo property whose value is bound to the current Thread using soft references. The values will go out of scope and be garabage collected when the Thread dies or when memory is required by the JVM

The property uses an InheritableThreadLocal instance internally so child threads will still be able to see the property

Since:
1.1
Author:
Graeme Rocher

Nested Class Summary
(package private)  class ThreadManagedMetaBeanProperty.ThreadBoundGetter
          Accesses the ThreadBound state of the property as a getter
private  class ThreadManagedMetaBeanProperty.ThreadBoundSetter
          Sets the ThreadBound state of the property like a setter
 
Field Summary
private  java.lang.Class declaringClass
           
private  ThreadManagedMetaBeanProperty.ThreadBoundGetter getter
           
private  java.lang.Object initialValue
           
private  Closure initialValueCreator
           
private static java.lang.ThreadLocal PROPERTY_INSTANCE_HOLDER
           
private static java.lang.String PROPERTY_SET_PREFIX
           
private  ThreadManagedMetaBeanProperty.ThreadBoundSetter setter
           
private static CachedClass[] ZERO_ARGUMENT_LIST
           
 
Fields inherited from class groovy.lang.MetaProperty
name, type
 
Constructor Summary
ThreadManagedMetaBeanProperty(java.lang.Class declaringClass, java.lang.String name, java.lang.Class type, Closure initialValueCreator)
          Constructs a new ThreadManagedBeanProperty for the given arguments
ThreadManagedMetaBeanProperty(java.lang.Class declaringClass, java.lang.String name, java.lang.Class type, java.lang.Object iv)
          Constructs a new ThreadManagedBeanProperty for the given arguments
 
Method Summary
 MetaMethod getGetter()
          Get the getter method.
private  java.lang.String getGetterName(java.lang.String propertyName, java.lang.Class type)
           
 java.lang.Object getInitialValue()
          Retrieves the initial value of the ThreadBound property
 java.lang.Object getInitialValue(java.lang.Object object)
           
 MetaMethod getSetter()
          Get the setter method.
private  java.lang.String getSetterName(java.lang.String propertyName)
           
private static java.util.Map getThreadBoundPropertMap()
           
private static java.lang.Object getThreadBoundPropertyValue(java.lang.Object obj, java.lang.String name, java.lang.Object initialValue)
           
 void setInitialValueCreator(Closure callable)
          Closure responsible for creating the initial value of thread-managed bean properties
private static java.lang.Object setThreadBoundPropertyValue(java.lang.Object obj, java.lang.String name, java.lang.Object value)
           
 
Methods inherited from class groovy.lang.MetaBeanProperty
getField, getModifiers, getProperty, setField, setProperty
 
Methods inherited from class groovy.lang.MetaProperty
getName, getType
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ZERO_ARGUMENT_LIST

private static final CachedClass[] ZERO_ARGUMENT_LIST

PROPERTY_INSTANCE_HOLDER

private static final java.lang.ThreadLocal PROPERTY_INSTANCE_HOLDER

declaringClass

private java.lang.Class declaringClass

getter

private ThreadManagedMetaBeanProperty.ThreadBoundGetter getter

setter

private ThreadManagedMetaBeanProperty.ThreadBoundSetter setter

initialValue

private java.lang.Object initialValue

PROPERTY_SET_PREFIX

private static final java.lang.String PROPERTY_SET_PREFIX
See Also:
Constant Field Values

initialValueCreator

private Closure initialValueCreator
Constructor Detail

ThreadManagedMetaBeanProperty

public ThreadManagedMetaBeanProperty(java.lang.Class declaringClass,
                                     java.lang.String name,
                                     java.lang.Class type,
                                     java.lang.Object iv)
Constructs a new ThreadManagedBeanProperty for the given arguments

Parameters:
declaringClass - The class that declares the property
name - The name of the property
type - The type of the property
iv - The properties initial value

ThreadManagedMetaBeanProperty

public ThreadManagedMetaBeanProperty(java.lang.Class declaringClass,
                                     java.lang.String name,
                                     java.lang.Class type,
                                     Closure initialValueCreator)
Constructs a new ThreadManagedBeanProperty for the given arguments

Parameters:
declaringClass - The class that declares the property
name - The name of the property
type - The type of the property
initialValueCreator - The closure responsible for creating the initial value
Method Detail

getInitialValue

public java.lang.Object getInitialValue()
Retrieves the initial value of the ThreadBound property

Returns:
The initial value

getInitialValue

public java.lang.Object getInitialValue(java.lang.Object object)

setInitialValueCreator

public void setInitialValueCreator(Closure callable)
Closure responsible for creating the initial value of thread-managed bean properties

Parameters:
callable - The closure responsible for creating the initial value

getThreadBoundPropertyValue

private static java.lang.Object getThreadBoundPropertyValue(java.lang.Object obj,
                                                            java.lang.String name,
                                                            java.lang.Object initialValue)

getThreadBoundPropertMap

private static java.util.Map getThreadBoundPropertMap()

setThreadBoundPropertyValue

private static java.lang.Object setThreadBoundPropertyValue(java.lang.Object obj,
                                                            java.lang.String name,
                                                            java.lang.Object value)

getGetter

public MetaMethod getGetter()
Description copied from class: MetaBeanProperty
Get the getter method.

Overrides:
getGetter in class MetaBeanProperty

getSetter

public MetaMethod getSetter()
Description copied from class: MetaBeanProperty
Get the setter method.

Overrides:
getSetter in class MetaBeanProperty

getGetterName

private java.lang.String getGetterName(java.lang.String propertyName,
                                       java.lang.Class type)

getSetterName

private java.lang.String getSetterName(java.lang.String propertyName)


Copyright © ${year} The Codehaus. All Rights Reserved.