org.eclipse.ecf.provider.generic
Class ClientSOContainer

java.lang.Object
  extended by org.eclipse.ecf.core.AbstractContainer
      extended by org.eclipse.ecf.provider.generic.SOContainer
          extended by org.eclipse.ecf.provider.generic.ClientSOContainer
All Implemented Interfaces:
org.eclipse.core.runtime.IAdaptable, IContainer, IIdentifiable, IReliableContainer, ISharedObjectContainer, ISharedObjectContainerClient
Direct Known Subclasses:
TCPClientSOContainer, XMPPContainer

public abstract class ClientSOContainer
extends SOContainer
implements ISharedObjectContainerClient


Field Summary
static byte CONNECTED
           
static byte CONNECTING
           
protected  ISynchAsynchConnection connection
           
protected  byte connectionState
           
protected  org.eclipse.ecf.provider.generic.ClientSOContainer.Lock connectLock
           
protected  IConnectInitiatorPolicy connectPolicy
           
static int DEFAULT_CONNECT_TIMEOUT
           
static byte DISCONNECTED
           
protected  ID remoteServerID
           
 
Fields inherited from class org.eclipse.ecf.provider.generic.SOContainer
config, DEFAULT_OBJECT_ARG_KEY, DEFAULT_OBJECT_ARGTYPES_KEY, groupManager, isClosing, loadingThreadGroup, policy, receiver, sharedObjectManager, sharedObjectMessageSerializer, sharedObjectThreadGroup
 
Constructor Summary
ClientSOContainer(ISharedObjectContainerConfig config)
           
 
Method Summary
 void connect(ID targetID, IConnectContext joinContext)
          Connect to a target remote process or process group.
protected  Callback[] createAuthorizationCallbacks()
           
protected abstract  ISynchAsynchConnection createConnection(ID targetID, java.lang.Object data)
          Create connection instance.
 void disconnect()
          Disconnect.
protected  void disconnect(java.lang.Throwable exception)
           
 void dispose()
          Dispose this IContainer instance.
protected  void forwardExcluding(ID from, ID excluding, byte msg, java.io.Serializable data)
           
protected  void forwardExcluding(ID from, ID excluding, ContainerMessage data)
           
protected  void forwardToRemote(ID from, ID to, ContainerMessage message)
           
protected  java.lang.Object getConnectData(ID remote, IConnectContext joinContext)
           
 ID getConnectedID()
          Get the target ID that this container instance has connected to.
protected  ISynchAsynchConnection getConnection()
           
protected  org.eclipse.ecf.provider.generic.ClientSOContainer.Lock getConnectLock()
           
protected  int getConnectTimeout()
           
protected  ID getIDForConnection(IAsynchConnection conn)
           
protected  java.io.Serializable getLeaveData(ID target)
           
protected  ID handleConnectResponse(ID orginalTarget, java.lang.Object serverData)
           
protected  void handleLeave(ID fromID, IConnection conn)
           
protected  void handleLeaveGroupMessage(ContainerMessage mess)
           
protected  void handleViewChangeMessage(ContainerMessage mess)
           
protected  boolean isConnected()
           
protected  boolean isConnecting()
           
 boolean isGroupManager()
           
protected  void processAsynch(AsynchEvent evt)
           
protected  void processDisconnect(DisconnectEvent evt)
           
protected  java.io.Serializable processSynch(SynchEvent evt)
           
protected  void queueContainerMessage(ContainerMessage message)
           
protected  void sendCreate(ID sharedObjectId, ID toContainerId, SharedObjectDescription sd)
           
protected  ID[] sendCreateMsg(ID toID, SharedObjectDescription createInfo)
           
protected  void sendCreateResponse(ID homeId, ID sharedObjectId, java.lang.Throwable t, long identifier)
           
protected  void sendCreateResponseSharedObjectMessage(ID toContainerId, ID fromSharedObject, java.lang.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(ContainerMessage data)
           
protected  void sendMessage(ID toContainerId, ID sharedObjectId, java.lang.Object message)
           
protected  void sendSharedObjectMessage(ID toContainerId, ID fromSharedObject, java.io.Serializable data)
           
 void setConnectInitiatorPolicy(IConnectInitiatorPolicy policy)
          Set the connect initiator policy handler for authentication policy
 
Methods inherited from class org.eclipse.ecf.provider.generic.SOContainer
addNewRemoteMember, addSharedObject0, addSharedObjectAndWait, addSharedObjectWrapper, addToLoading, checkRemoteCreate, createContainerPropertiesForSharedObject, createRemoteSharedObjectConfig, createRemoteSharedObjectContext, createRemoteSharedObjectWrapper, createSharedObjectConfig, createSharedObjectContext, createSharedObjectWrapper, debug, defaultDeserializeSharedObjectMessage, defaultSerializeSharedObjectMessage, deserializeContainerMessage, deserializeSharedObjectMessage, destroySharedObject, disconnect, fireDelegateContainerEvent, forward, getAdapter, getArgsFromProperties, getArgTypesFromProperties, getClassLoaderForContainer, getClassLoaderForSharedObject, getConfig, getConnectNamespace, getGroupMemberIDs, getGroupMembershipLock, getID, getMaxGroupMembers, getNewSharedObjectThread, getNextSequenceNumber, getOtherMemberIDs, getReceiver, getSharedObject, getSharedObjectIDs, getSharedObjectManager, getSharedObjectMessageSerializer, getSharedObjectWrapper, handleAsynchIOException, handleCreateMessage, handleCreateResponseMessage, handleSharedObjectDisposeMessage, handleSharedObjectMessage, handleUndeliveredSharedObjectMessage, handleUnidentifiedMessage, isClosing, load, moveFromLoadingToActive, notifySharedObjectActivated, notifySharedObjectDeactivated, printToSystemError, removeFromLoading, removeRemoteMember, removeSharedObject, serialize, serializeSharedObjectMessage, setMaxGroupMembers, setRemoteAddPolicy, setSharedObjectMessageSerializer, traceStack, validateContainerMessage, verifySharedObjectMessageTarget, verifyToIDForSharedObjectMessage
 
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 Detail

DEFAULT_CONNECT_TIMEOUT

public static final int DEFAULT_CONNECT_TIMEOUT
See Also:
Constant Field Values

connection

protected ISynchAsynchConnection connection

remoteServerID

protected ID remoteServerID

connectionState

protected byte connectionState

connectPolicy

protected IConnectInitiatorPolicy connectPolicy

DISCONNECTED

public static final byte DISCONNECTED
See Also:
Constant Field Values

CONNECTING

public static final byte CONNECTING
See Also:
Constant Field Values

CONNECTED

public static final byte CONNECTED
See Also:
Constant Field Values

connectLock

protected org.eclipse.ecf.provider.generic.ClientSOContainer.Lock connectLock
Constructor Detail

ClientSOContainer

public ClientSOContainer(ISharedObjectContainerConfig config)
Method Detail

getConnectLock

protected org.eclipse.ecf.provider.generic.ClientSOContainer.Lock getConnectLock()

getConnection

protected ISynchAsynchConnection getConnection()

setConnectInitiatorPolicy

public void setConnectInitiatorPolicy(IConnectInitiatorPolicy policy)
Description copied from interface: ISharedObjectContainerClient
Set the connect initiator policy handler for authentication policy

Specified by:
setConnectInitiatorPolicy in interface ISharedObjectContainerClient
Parameters:
policy - the policy to use

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 interface IContainer
Overrides:
dispose in class SOContainer

isGroupManager

public final boolean isGroupManager()
Specified by:
isGroupManager in interface IReliableContainer
Specified by:
isGroupManager in class SOContainer
Returns:
true if this IReliableContainer instance is in the 'manager' role for the group, false otherwise.

getConnectedID

public ID 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 interface IContainer
Specified by:
getConnectedID in class SOContainer
Returns:
ID of the target we are connected to. Returns null if container not connected.

connect

public void connect(ID targetID,
                    IConnectContext joinContext)
             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 interface IContainer
Specified by:
connect in class SOContainer
Parameters:
targetID - the ID of the remote server or group to connect to. See IContainer.getConnectNamespace() for a explanation of the constraints upon this parameter.
joinContext - any required context to allow this container to authenticate. May be null 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.

createAuthorizationCallbacks

protected Callback[] createAuthorizationCallbacks()

getConnectData

protected java.lang.Object getConnectData(ID remote,
                                          IConnectContext joinContext)
                                   throws java.io.IOException,
                                          UnsupportedCallbackException
Throws:
java.io.IOException
UnsupportedCallbackException

getConnectTimeout

protected int getConnectTimeout()

handleLeaveGroupMessage

protected void handleLeaveGroupMessage(ContainerMessage mess)
Specified by:
handleLeaveGroupMessage in class SOContainer

handleViewChangeMessage

protected void handleViewChangeMessage(ContainerMessage mess)
                                throws java.io.IOException
Specified by:
handleViewChangeMessage in class SOContainer
Throws:
java.io.IOException

forwardExcluding

protected void forwardExcluding(ID from,
                                ID excluding,
                                ContainerMessage data)
                         throws java.io.IOException
Specified by:
forwardExcluding in class SOContainer
Parameters:
from -
excluding -
data -
Throws:
java.io.IOException - not thrown by this implementation.

getLeaveData

protected java.io.Serializable getLeaveData(ID target)

disconnect

public 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 return null.

Specified by:
disconnect in interface IContainer
Specified by:
disconnect in class SOContainer

createConnection

protected abstract ISynchAsynchConnection createConnection(ID targetID,
                                                           java.lang.Object data)
                                                    throws ConnectionCreateException
Create connection instance. This method is called by connect(ID, IConnectContext). Following a return from this method, the new ISynchAsynchConnection instance's IConnection.connect(ID, Object, int) method is subsequently called.

Parameters:
targetID - the targetID to connect to. The value is the same as that passed into connect(ID, IConnectContext).
data - and data provided to the connection via the IConnectContext passed into the connect(ID, IConnectContext) call.
Returns:
ISynchAsynchConnection a connection instance. Will not be null.
Throws:
ConnectionCreateException - thrown if the connection cannot be created.

queueContainerMessage

protected void queueContainerMessage(ContainerMessage message)
                              throws java.io.IOException
Specified by:
queueContainerMessage in class SOContainer
Throws:
java.io.IOException

forwardExcluding

protected void forwardExcluding(ID from,
                                ID excluding,
                                byte msg,
                                java.io.Serializable data)
                         throws java.io.IOException
Parameters:
from -
excluding -
msg -
data -
Throws:
java.io.IOException - not thrown by this implementation.

forwardToRemote

protected void forwardToRemote(ID from,
                               ID to,
                               ContainerMessage message)
                        throws java.io.IOException
Specified by:
forwardToRemote in class SOContainer
Parameters:
from -
to -
message -
Throws:
java.io.IOException - not thrown by this implementation.

getIDForConnection

protected ID getIDForConnection(IAsynchConnection conn)
Specified by:
getIDForConnection in class SOContainer

handleLeave

protected void handleLeave(ID fromID,
                           IConnection conn)
Overrides:
handleLeave in class SOContainer

sendMessage

protected void sendMessage(ContainerMessage data)
                    throws java.io.IOException
Overrides:
sendMessage in class SOContainer
Throws:
java.io.IOException

sendCreateMsg

protected ID[] sendCreateMsg(ID toID,
                             SharedObjectDescription createInfo)
                      throws java.io.IOException
Throws:
java.io.IOException

sendCreate

protected void sendCreate(ID sharedObjectId,
                          ID toContainerId,
                          SharedObjectDescription sd)
                   throws java.io.IOException
Overrides:
sendCreate in class SOContainer
Throws:
java.io.IOException

sendCreateResponse

protected void sendCreateResponse(ID homeId,
                                  ID sharedObjectId,
                                  java.lang.Throwable t,
                                  long identifier)
                           throws java.io.IOException
Overrides:
sendCreateResponse in class SOContainer
Throws:
java.io.IOException

sendCreateResponseSharedObjectMessage

protected void sendCreateResponseSharedObjectMessage(ID toContainerId,
                                                     ID fromSharedObject,
                                                     java.lang.Throwable t,
                                                     long ident)
                                              throws java.io.IOException
Overrides:
sendCreateResponseSharedObjectMessage in class SOContainer
Throws:
java.io.IOException

sendCreateSharedObjectMessage

protected ID[] sendCreateSharedObjectMessage(ID toContainerId,
                                             SharedObjectDescription sd)
                                      throws java.io.IOException
Overrides:
sendCreateSharedObjectMessage in class SOContainer
Throws:
java.io.IOException

sendDispose

protected void sendDispose(ID toContainerId,
                           ID sharedObjectId)
                    throws java.io.IOException
Overrides:
sendDispose in class SOContainer
Throws:
java.io.IOException

sendDisposeSharedObjectMessage

protected void sendDisposeSharedObjectMessage(ID toContainerId,
                                              ID fromSharedObject)
                                       throws java.io.IOException
Overrides:
sendDisposeSharedObjectMessage in class SOContainer
Throws:
java.io.IOException

sendMessage

protected void sendMessage(ID toContainerId,
                           ID sharedObjectId,
                           java.lang.Object message)
                    throws java.io.IOException
Overrides:
sendMessage in class SOContainer
Throws:
java.io.IOException

sendSharedObjectMessage

protected void sendSharedObjectMessage(ID toContainerId,
                                       ID fromSharedObject,
                                       java.io.Serializable data)
                                throws java.io.IOException
Overrides:
sendSharedObjectMessage in class SOContainer
Throws:
java.io.IOException

disconnect

protected void disconnect(java.lang.Throwable exception)

processDisconnect

protected void processDisconnect(DisconnectEvent evt)
Specified by:
processDisconnect in class SOContainer

processAsynch

protected void processAsynch(AsynchEvent evt)
                      throws java.io.IOException
Overrides:
processAsynch in class SOContainer
Throws:
java.io.IOException - not thrown by this implementation.

processSynch

protected java.io.Serializable processSynch(SynchEvent evt)
                                     throws java.io.IOException
Overrides:
processSynch in class SOContainer
Throws:
java.io.IOException

isConnected

protected boolean isConnected()

isConnecting

protected boolean isConnecting()

handleConnectResponse

protected ID handleConnectResponse(ID orginalTarget,
                                   java.lang.Object serverData)
                            throws java.lang.Exception
Throws:
java.lang.Exception