Package org.eclipse.ecf.provider.generic
Class SOContainer
java.lang.Object
org.eclipse.ecf.core.AbstractContainer
org.eclipse.ecf.provider.generic.SOContainer
- All Implemented Interfaces:
org.eclipse.core.runtime.IAdaptable
,IContainer
,IIdentifiable
,IReliableContainer
,ISharedObjectContainer
- Direct Known Subclasses:
ClientSOContainer
,ServerSOContainer
-
Field Summary
Modifier and TypeFieldDescriptionprotected ISharedObjectContainerConfig
static final String
static final String
protected org.eclipse.ecf.provider.generic.SOContainerGMM
protected boolean
protected ThreadGroup
protected ISharedObjectPolicy
protected ISynchAsynchEventHandler
protected SOManager
protected ISharedObjectMessageSerializer
protected ThreadGroup
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
addNewRemoteMember
(ID memberID, Object data) protected ISharedObjectContainerTransaction
addSharedObject0
(ID id, ISharedObject s, Map props) protected void
addSharedObjectAndWait
(ID id, ISharedObject s, Map properties) protected ISharedObjectContainerTransaction
addSharedObjectWrapper
(SOWrapper wrapper) protected boolean
addToLoading
(org.eclipse.ecf.provider.generic.SOContainer.LoadingSharedObject lso) protected Object
checkRemoteCreate
(ID fromID, ID toID, ReplicaSharedObjectDescription desc) Check remote creation of shared objects.abstract void
connect
(ID groupID, IConnectContext connectContext) Connect to a target remote process or process group.protected Map
createContainerPropertiesForSharedObject
(ID sharedObjectID) protected SOConfig
createRemoteSharedObjectConfig
(ID fromID, ReplicaSharedObjectDescription sd, ISharedObject obj) protected SOContext
createRemoteSharedObjectContext
(SOConfig soconfig, IQueueEnqueue queue) protected SOWrapper
protected SOConfig
createSharedObjectConfig
(ID id, ISharedObject obj, Map props) protected SOContext
createSharedObjectContext
(SOConfig soconfig, IQueueEnqueue queue) protected SOWrapper
createSharedObjectWrapper
(ID id, ISharedObject s, Map props) protected void
protected Object
defaultDeserializeSharedObjectMessage
(byte[] bytes) protected byte[]
defaultSerializeSharedObjectMessage
(ID sharedObjectID, Object message) static ContainerMessage
deserializeContainerMessage
(byte[] bytes) protected Object
deserializeSharedObjectMessage
(byte[] bytes) protected boolean
destroySharedObject
(ID sharedObjectID) abstract void
Disconnect.protected void
disconnect
(IConnection conn) void
dispose()
Dispose this IContainer instance.protected void
fireDelegateContainerEvent
(IContainerEvent containerEvent) protected final void
forward
(ID fromID, ID toID, ContainerMessage data) protected abstract void
forwardExcluding
(ID from, ID excluding, ContainerMessage data) protected abstract void
forwardToRemote
(ID from, ID to, ContainerMessage data) getAdapter
(Class adapter) This specialization of IAdaptable.getAdapter() returns additional services supported by this container.protected Object[]
protected String[]
protected ClassLoader
protected ClassLoader
abstract ID
Get the target ID that this container instance has connected to.Get the Namespace for creating a targetID suitable for use as the first parameter in subsequent calls toIContainer.connect(ID, IConnectContext)
.ID[]
Get the current membership of the joined group.protected Object
getID()
Return the ID for this 'identifiable' object.protected abstract ID
getIDForConnection
(IAsynchConnection connection) protected int
protected Thread
getNewSharedObjectThread
(ID sharedObjectID, Runnable runnable) protected long
protected ID[]
protected ISynchAsynchEventHandler
protected ISharedObject
getSharedObject
(ID id) protected ID[]
Get SharedObjectManager for this containerprotected ISharedObjectMessageSerializer
protected SOWrapper
protected void
handleAsynchIOException
(IOException except, AsynchEvent e) protected void
protected void
protected void
handleLeave
(ID leftID, IConnection conn) protected abstract void
protected void
protected void
protected void
protected void
protected abstract void
protected boolean
abstract boolean
protected ISharedObject
protected void
protected void
notifySharedObjectActivated
(ID sharedObjectID) protected void
notifySharedObjectDeactivated
(ID sharedObjectID) protected static void
printToSystemError
(String message, Throwable t) protected void
processAsynch
(AsynchEvent event) protected abstract void
processDisconnect
(DisconnectEvent event) protected Serializable
protected abstract void
protected void
removeFromLoading
(ID id) protected boolean
removeRemoteMember
(ID remoteMember) protected ISharedObject
removeSharedObject
(ID id) protected void
sendCreate
(ID sharedObjectID, ID toContainerID, SharedObjectDescription sd) protected void
sendCreateResponse
(ID homeID, ID sharedObjectID, Throwable t, long identifier) protected void
sendCreateResponseSharedObjectMessage
(ID toContainerID, ID fromSharedObject, Throwable t, long ident) protected ID[]
sendCreateSharedObjectMessage
(ID toContainerID, SharedObjectDescription sd) protected void
sendDispose
(ID toContainerID, ID sharedObjectID) protected void
sendDisposeSharedObjectMessage
(ID toContainerID, ID fromSharedObject) protected void
sendMessage
(ID toContainerID, ID sharedObjectID, Object message) protected void
sendMessage
(ContainerMessage data) protected void
sendSharedObjectMessage
(ID toContainerID, ID fromSharedObject, Serializable data) static byte[]
serialize
(Serializable obj) protected byte[]
serializeSharedObjectMessage
(ID sharedObjectID, Object message) protected void
setMaxGroupMembers
(int max) protected void
void
Set the shared object message serializer.protected void
traceStack
(String msg, Throwable e) protected ContainerMessage
protected boolean
verifySharedObjectMessageTarget
(ID containerID) protected boolean
Methods inherited from class org.eclipse.ecf.core.AbstractContainer
addListener, fireContainerEvent, getPasswordFromConnectContext, removeListener
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.eclipse.ecf.core.IContainer
addListener, removeListener
-
Field Details
-
DEFAULT_OBJECT_ARG_KEY
-
DEFAULT_OBJECT_ARGTYPES_KEY
-
config
-
groupManager
protected org.eclipse.ecf.provider.generic.SOContainerGMM groupManager -
isClosing
protected boolean isClosing -
loadingThreadGroup
-
policy
-
receiver
-
-
Constructor Details
-
Method Details
-
getID
Description copied from interface:IIdentifiable
Return the ID for this 'identifiable' object. The returned ID should be unique within its namespace. May returnnull
.- Specified by:
getID
in interfaceIIdentifiable
- Returns:
- the ID for this identifiable object. May return
null
.
-
connect
public abstract void connect(ID groupID, IConnectContext connectContext) throws ContainerConnectException Description copied from interface:IContainer
Connect to a target remote process or process group. The target identified by the first parameter (targetID) is connected the implementation class. If authentication information is required, the required information is given via via the second parameter (connectContext). Callers note that depending upon the provider implementation this method may block. It is suggested that callers use a separate thread to call this method. This method provides an implementation independent way for container implementations to connect, authenticate, and communicate with a remote service or group of services. Providers are responsible for implementing this operation in a way appropriate to the given remote service (or group) via expected protocol.- Specified by:
connect
in interfaceIContainer
- Parameters:
groupID
- the ID of the remote server or group to connect to. SeeIContainer.getConnectNamespace()
for a explanation of the constraints upon this parameter.connectContext
- any required context to allow this container to authenticate. May benull
if underlying provider does not have any authentication requirements for connection.- Throws:
ContainerConnectException
- thrown if communication cannot be established with remote service. Causes can include network connection failure, authentication failure, server error, or if container is already connected.
-
getConnectedID
Description copied from interface:IContainer
Get the target ID that this container instance has connected to. Returns null if not connected.- Specified by:
getConnectedID
in interfaceIContainer
- Returns:
- ID of the target we are connected to. Returns
null
if container not connected.
-
disconnect
public abstract void disconnect()Description copied from interface:IContainer
Disconnect. This operation will disconnect the local container instance from any previously joined target or group. Subsequent calls to getConnectedID() will returnnull
.- Specified by:
disconnect
in interfaceIContainer
-
getConnectNamespace
Description copied from interface:IContainer
Get the Namespace for creating a targetID suitable for use as the first parameter in subsequent calls toIContainer.connect(ID, IConnectContext)
. If this method returnsnull
, then it means thatnull
is expected as a valid parameter in subsequent calls toIContainer.connect(ID, IConnectContext)
. If this method returns a non-null
Namespace, then thetargetID
parameter inIContainer.connect(ID, IConnectContext)
must be non-null
instance created of the returned Namespace.- Specified by:
getConnectNamespace
in interfaceIContainer
- Returns:
- Namespace the namespace associated with subsequent calls to
IContainer.connect(ID, IConnectContext)
. Ifnull
, then thetargetID
instances passed toIContainer.connect(ID, IConnectContext)
may benull
. If notnull
, thentargetID
instances passed toIContainer.connect(ID, IConnectContext)
must be instances of the returned Namespace.
-
dispose
public void dispose()Description copied from interface:IContainer
Dispose this IContainer instance. The container instance will be made inactive after the completion of this method and will be unavailable for subsequent usage.- Specified by:
dispose
in interfaceIContainer
- Overrides:
dispose
in classAbstractContainer
-
getAdapter
Description copied from interface:IContainer
This specialization of IAdaptable.getAdapter() returns additional services supported by this container. A container that supports additional services over and above the methods onIContainer
should return them using this method. It is recommended that clients use this method rather than instanceof checks and downcasts to find out about the capabilities of a specific container.Typically, after obtaining an IContainer, a client would use this method as a means to obtain a more meaningful interface to the container. This interface may or may not extend IContainer. For example, a client could use the following code to obtain an instance of ISharedObjectContainer:
IContainer newContainer = ContainerFactory.createContainer(type); ISharedObjectContainer soContainer = (ISharedObjectContainer) newContainer .getAdapter(ISharedObjectContainer.class); if (soContainer == null) throw new ContainerCreateException(message);
Implementations of this method should delegate to
IAdapterManager.loadAdapter()
if the service cannot be provided directly to ensure extensibility by third-party plug-ins.- Specified by:
getAdapter
in interfaceorg.eclipse.core.runtime.IAdaptable
- Specified by:
getAdapter
in interfaceIContainer
- Overrides:
getAdapter
in classAbstractContainer
- Parameters:
adapter
- the service type to look up- Returns:
- the service instance castable to the given class, or
null
if this container does not support the given service
-
getGroupMemberIDs
Description copied from interface:IReliableContainer
Get the current membership of the joined group. This method will accurately report the current group membership of the connected group.- Specified by:
getGroupMemberIDs
in interfaceIReliableContainer
- Returns:
- ID[] the IDs of the current group membership
-
getConfig
-
isGroupManager
public abstract boolean isGroupManager()- Specified by:
isGroupManager
in interfaceIReliableContainer
- Returns:
- true if this IReliableContainer instance is in the 'manager' role for the group, false otherwise.
-
addNewRemoteMember
-
debug
-
traceStack
-
forward
- Throws:
IOException
-
forwardExcluding
protected abstract void forwardExcluding(ID from, ID excluding, ContainerMessage data) throws IOException - Throws:
IOException
-
forwardToRemote
- Throws:
IOException
-
serialize
- Throws:
IOException
-
getClassLoaderForContainer
-
getGroupMembershipLock
-
getMaxGroupMembers
protected int getMaxGroupMembers() -
getNextSequenceNumber
protected long getNextSequenceNumber() -
deserializeContainerMessage
- Throws:
IOException
-
printToSystemError
- Parameters:
message
- messaget
- exception to print to system error- Since:
- 2.0
-
getOtherMemberIDs
-
getReceiver
-
getMessageReceiver
- Returns:
- ISynchAsyncEventHandler message receiver
- Since:
- 4.7
-
handleAsynchIOException
-
handleCreateMessage
- Throws:
IOException
-
handleCreateResponseMessage
- Throws:
IOException
-
handleLeaveGroupMessage
- Parameters:
mess
- leave group message
-
handleUnidentifiedMessage
- Parameters:
mess
- message- Throws:
IOException
- not thrown by this implementation.
-
handleViewChangeMessage
- Throws:
IOException
-
isClosing
protected boolean isClosing() -
disconnect
-
handleLeave
-
moveFromLoadingToActive
-
validateContainerMessage
-
processAsynch
- Parameters:
event
- event- Throws:
IOException
- not thrown by this implementation.
-
getIDForConnection
-
processDisconnect
-
processSynch
- Throws:
IOException
-
queueContainerMessage
- Throws:
IOException
-
removeFromLoading
-
removeRemoteMember
-
sendCreateResponse
protected void sendCreateResponse(ID homeID, ID sharedObjectID, Throwable t, long identifier) throws IOException - Throws:
IOException
-
sendDispose
- Throws:
IOException
-
sendMessage
- Throws:
IOException
-
sendMessage
- Throws:
IOException
-
setMaxGroupMembers
protected void setMaxGroupMembers(int max) -
fireDelegateContainerEvent
- Parameters:
containerEvent
- container event