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 "Gogo Commands for Remote Services Development"

(Created page with "For ECF's Photon release, a number of commands have been added to allow the listing of several ECF and OSGi Remote Service Admin (RSA) entities: ===ECF entities=== namespace...")
 
(3 intermediate revisions by the same user not shown)
Line 3: Line 3:
 
===ECF entities===
 
===ECF entities===
  
namespaces
+
'''Namespaces'''
  
containers
+
'''IContainers'''
  
container type descriptions
+
'''Container Type Descriptions/Config Type'''
  
 
===RSA entities===
 
===RSA entities===
  
RSA exports
+
'''RSA Exported Services'''
  
RSA imports
+
'''RSA Imported Endpoints'''
  
There are also commands to export a service and import an endpoint description via the command line.
+
There are also RSA commands to export a service and import an endpoint description via the command line.
  
 
These commands have been added via the [http://felix.apache.org/documentation/subprojects/apache-felix-gogo.html Apache Felix Gogo Shell] which is used for the console in Eclipse, as well as other OSGi runtimes like [http://felix.apache.org/ Felix], [http://karaf.apache.org/ Karaf], and others.  
 
These commands have been added via the [http://felix.apache.org/documentation/subprojects/apache-felix-gogo.html Apache Felix Gogo Shell] which is used for the console in Eclipse, as well as other OSGi runtimes like [http://felix.apache.org/ Felix], [http://karaf.apache.org/ Karaf], and others.  
  
===ECF Bundles===
+
===Required ECF Bundles===
  
Two bundles are required:  '''org.eclipse.ecf.console''' and '''org.eclipse.ecf.osgi.services.remoteserviceadmin.console'''.  The ECF [https://wiki.eclipse.org/ECF#Tutorials Remote Services examples and tutorials] currently include these two bundles, as do the [https://wiki.eclipse.org/Bndtools_Support_for_Remote_Services_Development Bndtools templates].
+
In addition to the ECF RSA Impl bundles, two bundles are required:  '''org.eclipse.ecf.console''' and '''org.eclipse.ecf.osgi.services.remoteserviceadmin.console'''.  The ECF [https://wiki.eclipse.org/ECF#Tutorials Remote Services examples and tutorials] currently include these two bundles, as do the [https://wiki.eclipse.org/Bndtools_Support_for_Remote_Services_Development Bndtools templates].
  
 
===Commands and Output===
 
===Commands and Output===
Line 107: Line 107:
 
Command:  '''listnamespaces''', '''lns'''
 
Command:  '''listnamespaces''', '''lns'''
  
Parameters:  None -- Produces a table of all Namespaces by Namespace Name
+
Parameters:  '''None''' -- Produces a table of all Namespaces by Namespace Name;  '''Namespace Name''' -- Details about that Namespace
            Namespace Name -- Details about that Namespace
+
  
 
Example:
 
Example:
Line 139: Line 138:
 
Command:  '''listcontainers''', '''lcs'''
 
Command:  '''listcontainers''', '''lcs'''
  
Parameters:  None -- Produces a table of all containers by container ID
+
Parameters:  '''None''' -- Produces a table of all containers by container ID; '''Container ID''' -- Details about that container instance
            Container ID -- Details about that container instance
+
  
 
Example:
 
Example:
Line 166: Line 164:
 
Command:  '''listtypedescriptions''', '''lctds''', '''listconfigs''', '''listcfgs'''
 
Command:  '''listtypedescriptions''', '''lctds''', '''listconfigs''', '''listcfgs'''
  
Parameters:  None -- Produces a table of all descriptions/config by config name
+
Parameters:  '''None''' -- Produces a table of all descriptions/config by config name; '''Config Name''' -- Details about that container type config
            Config Name -- Details about that container type config
+
  
 
Example:
 
Example:
Line 193: Line 190:
 
Server=true
 
Server=true
 
g!  
 
g!  
 +
</pre>
 +
 +
===RSA Commands===
 +
 +
====Exports====
 +
 +
List and get details about ECF RSA exported remote services.
 +
 +
Command:  '''listexports''', '''lexps'''
 +
 +
Parameters:  '''None''' -- Produces a table of all exported remote services by unique endpoint.id;  '''endpoint.id''' -- The endpoint description for that exported remote service
 +
 +
Example:
 +
 +
<pre>
 +
g! listexports
 +
endpoint.id                          |Exporting Container ID                      |Exported Service Id
 +
5cda6f87-44be-4c7f-b8b2-f746a9e187ce |ecftcp://slewis-lenovo:52954/server          |64
 +
 +
g! lexps 5cda6f87-44be-4c7f-b8b2-f746a9e187ce
 +
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
 +
  <endpoint-description>
 +
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:52954/server"/>
 +
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
 +
    <property name="ecf.endpoint.ts" value-type="Long" value="1524510501037"/>
 +
    <property name="ecf.rsvc.id" value-type="Long" value="1"/>
 +
    <property name="endpoint.framework.uuid" value-type="String" value="7884df15-9b29-4bb1-97b6-c5cdef4659d4"/>
 +
    <property name="endpoint.id" value-type="String" value="5cda6f87-44be-4c7f-b8b2-f746a9e187ce"/>
 +
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
 +
    <property name="endpoint.service.id" value-type="Long" value="64"/>
 +
    <property name="objectClass" value-type="String">
 +
      <array>
 +
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.configs.supported" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.intents.supported" value-type="String">
 +
      <array>
 +
        <value>osgi.basic</value>
 +
        <value>osgi.async</value>
 +
        <value>osgi.private</value>
 +
        <value>passByValue</value>
 +
        <value>exactlyOnce</value>
 +
        <value>ordered</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.imported" value-type="String" value="true"/>
 +
    <property name="service.imported.configs" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.intents" value-type="String" value="osgi.basic"/>
 +
  </endpoint-description>
 +
</endpoint-descriptions>
 +
 +
g!
 +
</pre>
 +
 +
====Imports====
 +
 +
List and get details about RSA imported endpoints.
 +
 +
Command:  '''listimports''', '''limps'''
 +
 +
Parameters:  '''None''' -- Produces a table of all imported endpoint descriptions by endpoint.id;  '''endpoint.id''' -- The endpoint description for that imported remote service
 +
 +
Example:
 +
 +
<pre>
 +
g! listimports
 +
endpoint.id                          |Importing Container ID                      |Imported Service Id
 +
5cda6f87-44be-4c7f-b8b2-f746a9e187ce |b4mR1bqKQbTxqaxfKoTu1TC9Sag=                |65
 +
 +
g! limps 5cda6f87-44be-4c7f-b8b2-f746a9e187ce
 +
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
 +
  <endpoint-description>
 +
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:52954/server"/>
 +
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
 +
    <property name="ecf.endpoint.ts" value-type="Long" value="1524510501037"/>
 +
    <property name="ecf.rsvc.id" value-type="Long" value="1"/>
 +
    <property name="endpoint.framework.uuid" value-type="String" value="7884df15-9b29-4bb1-97b6-c5cdef4659d4"/>
 +
    <property name="endpoint.id" value-type="String" value="5cda6f87-44be-4c7f-b8b2-f746a9e187ce"/>
 +
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
 +
    <property name="endpoint.service.id" value-type="Long" value="64"/>
 +
    <property name="objectClass" value-type="String">
 +
      <array>
 +
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.configs.supported" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.intents.supported" value-type="String">
 +
      <array>
 +
        <value>osgi.basic</value>
 +
        <value>osgi.async</value>
 +
        <value>osgi.private</value>
 +
        <value>passByValue</value>
 +
        <value>exactlyOnce</value>
 +
        <value>ordered</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.imported.configs" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.client</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.intents" value-type="String" value="osgi.basic"/>
 +
  </endpoint-description>
 +
</endpoint-descriptions>
 +
 +
g!
 +
</pre>
 +
 +
===RSA Export and Unexport===
 +
 +
====Export====
 +
 +
Command:  '''exportservice''', '''expsvc'''
 +
 +
Parameters: 
 +
 +
'''service.id''' of the service to export (required)
 +
 +
'''map of containing service properties of service to export'''  (optional)
 +
 +
Example:  For this example, assume that an instance of service org.example.remoteservice.api.ExampleRemoteService has already been registered:
 +
 +
<pre>
 +
org.example.remoteservice.impl [29] provides:
 +
---------------------------------------------
 +
service; org.example.remoteservice.api.ExampleRemoteService with properties:
 +
  component.id = 3
 +
  component.name = org.example.remoteservice.impl.ExampleRemoteServiceImpl
 +
  service.bundleid = 29
 +
  service.exported.interfaces = *
 +
  service.id = 64
 +
  service.intents = osgi.basic
 +
  service.scope = bundle
 +
</pre>
 +
 +
The '''service.id''' is 64, so the export is:
 +
 +
<pre>
 +
g! expsvc 64
 +
14:23:53.022;EXPORT_REGISTRATION;exportedSR=[org.example.remoteservice.api.ExampleRemoteService];cID=StringID[ecftcp://slewis-lenovo:52954/server];rsId=2
 +
--Endpoint Description---
 +
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
 +
  <endpoint-description>
 +
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:52954/server"/>
 +
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
 +
    <property name="ecf.endpoint.ts" value-type="Long" value="1524518630314"/>
 +
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
 +
    <property name="endpoint.framework.uuid" value-type="String" value="7884df15-9b29-4bb1-97b6-c5cdef4659d4"/>
 +
    <property name="endpoint.id" value-type="String" value="d505b55d-ceda-4599-968b-c56b2d90cc7a"/>
 +
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
 +
    <property name="endpoint.service.id" value-type="Long" value="64"/>
 +
    <property name="objectClass" value-type="String">
 +
      <array>
 +
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.configs.supported" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.intents.supported" value-type="String">
 +
      <array>
 +
        <value>osgi.basic</value>
 +
        <value>osgi.async</value>
 +
        <value>osgi.private</value>
 +
        <value>passByValue</value>
 +
        <value>exactlyOnce</value>
 +
        <value>ordered</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.imported" value-type="String" value="true"/>
 +
    <property name="service.imported.configs" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.intents" value-type="String" value="osgi.basic"/>
 +
  </endpoint-description>
 +
</endpoint-descriptions>
 +
---End Endpoint Description
 +
service.id=64 successfully exported with endpoint description:
 +
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
 +
  <endpoint-description>
 +
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:52954/server"/>
 +
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
 +
    <property name="ecf.endpoint.ts" value-type="Long" value="1524518630314"/>
 +
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
 +
    <property name="endpoint.framework.uuid" value-type="String" value="7884df15-9b29-4bb1-97b6-c5cdef4659d4"/>
 +
    <property name="endpoint.id" value-type="String" value="d505b55d-ceda-4599-968b-c56b2d90cc7a"/>
 +
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
 +
    <property name="endpoint.service.id" value-type="Long" value="64"/>
 +
    <property name="objectClass" value-type="String">
 +
      <array>
 +
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.configs.supported" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.intents.supported" value-type="String">
 +
      <array>
 +
        <value>osgi.basic</value>
 +
        <value>osgi.async</value>
 +
        <value>osgi.private</value>
 +
        <value>passByValue</value>
 +
        <value>exactlyOnce</value>
 +
        <value>ordered</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.imported" value-type="String" value="true"/>
 +
    <property name="service.imported.configs" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.intents" value-type="String" value="osgi.basic"/>
 +
  </endpoint-description>
 +
</endpoint-descriptions>
 +
</pre>
 +
 +
The same endpoint description is presented twice as the result of the export, because the RSA debug is on.  If off, then the endpoint description will be presented only once after the line:
 +
 +
<pre>
 +
service.id=64 successfully exported with endpoint description:
 +
</pre>
 +
 +
The command:
 +
 +
exportservice &lt;service.id&gt;
 +
 +
will set the remote service property '''service.exported.interfaces''' should be set to '''*''', and the remote service property '''service.exported.configs''' will be set to '''ecf.generic.server'''.  It's also possible, however, to provide a map of remote service properties as a second parameter to the '''exportservice''' command.
 +
 +
For example:
 +
 +
<pre>
 +
# create the overridingProperties map as a gogo shell variable with the desired properties and values
 +
g! overridingProperties = [ service.exported.interfaces="*" service.exported.configs="ecf.generic.server" ]
 +
service.exported.interfaces*
 +
service.exported.configsecf.generic.server
 +
 +
# then with service.id=64 and the map value of $overridingProperties
 +
g! exportservice 64 $overridingProperties
 +
service.id=64 successfully exported with endpoint description:
 +
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
 +
  <endpoint-description>
 +
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:52954/server"/>
 +
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
 +
    <property name="ecf.endpoint.ts" value-type="Long" value="1524519728522"/>
 +
    <property name="ecf.rsvc.id" value-type="Long" value="3"/>
 +
    <property name="endpoint.framework.uuid" value-type="String" value="7884df15-9b29-4bb1-97b6-c5cdef4659d4"/>
 +
    <property name="endpoint.id" value-type="String" value="35608635-6ddc-4da8-b7bc-6c6512d2f8b7"/>
 +
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
 +
    <property name="endpoint.service.id" value-type="Long" value="64"/>
 +
    <property name="objectClass" value-type="String">
 +
      <array>
 +
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.configs.supported" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.intents.supported" value-type="String">
 +
      <array>
 +
        <value>osgi.basic</value>
 +
        <value>osgi.async</value>
 +
        <value>osgi.private</value>
 +
        <value>passByValue</value>
 +
        <value>exactlyOnce</value>
 +
        <value>ordered</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.imported" value-type="String" value="true"/>
 +
    <property name="service.imported.configs" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.intents" value-type="String" value="osgi.basic"/>
 +
  </endpoint-description>
 +
</endpoint-descriptions>
 +
</pre>
 +
 +
Another example:
 +
 +
<pre>
 +
g! expsvc 64 [ service.exported.interfaces="*" service.exported.configs="ecf.generic.server" foo="bar" ]
 +
 +
14:50:05.812;EXPORT_REGISTRATION;exportedSR=[org.example.remoteservice.api.ExampleRemoteService];cID=StringID[ecftcp://slewis-lenovo:63443/server];rsId=2
 +
--Endpoint Description---
 +
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
 +
  <endpoint-description>
 +
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:63443/server"/>
 +
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
 +
    <property name="ecf.endpoint.ts" value-type="Long" value="1524520205812"/>
 +
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
 +
    <property name="endpoint.framework.uuid" value-type="String" value="0f6b1484-80da-43af-8876-681b5e8baddc"/>
 +
    <property name="endpoint.id" value-type="String" value="f48abe72-0e53-462f-be1f-1ddfe9bae201"/>
 +
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
 +
    <property name="endpoint.service.id" value-type="Long" value="64"/>
 +
    <property name="foo" value-type="String" value="bar"/>
 +
    <property name="objectClass" value-type="String">
 +
      <array>
 +
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.configs.supported" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.intents.supported" value-type="String">
 +
      <array>
 +
        <value>osgi.basic</value>
 +
        <value>osgi.async</value>
 +
        <value>osgi.private</value>
 +
        <value>passByValue</value>
 +
        <value>exactlyOnce</value>
 +
        <value>ordered</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.imported" value-type="String" value="true"/>
 +
    <property name="service.imported.configs" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.intents" value-type="String" value="osgi.basic"/>
 +
  </endpoint-description>
 +
</endpoint-descriptions>
 +
---End Endpoint Description
 +
service.id=64 successfully exported with endpoint description:
 +
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
 +
  <endpoint-description>
 +
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:63443/server"/>
 +
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
 +
    <property name="ecf.endpoint.ts" value-type="Long" value="1524520205812"/>
 +
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
 +
    <property name="endpoint.framework.uuid" value-type="String" value="0f6b1484-80da-43af-8876-681b5e8baddc"/>
 +
    <property name="endpoint.id" value-type="String" value="f48abe72-0e53-462f-be1f-1ddfe9bae201"/>
 +
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
 +
    <property name="endpoint.service.id" value-type="Long" value="64"/>
 +
    <property name="foo" value-type="String" value="bar"/>
 +
    <property name="objectClass" value-type="String">
 +
      <array>
 +
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.configs.supported" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.intents.supported" value-type="String">
 +
      <array>
 +
        <value>osgi.basic</value>
 +
        <value>osgi.async</value>
 +
        <value>osgi.private</value>
 +
        <value>passByValue</value>
 +
        <value>exactlyOnce</value>
 +
        <value>ordered</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.imported" value-type="String" value="true"/>
 +
    <property name="service.imported.configs" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.intents" value-type="String" value="osgi.basic"/>
 +
  </endpoint-description>
 +
</endpoint-descriptions>
 +
</pre>
 +
 +
====Unexport====
 +
 +
Command:  '''unexportservice''', '''unexpsvc'''
 +
 +
Parameters:
 +
 +
'''endpoint.id''' of the endpoint to unexport (required)
 +
 +
Example:
 +
 +
<pre>
 +
g! lexps
 +
endpoint.id                          |Exporting Container ID                      |Exported Service Id
 +
d505b55d-ceda-4599-968b-c56b2d90cc7a |ecftcp://slewis-lenovo:52954/server          |64
 +
 +
g! unexportservice d505b55d-ceda-4599-968b-c56b2d90cc7a
 +
d505b55d-ceda-4599-968b-c56b2d90cc7a unexported
 +
 +
g! lexps
 +
endpoint.id                          |Exporting Container ID                      |Exported Service Id
 +
 +
g!
 +
</pre>
 +
 +
====Import====
 +
 +
Command:  '''importservice''', '''impsvc'''
 +
 +
Options: 
 +
 +
'''-edefurl &lt;url&gt;''' of the endpoint edef file
 +
 +
If the -edefurl option is not given, the edef input will be assume to be provided via standard input (i.e. via copy and paste).
 +
 +
Example:  For this example, assume that in a separate (impl) console a remote service has been exported, and has produced the endpoint description.  The user selects and copies to the clipboard the following from the impl console:
 +
 +
<pre>
 +
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
 +
  <endpoint-description>
 +
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:50240/server"/>
 +
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
 +
    <property name="ecf.endpoint.ts" value-type="Long" value="1524536590668"/>
 +
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
 +
    <property name="endpoint.framework.uuid" value-type="String" value="669704c8-c9b8-4c47-84a0-71ca0a4de097"/>
 +
    <property name="endpoint.id" value-type="String" value="577226a2-d0ab-4a44-8d35-71d79a50fe13"/>
 +
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
 +
    <property name="endpoint.service.id" value-type="Long" value="64"/>
 +
    <property name="objectClass" value-type="String">
 +
      <array>
 +
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.configs.supported" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.intents.supported" value-type="String">
 +
      <array>
 +
        <value>osgi.basic</value>
 +
        <value>osgi.async</value>
 +
        <value>osgi.private</value>
 +
        <value>passByValue</value>
 +
        <value>exactlyOnce</value>
 +
        <value>ordered</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.imported" value-type="String" value="true"/>
 +
    <property name="service.imported.configs" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.intents" value-type="String" value="osgi.basic"/>
 +
  </endpoint-description>
 +
</endpoint-descriptions>
 +
</pre>
 +
 +
Then, moving to the '''consumer''' console, this endpoint can be imported via the console by
 +
 +
<pre>
 +
g! importservice
 +
Waiting for console input.  To complete enter an empty line...
 +
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
 +
  <endpoint-description>
 +
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:50240/server"/>
 +
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
 +
    <property name="ecf.endpoint.ts" value-type="Long" value="1524536590668"/>
 +
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
 +
    <property name="endpoint.framework.uuid" value-type="String" value="669704c8-c9b8-4c47-84a0-71ca0a4de097"/>
 +
    <property name="endpoint.id" value-type="String" value="577226a2-d0ab-4a44-8d35-71d79a50fe13"/>
 +
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
 +
    <property name="endpoint.service.id" value-type="Long" value="64"/>
 +
    <property name="objectClass" value-type="String">
 +
      <array>
 +
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.configs.supported" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.intents.supported" value-type="String">
 +
      <array>
 +
        <value>osgi.basic</value>
 +
        <value>osgi.async</value>
 +
        <value>osgi.private</value>
 +
        <value>passByValue</value>
 +
        <value>exactlyOnce</value>
 +
        <value>ordered</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.imported" value-type="String" value="true"/>
 +
    <property name="service.imported.configs" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.intents" value-type="String" value="osgi.basic"/>
 +
  </endpoint-description>
 +
</endpoint-descriptions>
 +
 +
service responds=Hello ExampleRemoteServiceConsumer
 +
19:25:55.874;IMPORT_REGISTRATION;importedSR=[org.example.remoteservice.api.ExampleRemoteService];cID=StringID[ecftcp://slewis-lenovo:50240/server];rsId=2
 +
--Endpoint Description---
 +
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
 +
  <endpoint-description>
 +
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:50240/server"/>
 +
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
 +
    <property name="ecf.endpoint.ts" value-type="Long" value="1524536590668"/>
 +
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
 +
    <property name="endpoint.framework.uuid" value-type="String" value="669704c8-c9b8-4c47-84a0-71ca0a4de097"/>
 +
    <property name="endpoint.id" value-type="String" value="577226a2-d0ab-4a44-8d35-71d79a50fe13"/>
 +
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
 +
    <property name="endpoint.service.id" value-type="Long" value="64"/>
 +
    <property name="objectClass" value-type="String">
 +
      <array>
 +
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.configs.supported" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.intents.supported" value-type="String">
 +
      <array>
 +
        <value>osgi.basic</value>
 +
        <value>osgi.async</value>
 +
        <value>osgi.private</value>
 +
        <value>passByValue</value>
 +
        <value>exactlyOnce</value>
 +
        <value>ordered</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.imported.configs" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.client</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.intents" value-type="String" value="osgi.basic"/>
 +
  </endpoint-description>
 +
</endpoint-descriptions>
 +
---End Endpoint Description
 +
endpoint.id=577226a2-d0ab-4a44-8d35-71d79a50fe13 with service.id=67 successfully imported:
 +
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
 +
  <endpoint-description>
 +
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:50240/server"/>
 +
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
 +
    <property name="ecf.endpoint.ts" value-type="Long" value="1524536590668"/>
 +
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
 +
    <property name="endpoint.framework.uuid" value-type="String" value="669704c8-c9b8-4c47-84a0-71ca0a4de097"/>
 +
    <property name="endpoint.id" value-type="String" value="577226a2-d0ab-4a44-8d35-71d79a50fe13"/>
 +
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
 +
    <property name="endpoint.service.id" value-type="Long" value="64"/>
 +
    <property name="objectClass" value-type="String">
 +
      <array>
 +
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.configs.supported" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.server</value>
 +
      </array>
 +
    </property>
 +
    <property name="remote.intents.supported" value-type="String">
 +
      <array>
 +
        <value>osgi.basic</value>
 +
        <value>osgi.async</value>
 +
        <value>osgi.private</value>
 +
        <value>passByValue</value>
 +
        <value>exactlyOnce</value>
 +
        <value>ordered</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.imported.configs" value-type="String">
 +
      <array>
 +
        <value>ecf.generic.client</value>
 +
      </array>
 +
    </property>
 +
    <property name="service.intents" value-type="String" value="osgi.basic"/>
 +
  </endpoint-description>
 +
</endpoint-descriptions>
 +
</pre>
 +
 +
====Unimport====
 +
 +
Command:  '''unimportservice''', '''unimpsvc'''
 +
 +
Parameters: 
 +
 +
'''endpoint.id''' of the service to unimport (required)
 +
 +
Example:
 +
 +
<pre>
 +
g! limps
 +
endpoint.id                          |Importing Container ID                      |Imported Service Id
 +
577226a2-d0ab-4a44-8d35-71d79a50fe13 |KuyWDgDnTMlrQSpRzzw0HFKxjFY=                |67
 +
 +
g! unimpsvc 577226a2-d0ab-4a44-8d35-71d79a50fe13
 +
19:30:13.591;IMPORT_UNREGISTRATION;importedSR=null;cID=StringID[ecftcp://slewis-lenovo:50240/server];rsId=0
 +
577226a2-d0ab-4a44-8d35-71d79a50fe13 unimported
 +
g! limps
 +
endpoint.id                          |Importing Container ID                      |Imported Service Id
 +
 
</pre>
 
</pre>

Revision as of 22:30, 23 April 2018

For ECF's Photon release, a number of commands have been added to allow the listing of several ECF and OSGi Remote Service Admin (RSA) entities:

ECF entities

Namespaces

IContainers

Container Type Descriptions/Config Type

RSA entities

RSA Exported Services

RSA Imported Endpoints

There are also RSA commands to export a service and import an endpoint description via the command line.

These commands have been added via the Apache Felix Gogo Shell which is used for the console in Eclipse, as well as other OSGi runtimes like Felix, Karaf, and others.

Required ECF Bundles

In addition to the ECF RSA Impl bundles, two bundles are required: org.eclipse.ecf.console and org.eclipse.ecf.osgi.services.remoteserviceadmin.console. The ECF Remote Services examples and tutorials currently include these two bundles, as do the Bndtools templates.

Commands and Output

Namespaces

Typing help will list all the available commands with their scope, and typing help <command> will produce help for a specific command. e.g.

g! 
g! help
ecf:exportservice
ecf:expsvc
ecf:importservice
ecf:impsvc
ecf:lcfgs
ecf:lcs
ecf:lctds
ecf:lexps
ecf:limps
ecf:listconfigs
ecf:listcontainers
ecf:listexports
ecf:listimports
ecf:listnamespaces
ecf:listtypedescriptions
ecf:lns
ecf:rsadebug
ecf:unexportservice
ecf:unexpsvc
ecf:unimportservice
ecf:unimpsvc
ecf:updateservice
ecf:updsvc
felix:bundlelevel
felix:cd
felix:frameworklevel
felix:headers
felix:help
felix:inspect
felix:install
felix:lb
felix:log
felix:ls
felix:refresh
felix:resolve
felix:start
felix:stop
felix:uninstall
felix:update
felix:which
gogo:cat
gogo:each
gogo:echo
gogo:format
gogo:getopt
gogo:gosh
gogo:grep
gogo:history
gogo:not
gogo:set
gogo:sh
gogo:source
gogo:tac
gogo:telnetd
gogo:type
gogo:until
scr:config
scr:disable
scr:enable
scr:info
scr:list
g! help listnamespaces

listnamespaces
   scope: ecf
   parameters:
      Namespace   Namespace name to list (String)

listnamespaces - List ECF ID namespaces
   scope: ecf
g! 

Command: listnamespaces, lns

Parameters: None -- Produces a table of all Namespaces by Namespace Name; Namespace Name -- Details about that Namespace

Example:

g! lns
Namespace Name
org.eclipse.ecf.core.identity.GUID
ecf.namespace.generic.remoteservice
ecf.namespace.jmdns
org.eclipse.ecf.core.identity.LongID
org.eclipse.ecf.core.identity.UuID
org.eclipse.ecf.core.identity.StringID
ecf.namespace.remoteservice
ecf.namespace.discovery
org.eclipse.ecf.core.identity.URIID

g! lns ecf.namespace.jmdns
ID=ecf.namespace.jmdns
	UriScheme=jmdns
	Class=org.eclipse.ecf.provider.jmdns.identity.JMDNSNamespace
	Description=JMDNS Discovery Namespace
	InstanceArgTypes=(java.lang.String);(java.lang.String,java.lang.String);(org.eclipse.ecf.discovery.identity.IServiceTypeID);(java.lang.String,java.net.URI)

Container Instances

ECF IContainer instances are used to represent specific connections or sessions.

Command: listcontainers, lcs

Parameters: None -- Produces a table of all containers by container ID; Container ID -- Details about that container instance

Example:

g! listcontainers
ID                                           |ImplClass                               |Connected
ecftcp://slewis-lenovo:52954/server          |TCPServerSOContainer                    |ecftcp://slewis-lenovo:52954/server

g! lcs ecftcp://slewis-lenovo:52954/server
ID=ecftcp://slewis-lenovo:52954/server
	Namespace=org.eclipse.ecf.core.identity.StringID
	Class=org.eclipse.ecf.provider.generic.TCPServerSOContainer
	ConnectedTo=ecftcp://slewis-lenovo:52954/server
	ConnectNamespace=org.eclipse.ecf.core.identity.StringID
	Config=ecf.generic.server

Container Type Descriptions

Container Type Descriptions (class org.eclipse.ecf.core.ContainerTypeDescription) are descriptions of containers prior to actual instance creation. In effect, container type descriptions define a factory for creating instances of a given type.

Note that Container Type Descriptions Names correspond the the OSGi notion of distribution provider configuration/config type, and can be used with the OSGi standard remote service property service.exported.configs=. For example: service.exported.configs=ecf.generic.server.

Command: listtypedescriptions, lctds, listconfigs, listcfgs

Parameters: None -- Produces a table of all descriptions/config by config name; Config Name -- Details about that container type config

Example:

g! lctds
ContainerTypeDescription Name
ecf.generic.server
ecf.base
ecf.container.jmdns.locator
ecf.container.jmdns
ecf.generic.ssl.client
ecf.generic.client
ecf.container.jmdns.advertiser
ecf.generic.ssl.server

g! listconfigs ecf.generic.server
ID=ecf.generic.server
	Description=ECF Generic Server
	SupportedConfigs=[ecf.generic.server]
	SupportedIntents=[osgi.basic, osgi.async, osgi.private, passByValue, exactlyOnce, ordered]
	InstanceArgTypes=(org.eclipse.ecf.core.identity.ID);(org.eclipse.ecf.core.identity.ID,java.lang.Integer)
	Adapters=[org.eclipse.ecf.core.sharedobject.ISharedObjectContainerGroupManager, org.eclipse.ecf.core.sharedobject.ISharedObjectContainer, org.eclipse.ecf.provider.comm.IConnectRequestHandler, org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter, org.eclipse.ecf.core.IContainer]
	Hidden=false
	Server=true
g! 

RSA Commands

Exports

List and get details about ECF RSA exported remote services.

Command: listexports, lexps

Parameters: None -- Produces a table of all exported remote services by unique endpoint.id; endpoint.id -- The endpoint description for that exported remote service

Example:

g! listexports
endpoint.id                          |Exporting Container ID                       |Exported Service Id
5cda6f87-44be-4c7f-b8b2-f746a9e187ce |ecftcp://slewis-lenovo:52954/server          |64

g! lexps 5cda6f87-44be-4c7f-b8b2-f746a9e187ce
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
  <endpoint-description>
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:52954/server"/>
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
    <property name="ecf.endpoint.ts" value-type="Long" value="1524510501037"/>
    <property name="ecf.rsvc.id" value-type="Long" value="1"/>
    <property name="endpoint.framework.uuid" value-type="String" value="7884df15-9b29-4bb1-97b6-c5cdef4659d4"/>
    <property name="endpoint.id" value-type="String" value="5cda6f87-44be-4c7f-b8b2-f746a9e187ce"/>
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
    <property name="endpoint.service.id" value-type="Long" value="64"/>
    <property name="objectClass" value-type="String">
      <array>
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
      </array>
    </property>
    <property name="remote.configs.supported" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="remote.intents.supported" value-type="String">
      <array>
        <value>osgi.basic</value>
        <value>osgi.async</value>
        <value>osgi.private</value>
        <value>passByValue</value>
        <value>exactlyOnce</value>
        <value>ordered</value>
      </array>
    </property>
    <property name="service.imported" value-type="String" value="true"/>
    <property name="service.imported.configs" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="service.intents" value-type="String" value="osgi.basic"/>
  </endpoint-description>
</endpoint-descriptions>

g! 

Imports

List and get details about RSA imported endpoints.

Command: listimports, limps

Parameters: None -- Produces a table of all imported endpoint descriptions by endpoint.id; endpoint.id -- The endpoint description for that imported remote service

Example:

g! listimports
endpoint.id                          |Importing Container ID                       |Imported Service Id
5cda6f87-44be-4c7f-b8b2-f746a9e187ce |b4mR1bqKQbTxqaxfKoTu1TC9Sag=                 |65

g! limps 5cda6f87-44be-4c7f-b8b2-f746a9e187ce
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
  <endpoint-description>
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:52954/server"/>
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
    <property name="ecf.endpoint.ts" value-type="Long" value="1524510501037"/>
    <property name="ecf.rsvc.id" value-type="Long" value="1"/>
    <property name="endpoint.framework.uuid" value-type="String" value="7884df15-9b29-4bb1-97b6-c5cdef4659d4"/>
    <property name="endpoint.id" value-type="String" value="5cda6f87-44be-4c7f-b8b2-f746a9e187ce"/>
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
    <property name="endpoint.service.id" value-type="Long" value="64"/>
    <property name="objectClass" value-type="String">
      <array>
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
      </array>
    </property>
    <property name="remote.configs.supported" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="remote.intents.supported" value-type="String">
      <array>
        <value>osgi.basic</value>
        <value>osgi.async</value>
        <value>osgi.private</value>
        <value>passByValue</value>
        <value>exactlyOnce</value>
        <value>ordered</value>
      </array>
    </property>
    <property name="service.imported.configs" value-type="String">
      <array>
        <value>ecf.generic.client</value>
      </array>
    </property>
    <property name="service.intents" value-type="String" value="osgi.basic"/>
  </endpoint-description>
</endpoint-descriptions>

g! 

RSA Export and Unexport

Export

Command: exportservice, expsvc

Parameters:

service.id of the service to export (required)

map of containing service properties of service to export (optional)

Example: For this example, assume that an instance of service org.example.remoteservice.api.ExampleRemoteService has already been registered:

org.example.remoteservice.impl [29] provides:
---------------------------------------------
service; org.example.remoteservice.api.ExampleRemoteService with properties:
   component.id = 3
   component.name = org.example.remoteservice.impl.ExampleRemoteServiceImpl
   service.bundleid = 29
   service.exported.interfaces = *
   service.id = 64
   service.intents = osgi.basic
   service.scope = bundle

The service.id is 64, so the export is:

g! expsvc 64
14:23:53.022;EXPORT_REGISTRATION;exportedSR=[org.example.remoteservice.api.ExampleRemoteService];cID=StringID[ecftcp://slewis-lenovo:52954/server];rsId=2
--Endpoint Description---
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
  <endpoint-description>
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:52954/server"/>
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
    <property name="ecf.endpoint.ts" value-type="Long" value="1524518630314"/>
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
    <property name="endpoint.framework.uuid" value-type="String" value="7884df15-9b29-4bb1-97b6-c5cdef4659d4"/>
    <property name="endpoint.id" value-type="String" value="d505b55d-ceda-4599-968b-c56b2d90cc7a"/>
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
    <property name="endpoint.service.id" value-type="Long" value="64"/>
    <property name="objectClass" value-type="String">
      <array>
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
      </array>
    </property>
    <property name="remote.configs.supported" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="remote.intents.supported" value-type="String">
      <array>
        <value>osgi.basic</value>
        <value>osgi.async</value>
        <value>osgi.private</value>
        <value>passByValue</value>
        <value>exactlyOnce</value>
        <value>ordered</value>
      </array>
    </property>
    <property name="service.imported" value-type="String" value="true"/>
    <property name="service.imported.configs" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="service.intents" value-type="String" value="osgi.basic"/>
  </endpoint-description>
</endpoint-descriptions>
---End Endpoint Description
service.id=64 successfully exported with endpoint description:
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
  <endpoint-description>
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:52954/server"/>
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
    <property name="ecf.endpoint.ts" value-type="Long" value="1524518630314"/>
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
    <property name="endpoint.framework.uuid" value-type="String" value="7884df15-9b29-4bb1-97b6-c5cdef4659d4"/>
    <property name="endpoint.id" value-type="String" value="d505b55d-ceda-4599-968b-c56b2d90cc7a"/>
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
    <property name="endpoint.service.id" value-type="Long" value="64"/>
    <property name="objectClass" value-type="String">
      <array>
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
      </array>
    </property>
    <property name="remote.configs.supported" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="remote.intents.supported" value-type="String">
      <array>
        <value>osgi.basic</value>
        <value>osgi.async</value>
        <value>osgi.private</value>
        <value>passByValue</value>
        <value>exactlyOnce</value>
        <value>ordered</value>
      </array>
    </property>
    <property name="service.imported" value-type="String" value="true"/>
    <property name="service.imported.configs" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="service.intents" value-type="String" value="osgi.basic"/>
  </endpoint-description>
</endpoint-descriptions>

The same endpoint description is presented twice as the result of the export, because the RSA debug is on. If off, then the endpoint description will be presented only once after the line:

service.id=64 successfully exported with endpoint description:

The command:

exportservice <service.id>

will set the remote service property service.exported.interfaces should be set to *, and the remote service property service.exported.configs will be set to ecf.generic.server. It's also possible, however, to provide a map of remote service properties as a second parameter to the exportservice command.

For example:

# create the overridingProperties map as a gogo shell variable with the desired properties and values
g! overridingProperties = [ service.exported.interfaces="*" service.exported.configs="ecf.generic.server" ]
service.exported.interfaces*
service.exported.configsecf.generic.server

# then with service.id=64 and the map value of $overridingProperties
g! exportservice 64 $overridingProperties
service.id=64 successfully exported with endpoint description:
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
  <endpoint-description>
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:52954/server"/>
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
    <property name="ecf.endpoint.ts" value-type="Long" value="1524519728522"/>
    <property name="ecf.rsvc.id" value-type="Long" value="3"/>
    <property name="endpoint.framework.uuid" value-type="String" value="7884df15-9b29-4bb1-97b6-c5cdef4659d4"/>
    <property name="endpoint.id" value-type="String" value="35608635-6ddc-4da8-b7bc-6c6512d2f8b7"/>
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
    <property name="endpoint.service.id" value-type="Long" value="64"/>
    <property name="objectClass" value-type="String">
      <array>
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
      </array>
    </property>
    <property name="remote.configs.supported" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="remote.intents.supported" value-type="String">
      <array>
        <value>osgi.basic</value>
        <value>osgi.async</value>
        <value>osgi.private</value>
        <value>passByValue</value>
        <value>exactlyOnce</value>
        <value>ordered</value>
      </array>
    </property>
    <property name="service.imported" value-type="String" value="true"/>
    <property name="service.imported.configs" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="service.intents" value-type="String" value="osgi.basic"/>
  </endpoint-description>
</endpoint-descriptions>

Another example:

g! expsvc 64 [ service.exported.interfaces="*" service.exported.configs="ecf.generic.server" foo="bar" ]

14:50:05.812;EXPORT_REGISTRATION;exportedSR=[org.example.remoteservice.api.ExampleRemoteService];cID=StringID[ecftcp://slewis-lenovo:63443/server];rsId=2
--Endpoint Description---
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
  <endpoint-description>
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:63443/server"/>
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
    <property name="ecf.endpoint.ts" value-type="Long" value="1524520205812"/>
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
    <property name="endpoint.framework.uuid" value-type="String" value="0f6b1484-80da-43af-8876-681b5e8baddc"/>
    <property name="endpoint.id" value-type="String" value="f48abe72-0e53-462f-be1f-1ddfe9bae201"/>
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
    <property name="endpoint.service.id" value-type="Long" value="64"/>
    <property name="foo" value-type="String" value="bar"/>
    <property name="objectClass" value-type="String">
      <array>
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
      </array>
    </property>
    <property name="remote.configs.supported" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="remote.intents.supported" value-type="String">
      <array>
        <value>osgi.basic</value>
        <value>osgi.async</value>
        <value>osgi.private</value>
        <value>passByValue</value>
        <value>exactlyOnce</value>
        <value>ordered</value>
      </array>
    </property>
    <property name="service.imported" value-type="String" value="true"/>
    <property name="service.imported.configs" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="service.intents" value-type="String" value="osgi.basic"/>
  </endpoint-description>
</endpoint-descriptions>
---End Endpoint Description
service.id=64 successfully exported with endpoint description:
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
  <endpoint-description>
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:63443/server"/>
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
    <property name="ecf.endpoint.ts" value-type="Long" value="1524520205812"/>
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
    <property name="endpoint.framework.uuid" value-type="String" value="0f6b1484-80da-43af-8876-681b5e8baddc"/>
    <property name="endpoint.id" value-type="String" value="f48abe72-0e53-462f-be1f-1ddfe9bae201"/>
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
    <property name="endpoint.service.id" value-type="Long" value="64"/>
    <property name="foo" value-type="String" value="bar"/>
    <property name="objectClass" value-type="String">
      <array>
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
      </array>
    </property>
    <property name="remote.configs.supported" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="remote.intents.supported" value-type="String">
      <array>
        <value>osgi.basic</value>
        <value>osgi.async</value>
        <value>osgi.private</value>
        <value>passByValue</value>
        <value>exactlyOnce</value>
        <value>ordered</value>
      </array>
    </property>
    <property name="service.imported" value-type="String" value="true"/>
    <property name="service.imported.configs" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="service.intents" value-type="String" value="osgi.basic"/>
  </endpoint-description>
</endpoint-descriptions>

Unexport

Command: unexportservice, unexpsvc

Parameters:

endpoint.id of the endpoint to unexport (required)

Example:

g! lexps
endpoint.id                          |Exporting Container ID                       |Exported Service Id
d505b55d-ceda-4599-968b-c56b2d90cc7a |ecftcp://slewis-lenovo:52954/server          |64

g! unexportservice d505b55d-ceda-4599-968b-c56b2d90cc7a
d505b55d-ceda-4599-968b-c56b2d90cc7a unexported

g! lexps
endpoint.id                          |Exporting Container ID                       |Exported Service Id

g! 

Import

Command: importservice, impsvc

Options:

-edefurl <url> of the endpoint edef file

If the -edefurl option is not given, the edef input will be assume to be provided via standard input (i.e. via copy and paste).

Example: For this example, assume that in a separate (impl) console a remote service has been exported, and has produced the endpoint description. The user selects and copies to the clipboard the following from the impl console:

<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
  <endpoint-description>
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:50240/server"/>
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
    <property name="ecf.endpoint.ts" value-type="Long" value="1524536590668"/>
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
    <property name="endpoint.framework.uuid" value-type="String" value="669704c8-c9b8-4c47-84a0-71ca0a4de097"/>
    <property name="endpoint.id" value-type="String" value="577226a2-d0ab-4a44-8d35-71d79a50fe13"/>
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
    <property name="endpoint.service.id" value-type="Long" value="64"/>
    <property name="objectClass" value-type="String">
      <array>
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
      </array>
    </property>
    <property name="remote.configs.supported" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="remote.intents.supported" value-type="String">
      <array>
        <value>osgi.basic</value>
        <value>osgi.async</value>
        <value>osgi.private</value>
        <value>passByValue</value>
        <value>exactlyOnce</value>
        <value>ordered</value>
      </array>
    </property>
    <property name="service.imported" value-type="String" value="true"/>
    <property name="service.imported.configs" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="service.intents" value-type="String" value="osgi.basic"/>
  </endpoint-description>
</endpoint-descriptions>

Then, moving to the consumer console, this endpoint can be imported via the console by

g! importservice 
Waiting for console input.   To complete enter an empty line...
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
  <endpoint-description>
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:50240/server"/>
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
    <property name="ecf.endpoint.ts" value-type="Long" value="1524536590668"/>
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
    <property name="endpoint.framework.uuid" value-type="String" value="669704c8-c9b8-4c47-84a0-71ca0a4de097"/>
    <property name="endpoint.id" value-type="String" value="577226a2-d0ab-4a44-8d35-71d79a50fe13"/>
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
    <property name="endpoint.service.id" value-type="Long" value="64"/>
    <property name="objectClass" value-type="String">
      <array>
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
      </array>
    </property>
    <property name="remote.configs.supported" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="remote.intents.supported" value-type="String">
      <array>
        <value>osgi.basic</value>
        <value>osgi.async</value>
        <value>osgi.private</value>
        <value>passByValue</value>
        <value>exactlyOnce</value>
        <value>ordered</value>
      </array>
    </property>
    <property name="service.imported" value-type="String" value="true"/>
    <property name="service.imported.configs" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="service.intents" value-type="String" value="osgi.basic"/>
  </endpoint-description>
</endpoint-descriptions>

service responds=Hello ExampleRemoteServiceConsumer
19:25:55.874;IMPORT_REGISTRATION;importedSR=[org.example.remoteservice.api.ExampleRemoteService];cID=StringID[ecftcp://slewis-lenovo:50240/server];rsId=2
--Endpoint Description---
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
  <endpoint-description>
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:50240/server"/>
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
    <property name="ecf.endpoint.ts" value-type="Long" value="1524536590668"/>
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
    <property name="endpoint.framework.uuid" value-type="String" value="669704c8-c9b8-4c47-84a0-71ca0a4de097"/>
    <property name="endpoint.id" value-type="String" value="577226a2-d0ab-4a44-8d35-71d79a50fe13"/>
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
    <property name="endpoint.service.id" value-type="Long" value="64"/>
    <property name="objectClass" value-type="String">
      <array>
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
      </array>
    </property>
    <property name="remote.configs.supported" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="remote.intents.supported" value-type="String">
      <array>
        <value>osgi.basic</value>
        <value>osgi.async</value>
        <value>osgi.private</value>
        <value>passByValue</value>
        <value>exactlyOnce</value>
        <value>ordered</value>
      </array>
    </property>
    <property name="service.imported.configs" value-type="String">
      <array>
        <value>ecf.generic.client</value>
      </array>
    </property>
    <property name="service.intents" value-type="String" value="osgi.basic"/>
  </endpoint-description>
</endpoint-descriptions>
---End Endpoint Description
endpoint.id=577226a2-d0ab-4a44-8d35-71d79a50fe13 with service.id=67 successfully imported:
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
  <endpoint-description>
    <property name="ecf.endpoint.id" value-type="String" value="ecftcp://slewis-lenovo:50240/server"/>
    <property name="ecf.endpoint.id.ns" value-type="String" value="org.eclipse.ecf.core.identity.StringID"/>
    <property name="ecf.endpoint.ts" value-type="Long" value="1524536590668"/>
    <property name="ecf.rsvc.id" value-type="Long" value="2"/>
    <property name="endpoint.framework.uuid" value-type="String" value="669704c8-c9b8-4c47-84a0-71ca0a4de097"/>
    <property name="endpoint.id" value-type="String" value="577226a2-d0ab-4a44-8d35-71d79a50fe13"/>
    <property name="endpoint.package.version.org.example.remoteservice.api" value-type="String" value="1.0.0"/>
    <property name="endpoint.service.id" value-type="Long" value="64"/>
    <property name="objectClass" value-type="String">
      <array>
        <value>org.example.remoteservice.api.ExampleRemoteService</value>
      </array>
    </property>
    <property name="remote.configs.supported" value-type="String">
      <array>
        <value>ecf.generic.server</value>
      </array>
    </property>
    <property name="remote.intents.supported" value-type="String">
      <array>
        <value>osgi.basic</value>
        <value>osgi.async</value>
        <value>osgi.private</value>
        <value>passByValue</value>
        <value>exactlyOnce</value>
        <value>ordered</value>
      </array>
    </property>
    <property name="service.imported.configs" value-type="String">
      <array>
        <value>ecf.generic.client</value>
      </array>
    </property>
    <property name="service.intents" value-type="String" value="osgi.basic"/>
  </endpoint-description>
</endpoint-descriptions>

Unimport

Command: unimportservice, unimpsvc

Parameters:

endpoint.id of the service to unimport (required)

Example:

g! limps
endpoint.id                          |Importing Container ID                       |Imported Service Id
577226a2-d0ab-4a44-8d35-71d79a50fe13 |KuyWDgDnTMlrQSpRzzw0HFKxjFY=                 |67

g! unimpsvc 577226a2-d0ab-4a44-8d35-71d79a50fe13
19:30:13.591;IMPORT_UNREGISTRATION;importedSR=null;cID=StringID[ecftcp://slewis-lenovo:50240/server];rsId=0
577226a2-d0ab-4a44-8d35-71d79a50fe13 unimported
g! limps
endpoint.id                          |Importing Container ID                       |Imported Service Id

Back to the top