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

public abstract class SOContainer extends AbstractContainer implements ISharedObjectContainer
  • Field Details

    • DEFAULT_OBJECT_ARG_KEY

      public static final String DEFAULT_OBJECT_ARG_KEY
    • DEFAULT_OBJECT_ARGTYPES_KEY

      public static final String DEFAULT_OBJECT_ARGTYPES_KEY
    • config

      protected ISharedObjectContainerConfig config
    • groupManager

      protected org.eclipse.ecf.provider.generic.SOContainerGMM groupManager
    • isClosing

      protected boolean isClosing
    • loadingThreadGroup

      protected ThreadGroup loadingThreadGroup
    • sharedObjectManager

      protected SOManager sharedObjectManager
    • policy

      protected ISharedObjectPolicy policy
    • sharedObjectThreadGroup

      protected ThreadGroup sharedObjectThreadGroup
    • sharedObjectMessageSerializer

      protected ISharedObjectMessageSerializer sharedObjectMessageSerializer
      Since:
      2.0
    • receiver

      protected ISynchAsynchEventHandler receiver
  • Constructor Details

  • Method Details

    • setSharedObjectMessageSerializer

      public void setSharedObjectMessageSerializer(ISharedObjectMessageSerializer serializer)
      Description copied from interface: ISharedObjectContainer

      Set the shared object message serializer. The serializer should not be null.

      Note that users of this method should guarantee that their are not pending messages to be sent/received...typically by only calling this method prior to connecting/being connected to from remote containers.

      Note also that the serializer must perform well when it's methods are called, to prevent negatively impacting overall container messaging performance.

      Specified by:
      setSharedObjectMessageSerializer in interface ISharedObjectContainer
      Since:
      2.0
    • getSharedObjectMessageSerializer

      protected ISharedObjectMessageSerializer getSharedObjectMessageSerializer()
      Returns:
      ISharedObjectMessageSerializer the shared object message serializer
      Since:
      2.0
    • getID

      public ID getID()
      Description copied from interface: IIdentifiable
      Return the ID for this 'identifiable' object. The returned ID should be unique within its namespace. May return null.
      Specified by:
      getID in interface IIdentifiable
      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 interface IContainer
      Parameters:
      groupID - the ID of the remote server or group to connect to. See IContainer.getConnectNamespace() for a explanation of the constraints upon this parameter.
      connectContext - 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.
    • getConnectedID

      public abstract 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
      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 return null.
      Specified by:
      disconnect in interface IContainer
    • getConnectNamespace

      public Namespace getConnectNamespace()
      Description copied from interface: IContainer
      Get the Namespace for creating a targetID suitable for use as the first parameter in subsequent calls to IContainer.connect(ID, IConnectContext). If this method returns null, then it means that null is expected as a valid parameter in subsequent calls to IContainer.connect(ID, IConnectContext). If this method returns a non-null Namespace, then the targetID parameter in IContainer.connect(ID, IConnectContext) must be non-null instance created of the returned Namespace.
      Specified by:
      getConnectNamespace in interface IContainer
      Returns:
      Namespace the namespace associated with subsequent calls to IContainer.connect(ID, IConnectContext). If null, then the targetID instances passed to IContainer.connect(ID, IConnectContext) may be null. If not null, then targetID instances passed to IContainer.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 interface IContainer
      Overrides:
      dispose in class AbstractContainer
    • getAdapter

      public Object getAdapter(Class adapter)
      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 on IContainer 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 interface org.eclipse.core.runtime.IAdaptable
      Specified by:
      getAdapter in interface IContainer
      Overrides:
      getAdapter in class AbstractContainer
      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
    • getSharedObjectManager

      public ISharedObjectManager getSharedObjectManager()
      Description copied from interface: ISharedObjectContainer
      Get SharedObjectManager for this container
      Specified by:
      getSharedObjectManager in interface ISharedObjectContainer
      Returns:
      ISharedObjectManager for this container instance
    • getGroupMemberIDs

      public ID[] 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 interface IReliableContainer
      Returns:
      ID[] the IDs of the current group membership
    • getConfig

      public ISharedObjectContainerConfig getConfig()
    • isGroupManager

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

      protected void setRemoteAddPolicy(ISharedObjectPolicy policy)
    • addNewRemoteMember

      protected boolean addNewRemoteMember(ID memberID, Object data)
    • addSharedObject0

      protected ISharedObjectContainerTransaction addSharedObject0(ID id, ISharedObject s, Map props) throws Exception
      Throws:
      Exception
    • addSharedObjectAndWait

      protected void addSharedObjectAndWait(ID id, ISharedObject s, Map properties) throws Exception
      Throws:
      Exception
    • addSharedObjectWrapper

      protected ISharedObjectContainerTransaction addSharedObjectWrapper(SOWrapper wrapper) throws Exception
      Throws:
      Exception
    • addToLoading

      protected boolean addToLoading(org.eclipse.ecf.provider.generic.SOContainer.LoadingSharedObject lso)
    • checkRemoteCreate

      protected Object checkRemoteCreate(ID fromID, ID toID, ReplicaSharedObjectDescription desc) throws Exception
      Check remote creation of shared objects. This method is called by the remote shared object creation message handler, to verify that the shared object from container 'fromID' to container 'toID' with description 'desc' is to be allowed to be created within the current container. If this method throws, a failure (and exception will be sent back to caller If this method returns null, the create message is ignored. If this method returns a non-null object, the creation is allowed to proceed. The default implementation is to return a non-null object
      Parameters:
      fromID - the ID of the container sending us this create request
      toID - the ID (or null) of the container intended to receive this request
      desc - the SharedObjectDescription that describes the shared object to be created
      Returns:
      Object null if the create message is to be ignored, non-null if the creation should continue
      Throws:
      Exception - may throw any Exception to communicate back (via sendCreateResponse) to the sender that the creation has failed
    • debug

      protected void debug(String msg)
    • traceStack

      protected void traceStack(String msg, Throwable e)
    • destroySharedObject

      protected boolean destroySharedObject(ID sharedObjectID)
    • forward

      protected final void forward(ID fromID, ID toID, ContainerMessage data) throws IOException
      Throws:
      IOException
    • forwardExcluding

      protected abstract void forwardExcluding(ID from, ID excluding, ContainerMessage data) throws IOException
      Throws:
      IOException
    • forwardToRemote

      protected abstract void forwardToRemote(ID from, ID to, ContainerMessage data) throws IOException
      Throws:
      IOException
    • getArgsFromProperties

      protected Object[] getArgsFromProperties(SharedObjectDescription sd)
      Parameters:
      sd - shared object description
      Returns:
      Object[] arguments from the shared object description properties
    • getArgTypesFromProperties

      protected String[] getArgTypesFromProperties(SharedObjectDescription sd)
      Parameters:
      sd - shared object description
      Returns:
      String[] arguments types from shared object description properties
    • serialize

      public static byte[] serialize(Serializable obj) throws IOException
      Throws:
      IOException
    • getClassLoaderForContainer

      protected ClassLoader getClassLoaderForContainer()
    • getClassLoaderForSharedObject

      protected ClassLoader getClassLoaderForSharedObject(SharedObjectDescription sd)
      Parameters:
      sd - shared object description
      Returns:
      ClassLoader classloader to used for given shared object description
    • getGroupMembershipLock

      protected Object getGroupMembershipLock()
    • getMaxGroupMembers

      protected int getMaxGroupMembers()
    • getNewSharedObjectThread

      protected Thread getNewSharedObjectThread(ID sharedObjectID, Runnable runnable)
    • getNextSequenceNumber

      protected long getNextSequenceNumber()
    • deserializeContainerMessage

      public static ContainerMessage deserializeContainerMessage(byte[] bytes) throws IOException
      Throws:
      IOException
    • printToSystemError

      protected static void printToSystemError(String message, Throwable t)
      Parameters:
      message - message
      t - exception to print to system error
      Since:
      2.0
    • getOtherMemberIDs

      protected ID[] getOtherMemberIDs()
    • getReceiver

      protected ISynchAsynchEventHandler getReceiver()
    • getMessageReceiver

      public ISynchAsynchEventHandler getMessageReceiver()
      Returns:
      ISynchAsyncEventHandler message receiver
      Since:
      4.7
    • getSharedObject

      protected ISharedObject getSharedObject(ID id)
    • getSharedObjectIDs

      protected ID[] getSharedObjectIDs()
    • getSharedObjectWrapper

      protected SOWrapper getSharedObjectWrapper(ID id)
    • handleAsynchIOException

      protected void handleAsynchIOException(IOException except, AsynchEvent e)
    • handleCreateMessage

      protected void handleCreateMessage(ContainerMessage mess) throws IOException
      Throws:
      IOException
    • handleCreateResponseMessage

      protected void handleCreateResponseMessage(ContainerMessage mess) throws IOException
      Throws:
      IOException
    • handleLeaveGroupMessage

      protected abstract void handleLeaveGroupMessage(ContainerMessage mess)
      Parameters:
      mess - leave group message
    • verifySharedObjectMessageTarget

      protected boolean verifySharedObjectMessageTarget(ID containerID)
      Parameters:
      containerID - containerID
      Returns:
      boolean true if verified, false otherwise
      Since:
      4.0
    • handleSharedObjectDisposeMessage

      protected void handleSharedObjectDisposeMessage(ContainerMessage mess) throws IOException
      Throws:
      IOException
    • verifyToIDForSharedObjectMessage

      protected boolean verifyToIDForSharedObjectMessage(ID toID)
    • handleSharedObjectMessage

      protected void handleSharedObjectMessage(ContainerMessage mess) throws IOException
      Throws:
      IOException
    • handleUndeliveredSharedObjectMessage

      protected void handleUndeliveredSharedObjectMessage(ContainerMessage.SharedObjectMessage resp)
      Parameters:
      resp - response message
      Since:
      4.0
    • handleUnidentifiedMessage

      protected void handleUnidentifiedMessage(ContainerMessage mess) throws IOException
      Parameters:
      mess - message
      Throws:
      IOException - not thrown by this implementation.
    • handleViewChangeMessage

      protected abstract void handleViewChangeMessage(ContainerMessage mess) throws IOException
      Throws:
      IOException
    • isClosing

      protected boolean isClosing()
    • disconnect

      protected void disconnect(IConnection conn)
    • load

      protected ISharedObject load(SharedObjectDescription sd) throws Exception
      Throws:
      Exception
    • createSharedObjectConfig

      protected SOConfig createSharedObjectConfig(ID id, ISharedObject obj, Map props) throws ECFException
      Parameters:
      id - id
      obj - obj
      props - props
      Returns:
      SOConfig a non-null instance.
      Throws:
      ECFException - not thrown by this implementation.
    • createRemoteSharedObjectConfig

      protected SOConfig createRemoteSharedObjectConfig(ID fromID, ReplicaSharedObjectDescription sd, ISharedObject obj)
    • createSharedObjectContext

      protected SOContext createSharedObjectContext(SOConfig soconfig, IQueueEnqueue queue)
    • createRemoteSharedObjectContext

      protected SOContext createRemoteSharedObjectContext(SOConfig soconfig, IQueueEnqueue queue)
    • createSharedObjectWrapper

      protected SOWrapper createSharedObjectWrapper(ID id, ISharedObject s, Map props) throws ECFException
      Throws:
      ECFException
    • createRemoteSharedObjectWrapper

      protected SOWrapper createRemoteSharedObjectWrapper(ID fromID, ReplicaSharedObjectDescription sd, ISharedObject s)
    • handleLeave

      protected void handleLeave(ID leftID, IConnection conn)
    • moveFromLoadingToActive

      protected void moveFromLoadingToActive(SOWrapper wrap)
    • notifySharedObjectActivated

      protected void notifySharedObjectActivated(ID sharedObjectID)
    • notifySharedObjectDeactivated

      protected void notifySharedObjectDeactivated(ID sharedObjectID)
    • validateContainerMessage

      protected ContainerMessage validateContainerMessage(Object mess)
    • processAsynch

      protected void processAsynch(AsynchEvent event) throws IOException
      Parameters:
      event - event
      Throws:
      IOException - not thrown by this implementation.
    • getIDForConnection

      protected abstract ID getIDForConnection(IAsynchConnection connection)
    • processDisconnect

      protected abstract void processDisconnect(DisconnectEvent event)
    • processSynch

      protected Serializable processSynch(SynchEvent e) throws IOException
      Throws:
      IOException
    • queueContainerMessage

      protected abstract void queueContainerMessage(ContainerMessage mess) throws IOException
      Throws:
      IOException
    • removeFromLoading

      protected void removeFromLoading(ID id)
    • removeRemoteMember

      protected boolean removeRemoteMember(ID remoteMember)
    • removeSharedObject

      protected ISharedObject removeSharedObject(ID id)
    • sendCreate

      protected void sendCreate(ID sharedObjectID, ID toContainerID, SharedObjectDescription sd) throws IOException
      Throws:
      IOException
    • sendCreateResponse

      protected void sendCreateResponse(ID homeID, ID sharedObjectID, Throwable t, long identifier) throws IOException
      Throws:
      IOException
    • sendCreateResponseSharedObjectMessage

      protected void sendCreateResponseSharedObjectMessage(ID toContainerID, ID fromSharedObject, Throwable t, long ident) throws IOException
      Throws:
      IOException
    • sendCreateSharedObjectMessage

      protected ID[] sendCreateSharedObjectMessage(ID toContainerID, SharedObjectDescription sd) throws IOException
      Throws:
      IOException
    • createContainerPropertiesForSharedObject

      protected Map createContainerPropertiesForSharedObject(ID sharedObjectID)
    • sendDispose

      protected void sendDispose(ID toContainerID, ID sharedObjectID) throws IOException
      Throws:
      IOException
    • sendDisposeSharedObjectMessage

      protected void sendDisposeSharedObjectMessage(ID toContainerID, ID fromSharedObject) throws IOException
      Throws:
      IOException
    • sendMessage

      protected void sendMessage(ContainerMessage data) throws IOException
      Throws:
      IOException
    • serializeSharedObjectMessage

      protected byte[] serializeSharedObjectMessage(ID sharedObjectID, Object message) throws IOException
      Throws:
      IOException
    • defaultSerializeSharedObjectMessage

      protected byte[] defaultSerializeSharedObjectMessage(ID sharedObjectID, Object message) throws IOException
      Parameters:
      sharedObjectID - shared object ID
      message - message
      Returns:
      byte[] serialized message
      Throws:
      IOException - if some problem serializing
      Since:
      2.0
    • defaultDeserializeSharedObjectMessage

      protected Object defaultDeserializeSharedObjectMessage(byte[] bytes) throws IOException, ClassNotFoundException
      Parameters:
      bytes - data to deserialized
      Returns:
      Object the deserialized shared object message
      Throws:
      IOException - if deserialization cannot be done
      ClassNotFoundException - if deserialization cannot be done
      Since:
      2.0
    • deserializeSharedObjectMessage

      protected Object deserializeSharedObjectMessage(byte[] bytes) throws IOException, ClassNotFoundException
      Throws:
      IOException
      ClassNotFoundException
    • sendMessage

      protected void sendMessage(ID toContainerID, ID sharedObjectID, Object message) throws IOException
      Throws:
      IOException
    • sendSharedObjectMessage

      protected void sendSharedObjectMessage(ID toContainerID, ID fromSharedObject, Serializable data) throws IOException
      Throws:
      IOException
    • setMaxGroupMembers

      protected void setMaxGroupMembers(int max)
    • fireDelegateContainerEvent

      protected void fireDelegateContainerEvent(IContainerEvent containerEvent)
      Parameters:
      containerEvent - container event