org.mule.impl
Interface ThreadSafeAccess
- All Known Implementing Classes:
- AbstractMessageAdapter, AxisMessageAdapter, DefaultMessageAdapter, EjbMessageAdapter, FileContentsMessageAdapter, FileMessageAdapter, FtpMessageAdapter, HttpMessageAdapter, HttpRequestMessageAdapter, HttpStreamMessageAdapter, JbiMessageAdapter, JdbcMessageAdapter, JmsMessageAdapter, MailMessageAdapter, MuleEvent, MuleMessage, MulticastMessageAdapter, OracleJmsMessageAdapter, OutStreamMessageAdapter, RmiMessageAdapter, SimpleMailMessageAdapter, StreamMessageAdapter, StreamMessageAdapter, TcpMessageAdapter, TestConnector.DummyMessageAdapter, UdpMessageAdapter, VMMessageAdapter, WriterMessageAdapter, XFireMessageAdapter, XmppMessageAdapter
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:
- A new object is "unbound" and "mutable".
- An object is "bound" to the first thread that calls the object after it is created.
- A "mutable" object can be modified only by the thread to which it is bound.
- An object is "sealed" (no longer "mutable") when it is accessed by a thread other than the
thread to which it is "bound". It is an error to attempt to change a "sealed" object.
In practice this means that objects are initially mutable, but become immutable once they are
shared.
assertAccess
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
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
ThreadSafeAccess newThreadCopy()
- Returns:
- A new instance of the implementing class, unbound to any thread and mutable.
Copyright © 2003-2008 MuleSource, Inc.. All Rights Reserved.