Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "ECF/Servers"

< ECF
(Setting up an ECF Generic Server with Equinox (ECF version 1.0.0M6 or newer))
 
(31 intermediate revisions by 11 users not shown)
Line 1: Line 1:
 
==ECF Generic Server==
 
==ECF Generic Server==
[[Eclipse Communication Framework Project|ECF]] is currently using the [http://www.eclipse.org/equinox/server/http_in_container.php Equinox Servlet Incubator] to run and support the example collab application running on the 'ECF generic' provider.
 
  
===Connecting to the ECF Generic Server===
+
ECF Generic Servers can now be created, started, and managed dynamically using the [http://download.eclipse.org/rt/ecf/3.5Test/javadoc/org/eclipse/ecf/server/generic/IGenericServerContainerGroupFactory.html IGenericServerContainerGroupFactory] service started in the bundle activator of the org.eclipse.ecf.server.generic bundle.
#[http://www.eclipse.org/ecf/downloads.php Download] and install the ECF SDK.
+
#Right-click on a project within your workspace.
+
#Choose 'ECF' -> 'Connect Project...' from the popup menu.
+
#Select the 'ECF generic' provider from the list.
+
#Use '''ecftcp://ecf.eclipse.org:3282/server''' as the connect URI.
+
#Choose a nickname and then select the 'OK' button.
+
  
===Starting an ECF Generic Server as Eclipse Application (ECF 1.0.100 ETA: 7/13/2007)===
+
Here some example code for creating/starting a simple ECF generic server
 
+
It's now (7/5/2007) possible to start and configure an ECF Generic Server as an Eclipse Application.
+
  
 
<pre>
 
<pre>
eclipse.exe -application org.eclipse.ecf.provider.AppGenericServer
+
// Get generic server container group factory service...e.g. via declarative service injection
</pre>
+
// or via ServiceTracker
This will start a server with hostname=localhost, port=3282,
+
IGenericServerContainerGroupFactory genericServerFactory = <get IGenericServerContainerGroupFactory service>;
groupname=server...i.e. id=ecftcp://localhost:3282/server.  The output upon
+
startup looks like this:
+
  
<pre>
+
// Create generic server container group for localhost, listen port=3282
Putting server localhost:3282 on the air...
+
IGenericServerContainerGroup containerGroup = genericServerFactory.createContainerGroup("localhost",3282);
  Creating container with id=ecftcp://localhost:3282/server keepAlive=30000
+
GenericServer localhost:3282 on the air.
+
</pre>
+
  
It's also possible to provide the port groupname hostname and keepAlive (ms)
+
// Create an ECF container within the container group, and give it path="/server"
For example:
+
// The resulting container's ID will be: ecftcp://localhost:3282/server
 +
containerGroup.createContainer("/server");
  
<pre>
+
// start listening for client connections
eclipse.exe -application org.eclipse.ecf.provider.AppGenericServer 3285 mygroup ecf.eclipse.org 20000
+
containerGroup.startListening();
 
+
Putting server ecf.eclipse.org:3285 on the air...
+
  Creating container with id=ecftcp://ecf.eclipse.org:3285/mygroup
+
keepAlive=20000
+
GenericServer ecf.eclipse.org:3285 on the air.
+
 
</pre>
 
</pre>
  
or
+
{{ECF}}
 
+
<pre>
+
eclipse.exe -application org.eclipse.ecf.provider.AppGenericServer 3333
+
 
+
Putting server localhost:3333 on the air...
+
  Creating container with id=ecftcp://localhost:3333/server keepAlive=30000
+
GenericServer localhost:3333 on the air.
+
</pre>
+
 
+
====Starting from Equinox Console====
+
 
+
It's possible to start multiple additional instances of the GenericServer application from within the Equinox Console.  For example:
+
 
+
<pre>
+
java -Declipse.application.registerDescriptors=true -jar org.eclipse.osgi -console -noExit
+
osgi> startApp org.eclipse.ecf.provider.GenericServer 3333
+
osgi> startApp org.eclipse.ecf.provider.GenericServer 3285 mygroup ecf.eclipse.org 20000
+
</pre>
+
 
+
This can be used in addition to, or instead of, the -application argument. Note that with the -application argument, if that main server/application closes, then all other running apps are closed. If you want the VM to remain running, supply -noExit and run individual instances as above.
+
 
+
''NB the reason for 'AppGenericServer' and 'GenericServer' is due to a workaround for a [https://bugs.eclipse.org/bugs/show_bug.cgi?id=193596 bug in Equinox 3.3.0]. If this is fixed and released in Equinox 3.3.1, then you'll be able to use the same name for both -application and startApp equivalents.''
+
 
+
====Server Configuration File====
+
 
+
Another way to start a number of servers and groups is to create a file with
+
the server configuration...for example:
+
<pre>
+
<server>
+
        <connector protocol="ecftcp"  hostname="localhost" port="3282" timeout="30000">
+
            <group name="server"/>
+
            <group name="foobar"/>
+
        </connector>
+
        <connector protocol="ecftcp"  hostname="localhost" port="3283" timeout="30000">
+
            <group name="server"/>
+
            <group name="foobar"/>
+
        </connector>
+
</server>
+
</pre>
+
 
+
If this content is in file ./server.xml
+
Then the command line would be:
+
 
+
<pre>
+
eclipse.exe -application org.eclipse.ecf.provider.AppGenericServer -config server.xml
+
</pre>
+
And the output would be:
+
<pre>
+
Putting server localhost:3282 on the air...
+
  Creating container with id=ecftcp://localhost:3282/server keepAlive=30000
+
  Creating container with id=ecftcp://localhost:3282/foobar keepAlive=30000
+
GenericServer localhost:3282 on the air.
+
Putting server localhost:3283 on the air...
+
  Creating container with id=ecftcp://localhost:3283/server keepAlive=30000
+
  Creating container with id=ecftcp://localhost:3283/foobar keepAlive=30000
+
GenericServer localhost:3283 on the air.
+
</pre>
+
 
+
===Setting up an ECF Generic Server with Equinox===
+
 
+
With the following enhancement: [https://bugs.eclipse.org/bugs/show_bug.cgi?id=112890 #112890], it's
+
possible to configure an ECF generic server by providing a plugin with an extension for the
+
<b>org.eclipse.ecf.server.generic.configure</b> extension point.
+
 
+
<ol>
+
<li>Download the [http://download.eclipse.org/eclipse/equinox/ Equinox SDK 3.3M6 (or newer)] Note the location of the '''<equinoxhome>/plugins''' directory.
+
</li>
+
<li>Install the ECF SDK bundles to the '''<equinoxhome>/plugins''' directory.  Get the ECF SDK [http://www.eclipse.org/ecf/downloads.php here].
+
</li>
+
<li>
+
ECF server requires the Eclipse bundle: <b>org.eclipse.core.jobs</b>,which is not yet part of the Equinox distribution.  The jobs bundle can be found in the <b><eclipsehome>/plugins</b> directory of an Eclipse installation, and has a name similar to:  org.eclipse.core.jobs_3.3.0.v20070423.jar (the 3.3.0.v20070423 may be different).  You should <b>copy</b> this jar into the '''<equinoxhome>/plugins''' directory.  Make sure you do not remove or rename the original copy of this bundle as it will disable that copy of Eclipse.
+
</li>
+
 
+
<li>
+
Create a new plugin, and add the following extension to this new plugin:
+
<pre>
+
  <extension
+
        point="org.eclipse.ecf.server.generic.configuration">
+
      <connector
+
            hostname="localhost"
+
            keepAlive="30000"
+
            port="3283">
+
        <group
+
              name="server">
+
        </group>
+
      </connector>
+
  </extension>
+
</pre>
+
 
+
With the above, the server id would be 'ecftcp://localhost:3283/server'.
+
 
+
Change the values of 'hostname', 'keepAlive', 'port' for the connector, and add groups as desired/appropriate.  For example:
+
<pre>
+
  <extension
+
        point="org.eclipse.ecf.server.generic.configuration">
+
      <connector
+
            hostname="ecf.eclipse.org"
+
            keepAlive="20000"
+
            port="9999">
+
        <group
+
              name="groupone">
+
        </group>
+
        <group
+
              name="grouptwo">
+
        </group>
+
      </connector>
+
  </extension>
+
</pre>
+
 
+
With the above, the ids for the two groups would be 'ecftcp://ecf.eclipse.org:9999/groupone' and 'ecftcp://ecf.eclipse.org:9999/grouptwo'.
+
</li>
+
<li>
+
Build and deploy this new plugin to server plugins directory, along with all the other ECF bundles.
+
</li>
+
<li>Start the <b>org.eclipse.ecf.server.generic</b> bundle.  This can be done via the server console (with ''''start org.eclipse.ecf.server.generic'''') or can be setup to start automatically via the '''<appserverhome>webapps/bridge/WEB-INF/platform/configuration/config.ini''' file.  Which is chosen
+
is dependent upon how one has setup the [http://www.eclipse.org/equinox/server/ Equinox server].
+
</li>
+
</ol>
+
 
+
===Setting up an ECF Generic Server with Equinox (prior to version 1.0.0M6)===
+
 
+
<ol>
+
<li>Follow instructions for setting up the [http://www.eclipse.org/equinox/server/http_in_container.php Equinox Servlet Incubator].  Note the location of the '''<appserverhome>/webapps/bridge/WEB-INF/platform/plugins''' directory.
+
</li>
+
<li><b>
+
NOTE: ECF server requires some of the bundles that come from the Equinox core (containing org.eclipse.core.runtime packages and and others).  See [http://download.eclipse.org/eclipse/equinox/ Equinox download page] for these bundles.</b>
+
</li>
+
<li>Download ECF plugins:  [http://www.eclipse.org/downloads/download.php?file=/technology/ecf/org.eclipse.ecf.sdk-0.9.6.S20070113.zip  ECF 0.9.6] or [http://www.eclipse.org/downloads/download.php ECF Download Page]
+
#Copy the ECF plugins into the '''<appserverhome>/webapps/bridge/WEB-INF/platform/plugins''' directory created above.
+
</li>
+
<li>Edit the '''conf/server.xml''' in '''org.eclipse.ecf.server''' plugin (temporarily (0.9.6) you will need to unjar this plugin, edit the server.xml as described below and either re-jar it or create a directory for  it...we'll get this fixed in subsequent releases.  I've setup bug  [https://bugs.eclipse.org/bugs/show_bug.cgi?id=172724 172724] to track this).
+
 
+
The default content for server.xml is:
+
 
+
<pre>
+
<server>
+
  <!--
+
    <connector protocol="ecftcp"  hostname="localhost" port="3282" timeout="30000">
+
<group name="server"/>
+
    </connector>
+
-->
+
</server>
+
</pre>
+
 
+
Notice that this default connector is commented out.  You should create connectors like this (from ecf.eclipse.org):
+
 
+
<pre>
+
<server>
+
  <connector protocol="ecftcp"  hostname="localhost" port="3282" timeout="30000">
+
          <group name="server"/>
+
          <group name="se"/>
+
  </connector>
+
</server>
+
</pre>
+
 
+
This sets up two groups, with URLs: 
+
 
+
'''ecftcp://ecf.eclipse.org:3282/server''' and '''ecftcp://ecf.eclipse.org:3282/se'''
+
 
+
You can add as many groups as you want for a given connector.
+
</li>
+
<li>Start the org.eclipse.ecf.server bundle.  This can be done via the server console (with ''''start org.eclipse.ecf.server'''') or can be setup to start automatically via the '''<appserverhome>webapps/bridge/WEB-INF/platform/configuration/config.ini''' file.
+
</li>
+
</ol>
+
  
[[Category:Eclipse Communication Framework|Servers]]
+
[[Category:Eclipse Communication Framework]]
 +
[[Category:ECF]]
 +
[[Category:Servers]]

Latest revision as of 15:36, 14 March 2011

ECF Generic Server

ECF Generic Servers can now be created, started, and managed dynamically using the IGenericServerContainerGroupFactory service started in the bundle activator of the org.eclipse.ecf.server.generic bundle.

Here some example code for creating/starting a simple ECF generic server

// Get generic server container group factory service...e.g. via declarative service injection
// or via ServiceTracker
IGenericServerContainerGroupFactory genericServerFactory = <get IGenericServerContainerGroupFactory service>;

// Create generic server container group for localhost, listen port=3282
IGenericServerContainerGroup containerGroup = genericServerFactory.createContainerGroup("localhost",3282);

// Create an ECF container within the container group, and give it path="/server"
// The resulting container's ID will be:  ecftcp://localhost:3282/server
containerGroup.createContainer("/server");

// start listening for client connections
containerGroup.startListening();
Eclipse Communication Framework
API
API DocumentationJavadocProviders
Development
Development GuidelinesIntegrators Guide

Back to the top