|  | <!doctype html public "-//w3c//dtd html 4.0 transitional//en"> | 
|  | <html> | 
|  | <head> | 
|  | <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> | 
|  | <title>ECF Shared Object Containers Documentation</title> | 
|  | <link rel="stylesheet" href="http://www.eclipse.org/default_style.css" type="text/css"> | 
|  | </head> | 
|  | <body bgcolor="#FFFFFF"> | 
|  | <a name="top"></a> | 
|  | </table> | 
|  | <table border=0 cellspacing=5 cellpadding=2 width="100%"> | 
|  | <tbody> | 
|  | <tr> | 
|  | <td width="69%" class="bannertext"> | 
|  | <font class="indextop style2">eclipse communication framework</font> | 
|  | <br><br> | 
|  | <font class="indexsub">an eclipse technology subproject</font> | 
|  | </td> | 
|  | <td width="31%"> | 
|  | <div align="center"> | 
|  | <img src="../images/Idea.jpg" width="120" height="86" hspace="50" align="middle"> | 
|  | </div> | 
|  | </td> | 
|  | </tr> | 
|  | </tbody> | 
|  | </table> | 
|  | <table border=0 cellspacing=5 cellpadding=2 width="100%" > | 
|  | <tr> | 
|  | <td align=left valign=top bgcolor="#0080C0"><b><font color="#FFFFFF" face="Arial,Helvetica"> | 
|  |  Shared Object Containers</font></b></td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td> | 
|  | <ul> | 
|  | <li><a href="#SharedObjectContainer Lifecycle">SharedObjectContainer Lifecycle</a></li> | 
|  | <li><a href="#ISharedObject Lifecycle">ISharedObject Lifecycle</a></li> | 
|  | <li><a href="org.eclipse.ecf.docs/api">ECF API (javadocs)</a></li> | 
|  | </ul> | 
|  | <p>   <strong>Note:</strong> standalone bookmark for the ECF API (javadocs) web pages. Copy and paste: | 
|  | http://www.eclipse.org/ecf/org.eclipse.ecf.docs/api</p> | 
|  | </td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td ALIGN=left VALIGN=top BGCOLOR="#0080C0"><b><font color="#FFFFFF" face="Arial,Helvetica"> | 
|  |  <a name="Shared Object Containers"></a>Shared Object Containers</font></b></td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td> | 
|  | An important sub-type of IContainer is the <b><a href="http://www.eclipse.org/ecf/org.eclipse.ecf.docs/api/org/eclipse/ecf/core/ISharedObjectContainer.html">ISharedObjectContainer</a></b>. | 
|  | ISharedObjectContainers provide a communications context for ISharedObject instances, which represent | 
|  | components that may be added and removed from the ISharedObjectContainer at runtime. | 
|  | <br><br> | 
|  | ISharedObjects represent communications components.  Components use | 
|  | container-provided messaging to implement their communications, but are | 
|  | completely free to implement whatever other functionality is required by the enclosing application. | 
|  | All a given component must do is implement the ISharedObject interface, and add | 
|  | itself/be added to some instance of a container. | 
|  | <br><br> | 
|  | ECF itself defines the basic required interfaces for SharedObjectContainers and SharedObjects.  ECF also | 
|  | provides implementations of various common communications protocols, in the form of specific type | 
|  | of containers, and various sorts of application-level communications (e.g conferencing or chat) via | 
|  | communications components implemented as ISharedObjects. | 
|  | <br><br> | 
|  | In some respects, the ECF container/shared object design resembles the design of other container | 
|  | architectures such a Servlet container.  The difference, however, is that the ECF | 
|  | container model is based upon a group model of communication rather than client/server, where a | 
|  | given shared object can communicate with one or many remote processes either | 
|  | asynchronously and/or synchronously with a single primitive. | 
|  | <br><a href="#top"><i>back to top</i></a> | 
|  | </td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td ALIGN=left VALIGN=top BGCOLOR="#0080C0"><b><font color="#FFFFFF" face="Arial,Helvetica"> | 
|  |  <a name="SharedObjectContainer Lifecycle"></a>SharedObjectContainer Lifecycle - DRAFT</font></b></td> | 
|  | </tr> | 
|  |  | 
|  |  | 
|  | <tr> | 
|  | <td> | 
|  | SharedObjectContainers can provide access to arbitrary communications protocols.  So, for example, | 
|  | communication with a | 
|  | remote instant messaging client, a server-based web service, or a distributed multi-point application | 
|  | can all be represented through an implementation of a SharedObjectContainer that understands the | 
|  | specific application-level protocol or protocols necessary to communicate with a given service or | 
|  | set of services. The primary role of the SharedObjectContainer is to | 
|  | provide SharedObjects with | 
|  | <ol><li>a consistent API for achieving secure access to a remote service</li><li>a | 
|  | consistent API for sending and receiving asynchronous messages to/from an arbitrary communications | 
|  | service</li><li>consistent information about message reliability and group membership | 
|  | </li></ol> | 
|  | All ECF containers must implement <a href="org.eclipse.ecf.docs/api/org/eclipse/ecf/core/ISharedObjectContainer.html">ISharedObjectContainer</a>.  ECF also defines an extensible factory for | 
|  | creating ISharedObjectContainer instances called <a href="org.eclipse.ecf.docs/api/org/eclipse/ecf/core/SharedObjectContainerFactory.html">SharedObjectContainerFactory</a>. | 
|  | <br><br> | 
|  | The lifecycle of a ISharedObjectContainer is typically as follows: | 
|  | <ol><li> | 
|  | An ISharedObjectContainer instance is created via SharedObjectContainerFactory.getDefault().createSharedObjectContainer() | 
|  | </li><li> | 
|  | ISharedObjects are created and added to the ISharedObjectContainer | 
|  | </li><li> | 
|  | The ISharedObjectContainer 'joins/connects' with a remote communications group via | 
|  | ISharedObjectContainer.joinGroup() | 
|  | </li><li> | 
|  | The ISharedObject instances created/added in step #2 above send asynchronous messages and receive asynchronous | 
|  | events from the remote services | 
|  | </li><li> | 
|  | ISharedObject implementation code presents/manages user interfaces, handles user input, keeps local state, | 
|  | communicates with replicas or external services, exposes/introduces local Eclipse-provided services to | 
|  | remotes, etc. | 
|  | </li><li> | 
|  | When the ISharedObjectContainer is no longer needed for communication, the ISharedObjectContainer can be | 
|  | directed to leave the group, or leave the group on its own. | 
|  | </li><li> | 
|  | When the ISharedObjectContainer is no longer needed at all the ISharedObjectContainer.dispose() method | 
|  | can be called to free any resources managed by the container or it's associated ISharedObjects. | 
|  | </li> | 
|  | </ol> | 
|  | <a href="#top"><i>back to top</i></a> | 
|  | </td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td ALIGN=left VALIGN=top BGCOLOR="#0080C0"><b><font color="#FFFFFF" face="Arial,Helvetica"> | 
|  |  <a name="ISharedObject Lifecycle"></a>ISharedObject Lifecycle - DRAFT</font></b></td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td> | 
|  | <h4>ISharedObject Construction</h4> | 
|  |  | 
|  | A SharedObject can be instantiated two ways: | 
|  |  | 
|  | <ol><li>By invoking one of the 'createSharedObject' methods of an ISharedObjectContainer. These methods require a SharedObjectDescription parameter (which among other things defines the class of object to instantiate). | 
|  | </li><li>By calling the constructor of an object class which implements the ISharedObject interface outside of any container. | 
|  | </li></ol> | 
|  |  | 
|  | <h4>Initialization</h4> | 
|  |  | 
|  | After it has been constructed the container to which it was added will invoke the ISharedObject.init method passing a non-null ISharedObjectConfig. ISharedObjects created outside of a container, will have their ISharedObject.init method invoked immediately as part of being added to the container. | 
|  | <br> | 
|  | Although not required, a typical implementation of 'init' will cache the ISharedObjectConfig for later usage by the ISharedObject: | 
|  | <br> | 
|  | <pre> | 
|  | public void init(ISharedObjectConfig config) throws | 
|  | SharedObjectInitException { | 
|  | this.config = config; | 
|  | ... | 
|  | } | 
|  | </pre> | 
|  | <b>Note</b>: The ISharedObjectConfig parameter provides the ISharedObject with access to it's | 
|  | container-provided context (<a href="org.eclipse.ecf.docs/api/org/eclipse/ecf/core/ISharedObjectContext.html">ISharedObjectContext</a>) via a call to ISharedObjectConfig.getContext(). | 
|  | The ISharedObject is not considered initialized until after the init method is completed, and | 
|  | therefore the ISharedObjectContext is not available until after the init method returns. | 
|  | <br><br> | 
|  | After init completes successfully, containers are required to immediately deliver an 'activated' event to the newly added | 
|  | ISharedObject via ISharedObject.handleEvent(SharedObjectActivatedEvent). | 
|  | <h4>Relationship to its container</h4> | 
|  | ISharedObjects can be created outside of a ISharedObjectContainer and then later added to it using the | 
|  | ISharedObjectContainer.getSharedObjectManager().addSharedObject() method. | 
|  | <br><br> | 
|  | The only semantics that an ISharedObjectContainer requires of ISharedObjects is that they implement the ISharedObject interface. | 
|  | <h4>Communications</h4> | 
|  | <h5>Sending Messages</h5> | 
|  | Eclipse ECF provides the ISharedObject with a simple asynchronous messaging API to send/receive | 
|  | arbitrary messages via the container-provided <a href="org.eclipse.ecf.docs/api/org/eclipse/ecf/core/ISharedObjectContext.html">ISharedObjectContext</a>.  On the | 
|  | ISharedObjectContext, are methods to send arbitrary messages to remotes (sendMessage).  For details see | 
|  | the methods on <a href="org.eclipse.ecf.docs/api/org/eclipse/ecf/core/ISharedObjectContext.html">ISharedObjectContext</a>. | 
|  | <br> | 
|  | <h5>Receiving Events</h5> | 
|  | Containers can asynchronously deliver messages to SharedObjects in the form of Events.  When a message is received | 
|  | for a given ISharedObject, the enclosing container wraps that message in the form of an event of a certain type, | 
|  | and calls that ISharedObject's handleEvent method with the Event instance. | 
|  | <h4>ISharedObject removal from a container</h4> | 
|  | When an ISharedObject is removed from a container (or removes itself), it's enclosing container calls the | 
|  | ISharedObject.dispose() method. | 
|  | <h4>Example Creation Code</h4> | 
|  | Here is a code snippet that creates a container and adds a single shared object to that container: | 
|  | <pre> | 
|  | ISharedObjectContainer container = SharedObjectContainerFactory.getDefault().createSharedObjectContainer('standalone'); | 
|  | ID newID = IDFactory.createStringID('foo'); | 
|  | SharedObjectDescription sd = new SharedObjectDescription(newID,TestSharedObject.class); | 
|  | container.getSharedObjectManager().createSharedObject(sd,null); | 
|  | </pre> | 
|  | Note this creates and adds to the container a ISharedObject instance of class "TestSharedObject".  The TestSharedObject | 
|  | null constructor is called, followed by a call to ISharedObject.init(ISharedObjectConfig) by the enclosing container. | 
|  | The container also sends an 'activated' event to the ISharedObject by calling its handleEvent method with | 
|  | an event of type org.eclipse.ecf.core.events.SharedObjectActivatedEvent. | 
|  | <br><a href="#top"><i>back to top</i></a> | 
|  | </td> | 
|  | </tr> | 
|  | </table> | 
|  |  | 
|  | </body> | 
|  | </html> |