org.mule.impl
Interface ThreadSafeAccess

All Known Implementing Classes:
AbstractMessageAdapter, MuleEvent, MuleMessage

public interface ThreadSafeAccess

Interface implemented by message-related objects that avoid exposing mutable data to multiple threads by providing immutable copies. This interface is optional - it is an implementation detail that is tested for dynamically and used only if available.

To avoid "scribbling" where several threads change state within in a single method (typically in inconsistent ways, causing subtle and intermittent errors) we use the following access policy for message related objects:

In practice this means that objects are initially mutable, but become immutable once they are shared.


Method Summary
 void assertAccess(boolean write)
          This method may be called before data in the object are accessed.
 ThreadSafeAccess newThreadCopy()
           
 void resetAccessControl()
          This method should ONLY be used in the construction of composite ThreadSafeAccess instances.
 

Method Detail

assertAccess

public void assertAccess(boolean write)
This method may be called before data in the object are accessed. It should verify that the access policy is followed correctly (if not, a runtime exception may be thrown).

Parameters:
write - True if the access will mutate values.

resetAccessControl

public void resetAccessControl()
This method should ONLY be used in the construction of composite ThreadSafeAccess instances. For example, a ThreadSafeAccess UMOEvent contains a ThreadSafeAccess UMOMessageAdapter. During the construction of the event, the message adapter may be bound to the contructing thread. Calling this method releases that binding so that the event as a whole can be passed to a new thread unbound.


newThreadCopy

public ThreadSafeAccess newThreadCopy()
Returns:
A new instance of the implementing class, unbound to any thread and mutable.


Copyright © 2003-2008 MuleSource, Inc.. All Rights Reserved.