de.grogra.graph.impl
Class GraphManager

java.lang.Object
  extended by de.grogra.util.LockableImpl
      extended by de.grogra.persistence.PersistenceManager
          extended by de.grogra.graph.impl.GraphManager
All Implemented Interfaces:
Graph, SharedObjectProvider, Lockable

public class GraphManager
extends PersistenceManager
implements Graph, SharedObjectProvider


Nested Class Summary
 
Nested classes/interfaces inherited from interface de.grogra.util.Lockable
Lockable.DeadLockException
 
Nested classes/interfaces inherited from interface de.grogra.persistence.SharedObjectProvider
SharedObjectProvider.Binding
 
Field Summary
 LongToIntHashMap baseMap
          A mapping of each node ID (participating in integration) to an index into the rate vector is stored here.
static I18NBundle I18N
           
static java.lang.String META_GRAPH
           
 double[] rate
          Stores a reference to the rate vector.
static GraphManager STATIC
           
static GraphState STATIC_STATE
           
 
Fields inherited from class de.grogra.persistence.PersistenceManager
makeLock
 
Fields inherited from interface de.grogra.graph.Graph
BRANCH_EDGE, CONTAINMENT_EDGE, CONTAINMENT_END_EDGE, EDGENODE_IN_EDGE, EDGENODE_OUT_EDGE, ELLIPSE_SYMBOL, MAIN_GRAPH, MARK_EDGE, MIN_NORMAL_BIT_INDEX, MIN_UNUSED_EDGE, MIN_UNUSED_EDGE_BIT, NOTIFIES_EDGE, PERSISTENT, PERSISTENT_DELETED, RECTANGLE_SYMBOL, REFINEMENT_EDGE, RHOMBUS_SYMBOL, ROUND_RECTANGLE_SYMBOL, SPECIAL_EDGE_MASK, SPECIAL_EDGE_OF_SOURCE_BIT, STD_EDGE_5, STD_EDGE_6, SUCCESSOR_EDGE, TRANSIENT
 
Constructor Summary
GraphManager(PersistenceConnection cx, java.lang.String key, boolean logLifeCycle, boolean checkLock)
           
 
Method Summary
 void accept(java.lang.Object start, Visitor v, ArrayPath placeInPath)
           
static void acceptGraph(Node root, Visitor v, ArrayPath pathToUse)
           
 void addAttributeChangeListener(AttributeChangeListener l)
           
 void addAttributeChangeListener(java.lang.Object object, boolean asNode, AttributeChangeListener l)
           
 void addChangeBoundaryListener(ChangeBoundaryListener l)
           
 void addEdgeChangeListener(EdgeChangeListener l)
           
 void addEdgeChangeListener(java.lang.Object object, boolean asNode, EdgeChangeListener l)
           
 void addMetaNode(Node node, Transaction t)
           
 void addSharedObjectListener(java.beans.PropertyChangeListener l)
           
 int allocateBitMark(boolean resetOnDispose)
           
 int allocateObjectMark(boolean resetOnDispose)
           
 void appendXLTo(java.lang.StringBuffer buf, boolean qualified)
           
protected  void completeTransaction(Transaction t, boolean commit)
           
 BooleanMap createBooleanMap()
           
<V> ObjectMap<V>
createObjectMap()
           
 GraphState createStaticState(ThreadContext tc)
           
protected  Transaction createTransaction(java.lang.Thread thread)
           
protected  TransactionApplier createXAApplier()
           
 void disposeBitMark(int handle, boolean resetAll)
           
 void disposeBitMark(int handle, boolean resetAll, boolean onlyNodes)
           
 void disposeObjectMark(int handle, boolean resetAll)
           
 void disposeObjectMark(int handle, boolean resetAll, boolean onlyNodes)
           
 void dumpNodeStatistics(java.io.OutputStream out)
           
 void dumpNodeStatistics(java.io.PrintWriter out)
           
protected  void enterWriteLock()
           
protected  void executeInAllowedThread(java.lang.Runnable r)
           
 AttributeAccessor getAccessor(java.lang.Object object, boolean asNode, Attribute attribute)
          Returns an attribute accessor for the given attribute on the given object.
 Attribute[] getAttributes(java.lang.Object object, boolean asNode)
          Returns the set of attributes which are available for the given object.
 int getColor(java.lang.Object object, boolean asNode)
           
 Attribute[] getDependent(java.lang.Object object, boolean asNode, Attribute a)
          Returns the set of attributes whose values depend on the given attribute a for the given object.
 java.lang.Object getDescription(java.lang.Object object, boolean asNode, java.lang.String type)
          Returns a description for the given object.
 int getEdgeBits(java.lang.Object edge)
          Returns the edge bits of an edge.
 Extent getExtent(java.lang.Class type)
           
 Extent getExtent(Type type)
           
 java.lang.Object getFirstEdge(java.lang.Object node)
          Returns the first edge of the linked list of edges of node.
 long getId(java.lang.Object node)
          Returns a unique identifier for the given node.
 Instantiator getInstantiator(java.lang.Object node)
           
 int getLifeCycleState(java.lang.Object object, boolean asNode)
          Returns the life cycle state of the given object as part of this graph.
 GraphState getMainState()
          Returns the main graph state.
 java.lang.String getName(java.lang.Object object, boolean asNode)
          Returns a name for the given object.
 java.lang.Object getNextEdge(java.lang.Object edge, java.lang.Object parentNode)
          Returns the edge after edge in the linked list of edges of node.
 java.lang.Object getNodeForId(long id)
          Returns the node identified by id.
 Node getNodeForName(java.lang.String name)
           
 Node getObject(long id)
           
 java.lang.Object getObjectForName(boolean node, java.lang.String name)
          Returns the object with the given name.
 ObjectAttribute getParentAttribute()
          Defines the derived attribute which has as value the parent object.
 java.lang.Object getProperty(java.lang.String key)
           
 java.lang.String getProviderName()
           
 Node getRoot()
          Returns the root node of the Graph.MAIN_GRAPH of this graph.
 java.lang.Object getRoot(java.lang.String key)
          Returns the root node for the given root key.
 java.lang.String[] getRootKeys()
          Returns the root keys for the graph.
 java.lang.Object getSourceNode(java.lang.Object edge)
          Returns the source node of edge.
 SpecialEdgeDescriptor[] getSpecialEdgeDescriptors(java.lang.Object node, boolean asSource)
           
 java.util.Map getStateMap()
           
 int getSymbol(java.lang.Object object, boolean asNode)
           
 java.lang.Object getTargetNode(java.lang.Object edge)
          Returns the target node of edge.
 EdgePattern getTreePattern()
          Defines the pattern used for the construction of this graph's tree.
 void initMainState(java.util.concurrent.Executor sync)
           
protected  void invokeRun(LockProtectedRunnable task, boolean sameThread, Lock lock)
           
protected  boolean isAllowedThread(boolean write)
           
protected  void leaveWriteLock()
           
 void logDataOnPersistenceChange(boolean value)
           
protected  void makePersistentImpl(PersistenceCapable o, long id, Transaction t)
           
protected  void makeTransientImpl(PersistenceCapable o, Transaction t)
           
protected  void prepareCompletion(Transaction t, boolean commit)
           
 long prepareId(PersistenceCapable node)
           
 void readExtent(PersistenceInputStream in)
           
 ResolvableReference readReference(PersistenceInput in)
           
 void rebuildExtents()
           
 void removeAllFromExtent()
          Removes all nodes in graph from extent.
 void removeAttributeChangeListener(AttributeChangeListener l)
           
 void removeAttributeChangeListener(java.lang.Object object, boolean asNode, AttributeChangeListener l)
           
 void removeChangeBoundaryListener(ChangeBoundaryListener l)
           
 void removeEdgeChangeListener(EdgeChangeListener l)
           
 void removeEdgeChangeListener(java.lang.Object object, boolean asNode, EdgeChangeListener l)
           
 void removeMetaNode(Node node, Transaction t)
           
 void removeSharedObjectListener(java.beans.PropertyChangeListener l)
           
 void setMakePersistentTransitive(boolean value)
           
 void setProperty(java.lang.String key, java.lang.Object value)
           
 void setRoot(java.lang.String key, Node root)
           
 void suppressLogging(boolean value)
           
 java.lang.String toXLString(boolean qualified)
           
protected  void transactionApplied(Transaction.Data xa, boolean rollback, Transaction t)
           
 void writeExtent(GraphOutput out, Node root)
           
 void writeExtent(PersistenceOutputStream out)
           
 void writeObject(Shareable object, PersistenceOutput out)
           
 
Methods inherited from class de.grogra.persistence.PersistenceManager
addXAListener, beginTransaction, close, getActiveTransaction, getBindings, getConnection, getId, getLocalLog, getStamp, getTransaction, getTransactionData, getTransactions, idUsed, initNonlocalTransactionNotifier, localTransactionCommitted, localTransactionRolledBack, makePersistent, makePersistent, makeTransient, nextId, removeXAListener, transactionCommitted
 
Methods inherited from class de.grogra.util.LockableImpl
execute, execute, executeForcedly, executeForcedly, getMaxWaitingTime, getQueueLength, isLocked
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface de.grogra.graph.Graph
getStamp
 
Methods inherited from interface de.grogra.util.Lockable
execute, execute, executeForcedly, executeForcedly, getMaxWaitingTime, getQueueLength, isLocked
 

Field Detail

baseMap

public final LongToIntHashMap baseMap
A mapping of each node ID (participating in integration) to an index into the rate vector is stored here. It is assumed, that all properties of a node participating in integration are stored in the rate array in a continuous block, where the start index of the block is the number stored in this mapping.


I18N

public static final I18NBundle I18N

META_GRAPH

public static final java.lang.String META_GRAPH
See Also:
Constant Field Values

rate

public double[] rate
Stores a reference to the rate vector. When integration starts, a reference to the rate vector is stored here, so that PropertyRuntime.GraphProperty can access the rate vector.

See Also:
de.grogra.rgg.model.PropertyRuntime.GraphProperty#defRateAssign()

STATIC

public static final GraphManager STATIC

STATIC_STATE

public static final GraphState STATIC_STATE
Constructor Detail

GraphManager

public GraphManager(PersistenceConnection cx,
                    java.lang.String key,
                    boolean logLifeCycle,
                    boolean checkLock)
Method Detail

accept

public final void accept(java.lang.Object start,
                         Visitor v,
                         ArrayPath placeInPath)
Specified by:
accept in interface Graph

acceptGraph

public static void acceptGraph(Node root,
                               Visitor v,
                               ArrayPath pathToUse)

addAttributeChangeListener

public void addAttributeChangeListener(AttributeChangeListener l)
Specified by:
addAttributeChangeListener in interface Graph

addAttributeChangeListener

public void addAttributeChangeListener(java.lang.Object object,
                                       boolean asNode,
                                       AttributeChangeListener l)
Specified by:
addAttributeChangeListener in interface Graph

addChangeBoundaryListener

public void addChangeBoundaryListener(ChangeBoundaryListener l)
Specified by:
addChangeBoundaryListener in interface Graph

addEdgeChangeListener

public void addEdgeChangeListener(EdgeChangeListener l)
Specified by:
addEdgeChangeListener in interface Graph

addEdgeChangeListener

public void addEdgeChangeListener(java.lang.Object object,
                                  boolean asNode,
                                  EdgeChangeListener l)
Specified by:
addEdgeChangeListener in interface Graph

addMetaNode

public void addMetaNode(Node node,
                        Transaction t)

addSharedObjectListener

public void addSharedObjectListener(java.beans.PropertyChangeListener l)

allocateBitMark

public final int allocateBitMark(boolean resetOnDispose)
Specified by:
allocateBitMark in class PersistenceManager

allocateObjectMark

public final int allocateObjectMark(boolean resetOnDispose)
Specified by:
allocateObjectMark in class PersistenceManager

appendXLTo

public void appendXLTo(java.lang.StringBuffer buf,
                       boolean qualified)

completeTransaction

protected void completeTransaction(Transaction t,
                                   boolean commit)
Overrides:
completeTransaction in class PersistenceManager

createBooleanMap

public BooleanMap createBooleanMap()
Specified by:
createBooleanMap in interface Graph

createObjectMap

public <V> ObjectMap<V> createObjectMap()
Specified by:
createObjectMap in interface Graph

createStaticState

public GraphState createStaticState(ThreadContext tc)

createTransaction

protected Transaction createTransaction(java.lang.Thread thread)
Specified by:
createTransaction in class PersistenceManager

createXAApplier

protected TransactionApplier createXAApplier()
Specified by:
createXAApplier in class PersistenceManager

disposeBitMark

public final void disposeBitMark(int handle,
                                 boolean resetAll)
Specified by:
disposeBitMark in class PersistenceManager

disposeBitMark

public final void disposeBitMark(int handle,
                                 boolean resetAll,
                                 boolean onlyNodes)

disposeObjectMark

public final void disposeObjectMark(int handle,
                                    boolean resetAll)
Specified by:
disposeObjectMark in class PersistenceManager

disposeObjectMark

public final void disposeObjectMark(int handle,
                                    boolean resetAll,
                                    boolean onlyNodes)

dumpNodeStatistics

public void dumpNodeStatistics(java.io.OutputStream out)

dumpNodeStatistics

public void dumpNodeStatistics(java.io.PrintWriter out)

enterWriteLock

protected void enterWriteLock()
Overrides:
enterWriteLock in class LockableImpl

executeInAllowedThread

protected void executeInAllowedThread(java.lang.Runnable r)
Overrides:
executeInAllowedThread in class LockableImpl

getAccessor

public AttributeAccessor getAccessor(java.lang.Object object,
                                     boolean asNode,
                                     Attribute attribute)
Description copied from interface: Graph
Returns an attribute accessor for the given attribute on the given object.

Specified by:
getAccessor in interface Graph
Parameters:
object - the object
asNode - true if object is a node, false if object is an edge
attribute - the attribute
Returns:
an accessor for the object's attribute value

getAttributes

public Attribute[] getAttributes(java.lang.Object object,
                                 boolean asNode)
Description copied from interface: Graph
Returns the set of attributes which are available for the given object.

Specified by:
getAttributes in interface Graph
Parameters:
object - the object
asNode - true if object is a node, false if object is an edge
Returns:
the object's attributes

getColor

public int getColor(java.lang.Object object,
                    boolean asNode)
Specified by:
getColor in interface Graph

getDependent

public Attribute[] getDependent(java.lang.Object object,
                                boolean asNode,
                                Attribute a)
Description copied from interface: Graph
Returns the set of attributes whose values depend on the given attribute a for the given object.

Specified by:
getDependent in interface Graph
Parameters:
object - the object
asNode - true if object is a node, false if object is an edge
a - the attribute
Returns:
the set of dependent attributes

getDescription

public java.lang.Object getDescription(java.lang.Object object,
                                       boolean asNode,
                                       java.lang.String type)
Description copied from interface: Graph
Returns a description for the given object. The type of the desired description (e.g., text, icon) is specified in the argument type; it is interpreted as in Described.getDescription(String).

Specified by:
getDescription in interface Graph
Parameters:
object - the object
asNode - true if object is a node, false if object is an edge
type - the type of description
Returns:
a description of the given type, or null

getEdgeBits

public int getEdgeBits(java.lang.Object edge)
Description copied from interface: Graph
Returns the edge bits of an edge.

Specified by:
getEdgeBits in interface Graph
Parameters:
edge - the edge
Returns:
the edge's edge bits
See Also:
Graph

getExtent

public Extent getExtent(java.lang.Class type)

getExtent

public Extent getExtent(Type type)

getFirstEdge

public java.lang.Object getFirstEdge(java.lang.Object node)
Description copied from interface: Graph
Returns the first edge of the linked list of edges of node.

Specified by:
getFirstEdge in interface Graph
Parameters:
node - the common node of the edges of the linked list
Returns:
the first edge of the linked list
See Also:
Graph, Graph.getNextEdge(Object, Object)

getId

public long getId(java.lang.Object node)
Description copied from interface: Graph
Returns a unique identifier for the given node.

Specified by:
getId in interface Graph
Parameters:
node - a node
Returns:
the node's unique identifier
See Also:
Graph.getNodeForId(long)

getInstantiator

public Instantiator getInstantiator(java.lang.Object node)
Specified by:
getInstantiator in interface Graph

getLifeCycleState

public int getLifeCycleState(java.lang.Object object,
                             boolean asNode)
Description copied from interface: Graph
Returns the life cycle state of the given object as part of this graph.

Specified by:
getLifeCycleState in interface Graph
Parameters:
object - the object to test
asNode - true if object is a node, false if object is an edge
Returns:
life cycle state, one of Graph.PERSISTENT, Graph.PERSISTENT_DELETED, Graph.TRANSIENT

getMainState

public GraphState getMainState()
Description copied from interface: Graph
Returns the main graph state. The main graph state is the only graph state within which modifications to the graph may be done. The notification of event listeners is done in the context of this state, too.

Specified by:
getMainState in interface Graph
Returns:
this graph's main graph state
See Also:
Graph

getName

public java.lang.String getName(java.lang.Object object,
                                boolean asNode)
Description copied from interface: Graph
Returns a name for the given object. Names are not necessarily unique.

Specified by:
getName in interface Graph
Parameters:
object - the object
asNode - true if object is a node, false if object is an edge
Returns:
a name
See Also:
Graph.getObjectForName(boolean, String)

getNextEdge

public java.lang.Object getNextEdge(java.lang.Object edge,
                                    java.lang.Object parentNode)
Description copied from interface: Graph
Returns the edge after edge in the linked list of edges of node.

Specified by:
getNextEdge in interface Graph
Parameters:
edge - the previous edge in the linked list
parentNode - the common node of the edges of the linked list
Returns:
the next edge of the linked list
See Also:
Graph, Graph.getFirstEdge(Object)

getNodeForId

public java.lang.Object getNodeForId(long id)
Description copied from interface: Graph
Returns the node identified by id.

Specified by:
getNodeForId in interface Graph
Parameters:
id - an identifier
Returns:
the corresponding node, or null if id identifies no node
See Also:
Graph.getId(Object)

getNodeForName

public Node getNodeForName(java.lang.String name)

getObject

public Node getObject(long id)
Specified by:
getObject in class PersistenceManager

getObjectForName

public java.lang.Object getObjectForName(boolean node,
                                         java.lang.String name)
Description copied from interface: Graph
Returns the object with the given name. If several such objects exist, one of them is chosen in an unspecified manner. If no such object exists, null is returned.

Specified by:
getObjectForName in interface Graph
Parameters:
node - true if a node of the given name is to be found, false if an edge is to be found
name - the name of the object
Returns:
an object of the given kind (node or edge) with the given name, or null if no such object exists
See Also:
Graph.getName(Object, boolean)

getParentAttribute

public ObjectAttribute getParentAttribute()
Description copied from interface: Graph
Defines the derived attribute which has as value the parent object.

Specified by:
getParentAttribute in interface Graph
Returns:
the parent attribute
See Also:
Graph, Graph.getTreePattern()

getProperty

public java.lang.Object getProperty(java.lang.String key)

getProviderName

public java.lang.String getProviderName()
Specified by:
getProviderName in interface SharedObjectProvider

getRoot

public Node getRoot()
Returns the root node of the Graph.MAIN_GRAPH of this graph.

Returns:
root node of main graph

getRoot

public java.lang.Object getRoot(java.lang.String key)
Description copied from interface: Graph
Returns the root node for the given root key.

Specified by:
getRoot in interface Graph
Parameters:
key - a root key, one of Graph.getRootKeys()
Returns:
the root node of the graph identified by key, or null if no such root node exists
See Also:
Graph

getRootKeys

public java.lang.String[] getRootKeys()
Description copied from interface: Graph
Returns the root keys for the graph.

Specified by:
getRootKeys in interface Graph
Returns:
an array of root keys
See Also:
Graph, Graph.getRoot(String)

getSourceNode

public java.lang.Object getSourceNode(java.lang.Object edge)
Description copied from interface: Graph
Returns the source node of edge.

Specified by:
getSourceNode in interface Graph
Parameters:
edge - an edge
Returns:
the source node
See Also:
Graph

getSpecialEdgeDescriptors

public SpecialEdgeDescriptor[] getSpecialEdgeDescriptors(java.lang.Object node,
                                                         boolean asSource)
Specified by:
getSpecialEdgeDescriptors in interface Graph

getStateMap

public java.util.Map getStateMap()
Specified by:
getStateMap in interface Graph

getSymbol

public int getSymbol(java.lang.Object object,
                     boolean asNode)
Specified by:
getSymbol in interface Graph

getTargetNode

public java.lang.Object getTargetNode(java.lang.Object edge)
Description copied from interface: Graph
Returns the target node of edge.

Specified by:
getTargetNode in interface Graph
Parameters:
edge - an edge
Returns:
the target node
See Also:
Graph

getTreePattern

public EdgePattern getTreePattern()
Description copied from interface: Graph
Defines the pattern used for the construction of this graph's tree.

Specified by:
getTreePattern in interface Graph
Returns:
an edge pattern
See Also:
Graph, Graph.getParentAttribute()

initMainState

public void initMainState(java.util.concurrent.Executor sync)

invokeRun

protected void invokeRun(LockProtectedRunnable task,
                         boolean sameThread,
                         Lock lock)
Overrides:
invokeRun in class LockableImpl

isAllowedThread

protected boolean isAllowedThread(boolean write)
Overrides:
isAllowedThread in class LockableImpl

leaveWriteLock

protected void leaveWriteLock()
Overrides:
leaveWriteLock in class LockableImpl

logDataOnPersistenceChange

public void logDataOnPersistenceChange(boolean value)

makePersistentImpl

protected void makePersistentImpl(PersistenceCapable o,
                                  long id,
                                  Transaction t)
Specified by:
makePersistentImpl in class PersistenceManager

makeTransientImpl

protected void makeTransientImpl(PersistenceCapable o,
                                 Transaction t)
Specified by:
makeTransientImpl in class PersistenceManager

prepareCompletion

protected void prepareCompletion(Transaction t,
                                 boolean commit)
Overrides:
prepareCompletion in class PersistenceManager

prepareId

public long prepareId(PersistenceCapable node)
Specified by:
prepareId in class PersistenceManager

readExtent

public void readExtent(PersistenceInputStream in)
                throws java.io.IOException
Specified by:
readExtent in class PersistenceManager
Throws:
java.io.IOException

readReference

public ResolvableReference readReference(PersistenceInput in)
                                  throws java.io.IOException
Specified by:
readReference in interface SharedObjectProvider
Throws:
java.io.IOException

rebuildExtents

public void rebuildExtents()

removeAllFromExtent

public void removeAllFromExtent()
Removes all nodes in graph from extent. Used when automatically generated modules are recompiled. Then instances of the modules must be replaced with new instances of the newly compiled types. Old nodes of the old modules must be removed from the extent so they are no longer referenced.


removeAttributeChangeListener

public void removeAttributeChangeListener(AttributeChangeListener l)
Specified by:
removeAttributeChangeListener in interface Graph

removeAttributeChangeListener

public void removeAttributeChangeListener(java.lang.Object object,
                                          boolean asNode,
                                          AttributeChangeListener l)
Specified by:
removeAttributeChangeListener in interface Graph

removeChangeBoundaryListener

public void removeChangeBoundaryListener(ChangeBoundaryListener l)
Specified by:
removeChangeBoundaryListener in interface Graph

removeEdgeChangeListener

public void removeEdgeChangeListener(EdgeChangeListener l)
Specified by:
removeEdgeChangeListener in interface Graph

removeEdgeChangeListener

public void removeEdgeChangeListener(java.lang.Object object,
                                     boolean asNode,
                                     EdgeChangeListener l)
Specified by:
removeEdgeChangeListener in interface Graph

removeMetaNode

public void removeMetaNode(Node node,
                           Transaction t)

removeSharedObjectListener

public void removeSharedObjectListener(java.beans.PropertyChangeListener l)

setMakePersistentTransitive

public void setMakePersistentTransitive(boolean value)

setProperty

public void setProperty(java.lang.String key,
                        java.lang.Object value)

setRoot

public void setRoot(java.lang.String key,
                    Node root)

suppressLogging

public void suppressLogging(boolean value)

toXLString

public java.lang.String toXLString(boolean qualified)

transactionApplied

protected void transactionApplied(Transaction.Data xa,
                                  boolean rollback,
                                  Transaction t)
Overrides:
transactionApplied in class PersistenceManager

writeExtent

public void writeExtent(GraphOutput out,
                        Node root)
                 throws java.io.IOException
Throws:
java.io.IOException

writeExtent

public void writeExtent(PersistenceOutputStream out)
                 throws java.io.IOException
Specified by:
writeExtent in class PersistenceManager
Throws:
java.io.IOException

writeObject

public void writeObject(Shareable object,
                        PersistenceOutput out)
                 throws java.io.IOException
Specified by:
writeObject in interface SharedObjectProvider
Throws:
java.io.IOException