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.
Difference between revisions of "Distribution Providers"
(→OSGi R7 Supported Intents) |
|||
(37 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
==Introduction== | ==Introduction== | ||
− | + | New: ECF OSGi R7 Remote Services. The [https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.htmlOSGi R7 Remote Services] adds the standardization of several [https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#i1693415 intents]. One of those intents is the [osgi.async intent], which allows remote services to be invoked asynchronously (non-blocking) rather than synchronously (blocking). Supporting async and the other standardized intents: [https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#service.remoteservices-osgi.basic osgi.basic], [https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#d0e1474 osgi.private], [https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#d0e1464 osgi.confidential] requires a distribution provider that supports that intent. For each distribution provider below, the currently supported intents are listed. To request support for an unsupported intent, please post the request to the [https://accounts.eclipse.org/mailing-list/ecf-dev ecf-dev mailing list]. | |
− | The [[OSGi_Remote_Services_and_ECF | ECF Architecture]] also allows the use of multiple distribution providers. Further, ECF's open APIs and implementations supports the creation of distribution providers | + | The Remote Services/Remote Service Admin specifications (chaps 100 and 122 in [https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteserviceadmin.html OSGi Enterprise spec]) allows for the use of multiple distribution providers. Distribution providers are responsible for the actual marshalling/serialization and network communication when a consumer invokes a remote service method. |
+ | |||
+ | The [[OSGi_Remote_Services_and_ECF | ECF Architecture]] also allows the use of multiple distribution providers. Further, ECF's open APIs and implementations supports the creation of custom distribution providers using any desired transport protocols, serialization formats and/or libraries. | ||
==Remote Services API== | ==Remote Services API== | ||
− | ECF's API for distribution providers is | + | ECF's API for distribution providers is the Remote Services API (RSAPI). Implementing this API is the only thing required to create a RS/RSA standards compliant distribution provider. |
Symbolic Name: [http://git.eclipse.org/c/ecf/org.eclipse.ecf.git/tree/framework/bundles/org.eclipse.ecf.remoteservice org.eclipse.ecf.remoteservice]<br> | Symbolic Name: [http://git.eclipse.org/c/ecf/org.eclipse.ecf.git/tree/framework/bundles/org.eclipse.ecf.remoteservice org.eclipse.ecf.remoteservice]<br> | ||
− | Minimum EE: J2SE-1. | + | Minimum EE: J2SE-1.7+<br> |
Dependencies<br> | Dependencies<br> | ||
− | *Framework: OSGi | + | *Framework: OSGi R6+ (Equinox Mars+) |
*ECF Core Bundles: [http://git.eclipse.org/c/ecf/org.eclipse.ecf.git/tree/framework/bundles/org.eclipse.ecf org.eclipse.ecf], [http://git.eclipse.org/c/ecf/org.eclipse.ecf.git/tree/framework/bundles/org.eclipse.ecf.identity org.eclipse.ecf.identity] | *ECF Core Bundles: [http://git.eclipse.org/c/ecf/org.eclipse.ecf.git/tree/framework/bundles/org.eclipse.ecf org.eclipse.ecf], [http://git.eclipse.org/c/ecf/org.eclipse.ecf.git/tree/framework/bundles/org.eclipse.ecf.identity org.eclipse.ecf.identity] | ||
*org.eclipse.equinox.concurrent.future bundle | *org.eclipse.equinox.concurrent.future bundle | ||
Line 19: | Line 21: | ||
[http://download.eclipse.org/rt/ecf/latest/javadoc/org/eclipse/ecf/remoteservice/package-summary.html Remote Service API Javadoc]<br> | [http://download.eclipse.org/rt/ecf/latest/javadoc/org/eclipse/ecf/remoteservice/package-summary.html Remote Service API Javadoc]<br> | ||
− | All RSA distribution providers implement the | + | All ECF RSA distribution providers implement the RSAPI. |
+ | |||
+ | ==XML-RPC Provider== | ||
+ | |||
+ | ====OSGi Configuration Types==== | ||
+ | '''ecf.xmlrpc.server''', '''ecf.xmlrpc.client'''<br> | ||
+ | |||
+ | ====[https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#i1693415 OSGi R7 Supported Intents]==== | ||
+ | |||
+ | '''osgi.async''', '''osgi.basic''', '''osgi.private''', '''osgi.confidential''' | ||
+ | |||
+ | ===Bundles=== | ||
+ | |||
+ | org.eclipse.ecf.provider.xmlrpc<br> | ||
+ | |||
+ | ===Download/Install=== | ||
+ | |||
+ | '''[https://github.com/ECF/XmlRpcProvider/releases]''' | ||
+ | |||
+ | ===Source Code=== | ||
+ | |||
+ | [https://github.com/ECF ECF Github] Repo: [https://github.com/ECF/XmlRpcProvider ECF XML-RPC Provider Github Repo], Paths:<br> | ||
+ | '''org.eclipse.ecf.provider.xmlrpc''': bundles/org.eclipse.ecf.provider.xmlrpc<br> | ||
+ | |||
+ | ===Examples=== | ||
+ | |||
+ | See hello example in released distribution and in source code under examples/ | ||
==Generic Provider== | ==Generic Provider== | ||
− | + | The generic providers are based upon tcp transport socket api. | |
− | ===OSGi Configuration | + | ===OSGi Configuration Types=== |
− | '''ecf.generic.server''' | + | '''ecf.generic.server''', '''ecf.generic.client''', '''ecf.generic.ssl.server''', '''ecf.generic.ssl.client'''<br> |
− | '''ecf.generic.client''' | + | |
− | '''ecf.generic.ssl.server''' | + | |
− | '''ecf.generic.ssl.client'''<br> | + | |
− | + | ====[https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#i1693415 OSGi R7 Supported Intents]==== | |
− | + | '''osgi.async''', '''osgi.basic''', '''osgi.private''', '''osgi.confidential''' | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
[[ECF_Generic_Provider_Configuration_Properties#Remote_Service_Configuration_Properties | See here ]] for a description for generic-provider-specific service properties such as ecf.generic.server.hostname, ecf.generic.server.port, etc. | [[ECF_Generic_Provider_Configuration_Properties#Remote_Service_Configuration_Properties | See here ]] for a description for generic-provider-specific service properties such as ecf.generic.server.hostname, ecf.generic.server.port, etc. | ||
Line 49: | Line 64: | ||
===Bundles=== | ===Bundles=== | ||
− | org.eclipse.ecf.provider | + | org.eclipse.ecf.provider, org.eclipse.ecf.provider.remoteservice |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
===Download/Install=== | ===Download/Install=== | ||
− | + | See [https://www.eclipse.org/ecf/downloads.php Download Page]<br> | |
− | + | ||
− | + | ||
− | + | ||
===Source Code=== | ===Source Code=== | ||
Line 68: | Line 75: | ||
'''org.eclipse.ecf.provider''': framework/bundles/org.eclipse.ecf.provider<br> | '''org.eclipse.ecf.provider''': framework/bundles/org.eclipse.ecf.provider<br> | ||
'''org.eclipse.ecf.provider.remoteservice''': providers/bundles/org.eclipse.ecf.provider.remoteservice | '''org.eclipse.ecf.provider.remoteservice''': providers/bundles/org.eclipse.ecf.provider.remoteservice | ||
+ | |||
+ | ===Tutorials and Examples=== | ||
+ | |||
+ | See [https://wiki.eclipse.org/Using_the_Bndtools_Remote_Services_Project_Templates using Bndtools project templates] or [https://wiki.eclipse.org/Tutorial:_Building_your_first_OSGi_Remote_Service Building your first OSGi Remote Service] | ||
==r-OSGi Provider== | ==r-OSGi Provider== | ||
===OSGi Configuration Types/ECF Container Types=== | ===OSGi Configuration Types/ECF Container Types=== | ||
− | '''ecf.r_osgi.peer''' | + | '''ecf.r_osgi.peer''', '''ecf.r_osgi.peer.ws''' (see r-OSGi over Websockets below), '''ecf.r_osgi.peer.wss''' (see r-OSGi over Websockets below)<br> |
− | '''ecf.r_osgi.peer.ws''' (see r-OSGi over Websockets below) | + | |
− | '''ecf.r_osgi.peer.wss''' (see r-OSGi over Websockets below)<br> | + | |
− | + | [[R-OSGi_Properties | See here ]] for a description for rosgi-provider System properties. | |
− | + | ====[https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#i1693415 OSGi R7 Supported Intents]==== | |
− | // | + | |
− | + | ||
− | // | + | |
− | + | ||
− | / | + | |
− | + | ||
− | + | ||
− | + | '''osgi.async''', '''osgi.basic''', '''osgi.private''', '''osgi.confidential''' | |
===Bundles=== | ===Bundles=== | ||
− | org.eclipse.ecf.provider.r_osgi | + | org.eclipse.ecf.provider.r_osgi, ch.ethz.iks.r_osgi.remote<br> |
− | ch.ethz.iks.r_osgi.remote | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
===Download/Install=== | ===Download/Install=== | ||
− | + | See [https://www.eclipse.org/ecf/downloads.php Download Page]<br> | |
− | + | ||
− | + | ||
− | + | ||
===Source Code=== | ===Source Code=== | ||
Line 117: | Line 111: | ||
java_websocket: bundles/java_websocket<br> | java_websocket: bundles/java_websocket<br> | ||
<br> | <br> | ||
− | + | [https://github.com/ECF/ROSGI-Websockets-Provider Recent build of these bundles is available here] | |
− | ==JMS/ActiveMQ | + | ==JMS/ActiveMQ Providers== |
− | + | JMS/ActiveMQ providers are based upon the [https://en.wikipedia.org/wiki/Java_Message_Service Java Messaging Service] (JMS) specification version 1.1+. | |
===OSGi Configuration Types/ECF Container Types=== | ===OSGi Configuration Types/ECF Container Types=== | ||
Line 127: | Line 121: | ||
'''ecf.jms.activemq.tcp.client'''<br> | '''ecf.jms.activemq.tcp.client'''<br> | ||
− | + | ====[https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#i1693415 OSGi R7 Supported Intents]==== | |
− | + | '''osgi.async''', '''osgi.basic''', '''osgi.private''' | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
===Bundles=== | ===Bundles=== | ||
Line 144: | Line 129: | ||
org.eclipse.ecf.provider.jms<br> | org.eclipse.ecf.provider.jms<br> | ||
org.eclipse.ecf.provider.jms.activemq (based upon ActiveMQ 5.12 currently...see source code). | org.eclipse.ecf.provider.jms.activemq (based upon ActiveMQ 5.12 currently...see source code). | ||
− | |||
− | |||
− | |||
− | |||
===Download/Install=== | ===Download/Install=== | ||
− | + | See [https://github.com/ECF/JMS/releases here] | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
===Source Code=== | ===Source Code=== | ||
Line 167: | Line 139: | ||
'''org.eclipse.ecf.provider.jms''': bundles/org.eclipse.ecf.provider.jms<br> | '''org.eclipse.ecf.provider.jms''': bundles/org.eclipse.ecf.provider.jms<br> | ||
'''org.eclipse.ecf.provider.jms.activemq''': bundles/org.eclipse.ecf.provider.jms.activemq | '''org.eclipse.ecf.provider.jms.activemq''': bundles/org.eclipse.ecf.provider.jms.activemq | ||
− | |||
− | |||
− | |||
− | |||
==MQTT Provider (Paho)== | ==MQTT Provider (Paho)== | ||
Line 180: | Line 148: | ||
'''ecf.jms.mqtt.client'''<br> | '''ecf.jms.mqtt.client'''<br> | ||
− | + | ====[https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#i1693415 OSGi R7 Supported Intents]==== | |
− | + | '''osgi.async''', '''osgi.basic''', '''osgi.private''' | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
===Bundles=== | ===Bundles=== | ||
org.eclipse.ecf.provider.jms.mqtt | org.eclipse.ecf.provider.jms.mqtt | ||
+ | |||
+ | ===Download/Install=== | ||
+ | |||
+ | See [https://github.com/ECF/Mqtt-Provider/releases here] | ||
+ | |||
+ | ===Source Code=== | ||
+ | |||
+ | [https://github.com/ECF ECF Github] Repo: [https://github.com/ECF/Mqtt-Provider ECF MQTT Provider Github Repo], Paths:<br> | ||
+ | '''org.eclipse.ecf.provider.jms.mqtt''': bundles/org.eclipse.ecf.provider.jms.mqtt | ||
+ | |||
+ | ==Jax-RS Providers== | ||
+ | |||
+ | The ECF team has created several REST-based Remote Service providers, all of which are based upon the Jax-RS specification. By using OSGi Remote Service standards along with Jax-RS standards, it's possible to create remote services that can be used on any compliant Jax-RS implementation, and any RSA-compliant Remote Services implementation. For a tutorial on how this can work, see [[Tutorial:_Using_REST_and_OSGi_Standards_for_Micro_Services | the tutorial Using REST and OSGi Standards for Micro Services]]. | ||
+ | |||
+ | Since REST is based upon a client-server model of services, Remote Services based upon rest may only be exported on servers. Clients may import, but are unable to export Remote Services. | ||
+ | |||
+ | ===Jackson Jax-RS Distribution Provider=== | ||
+ | |||
+ | ====OSGi Configuration Types/ECF Container Types==== | ||
+ | '''ecf.jaxrs.jersey.server'''<br> | ||
+ | '''ecf.jaxrs.jersey.client'''<br> | ||
+ | |||
+ | ====[https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#i1693415 OSGi R7 Supported Intents]==== | ||
+ | |||
+ | '''osgi.async''', '''osgi.private''', '''osgi.confidential''' | ||
+ | |||
+ | ====Bundles==== | ||
+ | |||
+ | org.eclipse.ecf.provider.jersey.server<br> | ||
+ | org.eclipse.ecf.provider.jaxrs.server<br> | ||
+ | org.eclipse.ecf.provider.jaxrs | ||
+ | |||
+ | ====Download/Install==== | ||
+ | |||
+ | A binary distribution of the Jersey client and server is available [https://github.com/ECF/JaxRSProviders/releases here] | ||
+ | |||
+ | ====Source Code==== | ||
+ | |||
+ | [https://github.com/ECF ECF Github] Repo: [https://github.com/ECF/JaxRSProviders ECF JaxRS Providers Github Repo], Paths:<br> | ||
+ | '''org.eclipse.ecf.provider.jersey.server''': bundles/org.eclipse.ecf.provider.jersey.server<br> | ||
+ | '''org.eclipse.ecf.provider.jaxrs.server''': bundles/org.eclipse.ecf.provider.jaxrs.server<br> | ||
+ | '''org.eclipse.ecf.provider.jaxrs''': bundles/org.eclipse.ecf.provider.jaxrs<br> | ||
+ | |||
+ | If you would like to contribute to the build/releng or the coding for this provider, please [https://dev.eclipse.org/mailman/listinfo/ecf-dev join and post a note to that effect to the ecf-dev mailing list]. | ||
+ | |||
+ | ===Apache CXF Jax-RS Implementation=== | ||
+ | |||
+ | ====OSGi Configuration Types/ECF Container Types==== | ||
+ | '''ecf.jaxrs.cxf.server'''<br> | ||
+ | '''ecf.jaxrs.cxf.client'''<br> | ||
+ | |||
+ | ====[https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#i1693415 OSGi R7 Supported Intents]==== | ||
+ | |||
+ | '''osgi.async''', '''osgi.basic''', '''osgi.private''', '''osgi.confidential''' | ||
+ | |||
+ | ====Bundles==== | ||
+ | |||
+ | org.eclipse.ecf.provider.cxf.server<br> | ||
+ | org.eclipse.ecf.provider.jaxrs.server<br> | ||
+ | org.eclipse.ecf.provider.jaxrs | ||
+ | |||
+ | ====Source Code==== | ||
+ | |||
+ | [https://github.com/ECF ECF Github] Repo: [https://github.com/ECF/JaxRSProviders ECF JaxRS Providers Github Repo], Paths:<br> | ||
+ | '''org.eclipse.ecf.provider.cxf.server''': bundles/org.eclipse.ecf.provider.cxf.server<br> | ||
+ | '''org.eclipse.ecf.provider.jaxrs.server''': bundles/org.eclipse.ecf.provider.jaxrs.server<br> | ||
+ | '''org.eclipse.ecf.provider.jaxrs''': bundles/org.eclipse.ecf.provider.jaxrs<br> | ||
+ | |||
+ | ==Providers created via ECF REST API== | ||
+ | |||
+ | ECF has provided an API to aid in the creation of REST-based Remote Services provider. Using this API, it's possible to create a Remote Service client/proxy that uses an '''existing''' REST-based service. Thus new Remote Services can be created to expose an existing REST-based service. The following tutorial: [[Tutorial:_ECF_Remote_Services_for_Accessing_Existing_REST_Services | ECF Remote Services for Accessing Existing REST Services]] describes how to use the ECF REST API to create client provider to access an existing REST service. | ||
+ | |||
+ | ===OSGi Configuration Types/ECF Container Types=== | ||
+ | '''ecf.rest.client'''<br> | ||
+ | |||
+ | As mentioned above, only REST servers may export Remote Services, so the ecf.rest.client provider may not export Remote Services. | ||
+ | |||
+ | ==[https://github.com/ECF/kryo-serialization Kryo Serialization]== | ||
+ | |||
+ | This set of projects enhances the [https://wiki.eclipse.org/Distribution_Providers#Generic_Provider ECF generic providers] to use [https://github.com/EsotericSoftware/kryo Kryo serialization] rather than Java serialization. [https://github.com/EsotericSoftware/kryo Kryo serialization] is a fast and efficient object serialization for Java. | ||
+ | |||
+ | See the example of usage and documentation described on the [https://github.com/ECF/kryo-serialization main Kryo serialization project page]. | ||
+ | |||
+ | OSGi R7 Supported Intents: None | ||
+ | |||
+ | ===Bundles=== | ||
+ | |||
+ | org.eclipse.ecf.provider.sharedobject.serializer.kryo<br> | ||
===Dependencies=== | ===Dependencies=== | ||
− | '''org.eclipse.ecf.provider. | + | |
+ | '''org.eclipse.ecf.provider.sharedobject.serializer.kryo''': ECF Core, RSAPI, [https://github.com/EsotericSoftware/kryo Kryo Serialization] | ||
+ | |||
+ | ===Source Code=== | ||
+ | |||
+ | [https://github.com/ECF ECF Github] Repo: [https://github.com/ECF/kryo-serialization Kryo Serialization for Generic Provider Github Repo], Paths:<br> | ||
+ | '''org.eclipse.ecf.provider.sharedobject.serializer.kryo''': org.eclipse.ecf.sharedobject.serializer.kryo<br> | ||
+ | |||
+ | ==[https://github.com/ECF/Py4j-RemoteServicesProvider Python OSGi Services Provider]== | ||
+ | |||
+ | Please see [[Tutorial: Python for OSGi Services]] | ||
===Download/Install=== | ===Download/Install=== | ||
− | + | A binary build (p2) of this provider is available [https://github.com/ECF/Py4j-RemoteServicesProvider/releases here] | |
− | P2 Feature ID: '''org.eclipse.ecf. | + | |
+ | ===Source Code=== | ||
+ | |||
+ | [https://github.com/ECF ECF Github] Repo: [https://github.com/ECF/Py4j-RemoteServicesProvider ECF Python Provider Github Repo] | ||
+ | |||
+ | ===Bundles=== | ||
+ | |||
+ | org.eclipse.ecf.remoteservice.rest<br> | ||
+ | |||
+ | ===Download/Install=== | ||
+ | |||
+ | P2 Repo and Karaf Feature: See [https://www.eclipse.org/ecf/downloads.php Download Page]<br> | ||
+ | P2 Feature ID: '''org.eclipse.ecf.remoteservice.rest.feature'''<br> | ||
<br> | <br> | ||
− | + | Karaf Feature: '''ecf-remoteservices-rest''' in repos given on [[EIG:Install_into_Apache_Karaf | Karaf Installation Page]] | |
− | + | ===Source Code=== | |
− | + | Git Repo: [http://git.eclipse.org/c/ecf/org.eclipse.ecf.git ECF Git Repo], Paths:<br> | |
+ | '''org.eclipse.ecf.remoteservice.rest''': framework/bundles/org.eclipse.ecf.remoteservice.rest | ||
+ | |||
+ | ==Hazelcast Provider== | ||
+ | |||
+ | ====OSGi Configuration Types/ECF Container Types==== | ||
+ | '''ecf.jms.hazelcast.manager'''<br> | ||
+ | '''ecf.jms.hazelcast.member'''<br> | ||
+ | |||
+ | ====[https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#i1693415 OSGi R7 Supported Intents]==== | ||
+ | |||
+ | '''osgi.async''', '''osgi.basic''', '''osgi.private''', '''osgi.confidential''' | ||
+ | |||
+ | ===Bundles=== | ||
+ | |||
+ | org.eclipse.ecf.provider.jms.hazelcast<br> | ||
+ | |||
+ | ===Download/Install=== | ||
+ | |||
+ | A binary build of hte Hazelcast distribution provider is available [https://github.com/ECF/HazelcastProvider/releases here] | ||
===Source Code=== | ===Source Code=== | ||
− | [https://github.com/ECF ECF Github] Repo: [https://github.com/ECF/ | + | [https://github.com/ECF ECF Github] Repo: [https://github.com/ECF/HazelcastProvider ECF Hazelcast Provider Github Repo], Paths:<br> |
− | '''org.eclipse.ecf.provider.jms. | + | '''org.eclipse.ecf.provider.jms.hazelcast''': bundles/org.eclipse.ecf.provider.jms.hazelcast<br> |
If you would like to contribute to the build/releng or the coding for this provider, please [https://dev.eclipse.org/mailman/listinfo/ecf-dev join and post a note to that effect to the ecf-dev mailing list]. | If you would like to contribute to the build/releng or the coding for this provider, please [https://dev.eclipse.org/mailman/listinfo/ecf-dev join and post a note to that effect to the ecf-dev mailing list]. | ||
+ | |||
+ | ==JavaGroups (JGroups) Provider== | ||
+ | |||
+ | ====OSGi Configuration Types/ECF Container Types==== | ||
+ | '''ecf.jgroups.manager'''<br> | ||
+ | '''ecf.jgroups.client'''<br> | ||
+ | |||
+ | ====[https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#i1693415 OSGi R7 Supported Intents]==== | ||
+ | |||
+ | '''osgi.async''', '''osgi.basic''', '''osgi.private''', '''osgi.confidential''' | ||
+ | |||
+ | ===Bundles=== | ||
+ | |||
+ | org.eclipse.ecf.provider.jgroups<br> | ||
+ | |||
+ | ===Download/Install=== | ||
+ | |||
+ | A build of this provider is available '''[https://github.com/ECF/JGroups/releases here]''' | ||
+ | |||
+ | ===Source Code=== | ||
+ | |||
+ | [https://github.com/ECF ECF Github] Repo: [https://github.com/ECF/https://github.com/ECF/JGroups ECF JavaGroups Provider Github Repo], Paths:<br> | ||
+ | '''org.eclipse.ecf.provider.jgroups''': bundles/org.eclipse.ecf.provider.jgroups<br> | ||
+ | |||
+ | If you would like to contribute to the build/releng or the coding for this provider, create a new provider, or get support or custom development on any of the existing providers, please [https://dev.eclipse.org/mailman/listinfo/ecf-dev join and post to the ecf-dev mailing list]. |
Revision as of 13:18, 20 June 2018
Contents
- 1 Introduction
- 2 Remote Services API
- 3 XML-RPC Provider
- 4 Generic Provider
- 5 r-OSGi Provider
- 6 JMS/ActiveMQ Providers
- 7 MQTT Provider (Paho)
- 8 Jax-RS Providers
- 9 Providers created via ECF REST API
- 10 Kryo Serialization
- 11 Python OSGi Services Provider
- 12 Hazelcast Provider
- 13 JavaGroups (JGroups) Provider
Introduction
New: ECF OSGi R7 Remote Services. The R7 Remote Services adds the standardization of several intents. One of those intents is the [osgi.async intent], which allows remote services to be invoked asynchronously (non-blocking) rather than synchronously (blocking). Supporting async and the other standardized intents: osgi.basic, osgi.private, osgi.confidential requires a distribution provider that supports that intent. For each distribution provider below, the currently supported intents are listed. To request support for an unsupported intent, please post the request to the ecf-dev mailing list.
The Remote Services/Remote Service Admin specifications (chaps 100 and 122 in OSGi Enterprise spec) allows for the use of multiple distribution providers. Distribution providers are responsible for the actual marshalling/serialization and network communication when a consumer invokes a remote service method.
The ECF Architecture also allows the use of multiple distribution providers. Further, ECF's open APIs and implementations supports the creation of custom distribution providers using any desired transport protocols, serialization formats and/or libraries.
Remote Services API
ECF's API for distribution providers is the Remote Services API (RSAPI). Implementing this API is the only thing required to create a RS/RSA standards compliant distribution provider.
Symbolic Name: org.eclipse.ecf.remoteservice
Minimum EE: J2SE-1.7+
Dependencies
- Framework: OSGi R6+ (Equinox Mars+)
- ECF Core Bundles: org.eclipse.ecf, org.eclipse.ecf.identity
- org.eclipse.equinox.concurrent.future bundle
- org.eclipse.ecf.remoteservice.asyncproxy bundle version 1.X (Java 7) or 2.X (Java 8)
All ECF RSA distribution providers implement the RSAPI.
XML-RPC Provider
OSGi Configuration Types
ecf.xmlrpc.server, ecf.xmlrpc.client
OSGi R7 Supported Intents
osgi.async, osgi.basic, osgi.private, osgi.confidential
Bundles
org.eclipse.ecf.provider.xmlrpc
Download/Install
Source Code
ECF Github Repo: ECF XML-RPC Provider Github Repo, Paths:
org.eclipse.ecf.provider.xmlrpc: bundles/org.eclipse.ecf.provider.xmlrpc
Examples
See hello example in released distribution and in source code under examples/
Generic Provider
The generic providers are based upon tcp transport socket api.
OSGi Configuration Types
ecf.generic.server, ecf.generic.client, ecf.generic.ssl.server, ecf.generic.ssl.client
OSGi R7 Supported Intents
osgi.async, osgi.basic, osgi.private, osgi.confidential
See here for a description for generic-provider-specific service properties such as ecf.generic.server.hostname, ecf.generic.server.port, etc.
Bundles
org.eclipse.ecf.provider, org.eclipse.ecf.provider.remoteservice
Download/Install
See Download Page
Source Code
Git Repo: ECF Git Repo, Paths:
org.eclipse.ecf.provider: framework/bundles/org.eclipse.ecf.provider
org.eclipse.ecf.provider.remoteservice: providers/bundles/org.eclipse.ecf.provider.remoteservice
Tutorials and Examples
See using Bndtools project templates or Building your first OSGi Remote Service
r-OSGi Provider
OSGi Configuration Types/ECF Container Types
ecf.r_osgi.peer, ecf.r_osgi.peer.ws (see r-OSGi over Websockets below), ecf.r_osgi.peer.wss (see r-OSGi over Websockets below)
See here for a description for rosgi-provider System properties.
OSGi R7 Supported Intents
osgi.async, osgi.basic, osgi.private, osgi.confidential
Bundles
org.eclipse.ecf.provider.r_osgi, ch.ethz.iks.r_osgi.remote
Download/Install
See Download Page
Source Code
Git Repo: ECF Git Repo, Paths:
ch.ethz.iks.r_osgi.remote: protocols/bundles/ch.ethz.iks.r_osgi.remote
org.eclipse.ecf.provider.remoteservice: providers/bundles/org.eclipse.ecf.provider.r_osgi
r-OSGi over Websockets
The two r-OSGi providers: ecf.r_osgi.peer.ws, and ecf.r_osgi.peer.wss are supported by adding two additional bundles: ch.ethz.iks.r_osgi.transport.http, and Java Websocket. These two bundles are available in the ECF Github Websockets Repo, at the following paths:
ch.ethz.iks.r_osgi.transport.http: bundles/ch.ethz.iks.r_osgi.transport.http
java_websocket: bundles/java_websocket
Recent build of these bundles is available here
JMS/ActiveMQ Providers
JMS/ActiveMQ providers are based upon the Java Messaging Service (JMS) specification version 1.1+.
OSGi Configuration Types/ECF Container Types
ecf.jms.activemq.tcp.manager
ecf.jms.activemq.tcp.client
OSGi R7 Supported Intents
osgi.async, osgi.basic, osgi.private
Bundles
org.eclipse.ecf.provider.jms
org.eclipse.ecf.provider.jms.activemq (based upon ActiveMQ 5.12 currently...see source code).
Download/Install
See here
Source Code
ECF Github Repo: ECF JMS Github Repo, Paths:
org.eclipse.ecf.provider.jms: bundles/org.eclipse.ecf.provider.jms
org.eclipse.ecf.provider.jms.activemq: bundles/org.eclipse.ecf.provider.jms.activemq
MQTT Provider (Paho)
The ECF team has created a Remote Service provider based upon the MQTT3 Paho implementation. We are currently using Paho version 1.0.2.
OSGi Configuration Types/ECF Container Types
ecf.jms.mqtt.manager
ecf.jms.mqtt.client
OSGi R7 Supported Intents
osgi.async, osgi.basic, osgi.private
Bundles
org.eclipse.ecf.provider.jms.mqtt
Download/Install
See here
Source Code
ECF Github Repo: ECF MQTT Provider Github Repo, Paths:
org.eclipse.ecf.provider.jms.mqtt: bundles/org.eclipse.ecf.provider.jms.mqtt
Jax-RS Providers
The ECF team has created several REST-based Remote Service providers, all of which are based upon the Jax-RS specification. By using OSGi Remote Service standards along with Jax-RS standards, it's possible to create remote services that can be used on any compliant Jax-RS implementation, and any RSA-compliant Remote Services implementation. For a tutorial on how this can work, see the tutorial Using REST and OSGi Standards for Micro Services.
Since REST is based upon a client-server model of services, Remote Services based upon rest may only be exported on servers. Clients may import, but are unable to export Remote Services.
Jackson Jax-RS Distribution Provider
OSGi Configuration Types/ECF Container Types
ecf.jaxrs.jersey.server
ecf.jaxrs.jersey.client
OSGi R7 Supported Intents
osgi.async, osgi.private, osgi.confidential
Bundles
org.eclipse.ecf.provider.jersey.server
org.eclipse.ecf.provider.jaxrs.server
org.eclipse.ecf.provider.jaxrs
Download/Install
A binary distribution of the Jersey client and server is available here
Source Code
ECF Github Repo: ECF JaxRS Providers Github Repo, Paths:
org.eclipse.ecf.provider.jersey.server: bundles/org.eclipse.ecf.provider.jersey.server
org.eclipse.ecf.provider.jaxrs.server: bundles/org.eclipse.ecf.provider.jaxrs.server
org.eclipse.ecf.provider.jaxrs: bundles/org.eclipse.ecf.provider.jaxrs
If you would like to contribute to the build/releng or the coding for this provider, please join and post a note to that effect to the ecf-dev mailing list.
Apache CXF Jax-RS Implementation
OSGi Configuration Types/ECF Container Types
ecf.jaxrs.cxf.server
ecf.jaxrs.cxf.client
OSGi R7 Supported Intents
osgi.async, osgi.basic, osgi.private, osgi.confidential
Bundles
org.eclipse.ecf.provider.cxf.server
org.eclipse.ecf.provider.jaxrs.server
org.eclipse.ecf.provider.jaxrs
Source Code
ECF Github Repo: ECF JaxRS Providers Github Repo, Paths:
org.eclipse.ecf.provider.cxf.server: bundles/org.eclipse.ecf.provider.cxf.server
org.eclipse.ecf.provider.jaxrs.server: bundles/org.eclipse.ecf.provider.jaxrs.server
org.eclipse.ecf.provider.jaxrs: bundles/org.eclipse.ecf.provider.jaxrs
Providers created via ECF REST API
ECF has provided an API to aid in the creation of REST-based Remote Services provider. Using this API, it's possible to create a Remote Service client/proxy that uses an existing REST-based service. Thus new Remote Services can be created to expose an existing REST-based service. The following tutorial: ECF Remote Services for Accessing Existing REST Services describes how to use the ECF REST API to create client provider to access an existing REST service.
OSGi Configuration Types/ECF Container Types
ecf.rest.client
As mentioned above, only REST servers may export Remote Services, so the ecf.rest.client provider may not export Remote Services.
Kryo Serialization
This set of projects enhances the ECF generic providers to use Kryo serialization rather than Java serialization. Kryo serialization is a fast and efficient object serialization for Java.
See the example of usage and documentation described on the main Kryo serialization project page.
OSGi R7 Supported Intents: None
Bundles
org.eclipse.ecf.provider.sharedobject.serializer.kryo
Dependencies
org.eclipse.ecf.provider.sharedobject.serializer.kryo: ECF Core, RSAPI, Kryo Serialization
Source Code
ECF Github Repo: Kryo Serialization for Generic Provider Github Repo, Paths:
org.eclipse.ecf.provider.sharedobject.serializer.kryo: org.eclipse.ecf.sharedobject.serializer.kryo
Python OSGi Services Provider
Please see Tutorial: Python for OSGi Services
Download/Install
A binary build (p2) of this provider is available here
Source Code
ECF Github Repo: ECF Python Provider Github Repo
Bundles
org.eclipse.ecf.remoteservice.rest
Download/Install
P2 Repo and Karaf Feature: See Download Page
P2 Feature ID: org.eclipse.ecf.remoteservice.rest.feature
Karaf Feature: ecf-remoteservices-rest in repos given on Karaf Installation Page
Source Code
Git Repo: ECF Git Repo, Paths:
org.eclipse.ecf.remoteservice.rest: framework/bundles/org.eclipse.ecf.remoteservice.rest
Hazelcast Provider
OSGi Configuration Types/ECF Container Types
ecf.jms.hazelcast.manager
ecf.jms.hazelcast.member
OSGi R7 Supported Intents
osgi.async, osgi.basic, osgi.private, osgi.confidential
Bundles
org.eclipse.ecf.provider.jms.hazelcast
Download/Install
A binary build of hte Hazelcast distribution provider is available here
Source Code
ECF Github Repo: ECF Hazelcast Provider Github Repo, Paths:
org.eclipse.ecf.provider.jms.hazelcast: bundles/org.eclipse.ecf.provider.jms.hazelcast
If you would like to contribute to the build/releng or the coding for this provider, please join and post a note to that effect to the ecf-dev mailing list.
JavaGroups (JGroups) Provider
OSGi Configuration Types/ECF Container Types
ecf.jgroups.manager
ecf.jgroups.client
OSGi R7 Supported Intents
osgi.async, osgi.basic, osgi.private, osgi.confidential
Bundles
org.eclipse.ecf.provider.jgroups
Download/Install
A build of this provider is available here
Source Code
ECF Github Repo: ECF JavaGroups Provider Github Repo, Paths:
org.eclipse.ecf.provider.jgroups: bundles/org.eclipse.ecf.provider.jgroups
If you would like to contribute to the build/releng or the coding for this provider, create a new provider, or get support or custom development on any of the existing providers, please join and post to the ecf-dev mailing list.