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 "Distribution Providers"

(10 intermediate revisions by the same user not shown)
Line 22: Line 22:
  
 
All ECF RSA distribution providers implement the RSAPI.
 
All ECF RSA distribution providers implement the RSAPI.
 +
 +
==Apache [https://github.com/ECF/DubboProvider DubboProvider]==
 +
 +
====OSGi Service Exported Configs====
 +
'''ecf.dubbo.server''', '''ecf.dubbo.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''', '''dubbo''', '''passByValue''', '''ordered''', '''exactlyOnce'''
 +
 +
===Bundles===
 +
 +
<b>org.eclipse.ecf.provider.dubbo.common</b> -- Common support bundle for both Server and Client<br>
 +
<b>org.eclipse.ecf.provider.dubbo.server</b> -- Remote Service Server Container<br>
 +
<b>org.eclipse.ecf.provider.dubbo.client</b> -- Remote Service Client Container<br>
 +
 +
===Example Demo Remote Service===
 +
 +
<b>org.eclipse.ecf.examples.provider.dubbo.demo.api</b> -- Demo API bundle<br>
 +
<b>org.eclipse.ecf.examples.provider.dubbo.demo.host</b> -- Demo Service Impl bundle<br>
 +
<b>org.eclipse.ecf.examples.provider.dubbo.demo.consumer</b> -- Demo Service Consumer bundle<br>
 +
 +
===Source Code===
 +
 +
[https://github.com/ECF ECF Github] Repo: [https://github.com/ECF/DubboProvider ECF Dubbo Distribution Provider Github Repo], Paths:<br>
 +
'''org.eclipse.ecf.provider.dubbo.common''': bundles/org.eclipse.ecf.provider.dubbo.common, '''org.eclipse.ecf.provider.dubbo.server''': bundles/org.eclipse.ecf.provider.dubbo.server<br>,
 +
'''org.eclipse.ecf.provider.dubbo.client''': bundles/org.eclipse.ecf.provider.dubbo.client,
 +
'''org.eclipse.ecf.examples.provider.dubbo.demo.api''': examples/org.eclipse.ecf.examples.provider.dubbo.demo.api,
 +
'''org.eclipse.ecf.examples.provider.dubbo.demo.impl''': examples/org.eclipse.ecf.examples.provider.dubbo.demo.impl,
 +
'''org.eclipse.ecf.examples.provider.dubbo.demo.consumer''': examples/org.eclipse.ecf.examples.provider.dubbo.demo.consumer,
 +
 +
===P2 Repository===
 +
 +
https://raw.githubusercontent.com/ECF/DubboProvider/master/build/
 +
 +
<b>NOTE:</b> Depends upon version 3.14.5 or higher of ECF Remote Service SDK.  See [http://www.eclipse.org/ecf/downloads.php ecf downloads] for Eclipse or Target Platform installation
 +
 +
===Karaf Feature===
 +
 +
https://raw.githubusercontent.com/ECF/DubboProvider/master/build/karaf-features.xml
 +
 +
<b>NOTE:</b> Depends upon version 3.14.5 or higher of ECF Remote Service SDK.  See [https://wiki.eclipse.org/EIG:Install_into_Apache_Karaf  Karaf Install Instructions]
  
 
==XML-RPC Provider==
 
==XML-RPC Provider==
  
====OSGi Configuration Types====
+
====OSGi Service Exported Configs====
 
'''ecf.xmlrpc.server''', '''ecf.xmlrpc.client'''<br>
 
'''ecf.xmlrpc.server''', '''ecf.xmlrpc.client'''<br>
  
Line 53: Line 95:
 
The generic providers are based upon tcp transport socket api.
 
The generic providers are based upon tcp transport socket api.
  
===OSGi Configuration Types===
+
===OSGi Service Exported Configs===
 
'''ecf.generic.server''', '''ecf.generic.client''', '''ecf.generic.ssl.server''', '''ecf.generic.ssl.client'''<br>
 
'''ecf.generic.server''', '''ecf.generic.client''', '''ecf.generic.ssl.server''', '''ecf.generic.ssl.client'''<br>
  
Line 82: Line 124:
 
==r-OSGi Provider==
 
==r-OSGi Provider==
  
===OSGi Configuration Types/ECF Container Types===
+
===OSGi Service Exported Configs===
 
'''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''', '''ecf.r_osgi.peer.ws'''  (see r-OSGi over Websockets below), '''ecf.r_osgi.peer.wss''' (see r-OSGi over Websockets below)<br>
  
Line 117: Line 159:
 
JMS/ActiveMQ providers are based upon the [https://en.wikipedia.org/wiki/Java_Message_Service Java Messaging Service] (JMS) specification version 1.1+.
 
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 Service Exported Configs===
 
'''ecf.jms.activemq.tcp.manager'''<br>
 
'''ecf.jms.activemq.tcp.manager'''<br>
 
'''ecf.jms.activemq.tcp.client'''<br>
 
'''ecf.jms.activemq.tcp.client'''<br>
Line 144: Line 186:
 
The ECF team has created a Remote Service provider based upon the MQTT3 [https://www.eclipse.org/paho/ Paho] implementation.  We are currently using Paho version 1.0.2.
 
The ECF team has created a Remote Service provider based upon the MQTT3 [https://www.eclipse.org/paho/ Paho] implementation.  We are currently using Paho version 1.0.2.
  
===OSGi Configuration Types/ECF Container Types===
+
===OSGi Service Exported Configs===
 
'''ecf.jms.mqtt.manager'''<br>
 
'''ecf.jms.mqtt.manager'''<br>
 
'''ecf.jms.mqtt.client'''<br>
 
'''ecf.jms.mqtt.client'''<br>
Line 173: Line 215:
 
===Jackson Jax-RS Distribution Provider===
 
===Jackson Jax-RS Distribution Provider===
  
====OSGi Configuration Types/ECF Container Types====
+
====OSGi Service Exported Configs====
 
'''ecf.jaxrs.jersey.server'''<br>
 
'''ecf.jaxrs.jersey.server'''<br>
 
'''ecf.jaxrs.jersey.client'''<br>
 
'''ecf.jaxrs.jersey.client'''<br>
Line 179: Line 221:
 
====[https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#i1693415 OSGi R7 Supported Intents]====
 
====[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'''
+
'''osgi.async''', '''osgi.private''', '''osgi.confidential'''
  
 
====Bundles====
 
====Bundles====
Line 202: Line 244:
 
===Apache CXF Jax-RS Implementation===
 
===Apache CXF Jax-RS Implementation===
  
====OSGi Configuration Types/ECF Container Types====
+
====OSGi Service Exported Configs====
 
'''ecf.jaxrs.cxf.server'''<br>
 
'''ecf.jaxrs.cxf.server'''<br>
 
'''ecf.jaxrs.cxf.client'''<br>
 
'''ecf.jaxrs.cxf.client'''<br>
Line 227: Line 269:
 
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.
 
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===
+
===OSGi Service Exported Configs===
 
'''ecf.rest.client'''<br>
 
'''ecf.rest.client'''<br>
  
Line 283: Line 325:
 
==Hazelcast Provider==
 
==Hazelcast Provider==
  
====OSGi Configuration Types/ECF Container Types====
+
====OSGi Service Exported Configs====
 
'''ecf.jms.hazelcast.manager'''<br>
 
'''ecf.jms.hazelcast.manager'''<br>
 
'''ecf.jms.hazelcast.member'''<br>
 
'''ecf.jms.hazelcast.member'''<br>
Line 289: Line 331:
 
====[https://osgi.org/specification/osgi.cmpn/7.0.0/service.remoteservices.html#i1693415 OSGi R7 Supported Intents]====
 
====[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'''
+
'''osgi.async''', '''osgi.basic''', '''osgi.private''', '''osgi.confidential''', '''hazelcast'''
  
 
===Bundles===
 
===Bundles===
Line 308: Line 350:
 
==JavaGroups (JGroups) Provider==
 
==JavaGroups (JGroups) Provider==
  
====OSGi Configuration Types/ECF Container Types====
+
====OSGi Service Exported Configs====
 
'''ecf.jgroups.manager'''<br>
 
'''ecf.jgroups.manager'''<br>
 
'''ecf.jgroups.client'''<br>
 
'''ecf.jgroups.client'''<br>

Revision as of 00:29, 15 October 2019

Contents

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)

Remote Service API Javadoc

All ECF RSA distribution providers implement the RSAPI.

Apache DubboProvider

OSGi Service Exported Configs

ecf.dubbo.server, ecf.dubbo.client

OSGi R7 Supported Intents

osgi.async, osgi.basic, osgi.private, osgi.confidential, dubbo, passByValue, ordered, exactlyOnce

Bundles

org.eclipse.ecf.provider.dubbo.common -- Common support bundle for both Server and Client
org.eclipse.ecf.provider.dubbo.server -- Remote Service Server Container
org.eclipse.ecf.provider.dubbo.client -- Remote Service Client Container

Example Demo Remote Service

org.eclipse.ecf.examples.provider.dubbo.demo.api -- Demo API bundle
org.eclipse.ecf.examples.provider.dubbo.demo.host -- Demo Service Impl bundle
org.eclipse.ecf.examples.provider.dubbo.demo.consumer -- Demo Service Consumer bundle

Source Code

ECF Github Repo: ECF Dubbo Distribution Provider Github Repo, Paths:
org.eclipse.ecf.provider.dubbo.common: bundles/org.eclipse.ecf.provider.dubbo.common, org.eclipse.ecf.provider.dubbo.server: bundles/org.eclipse.ecf.provider.dubbo.server
, org.eclipse.ecf.provider.dubbo.client: bundles/org.eclipse.ecf.provider.dubbo.client, org.eclipse.ecf.examples.provider.dubbo.demo.api: examples/org.eclipse.ecf.examples.provider.dubbo.demo.api, org.eclipse.ecf.examples.provider.dubbo.demo.impl: examples/org.eclipse.ecf.examples.provider.dubbo.demo.impl, org.eclipse.ecf.examples.provider.dubbo.demo.consumer: examples/org.eclipse.ecf.examples.provider.dubbo.demo.consumer,

P2 Repository

https://raw.githubusercontent.com/ECF/DubboProvider/master/build/

NOTE: Depends upon version 3.14.5 or higher of ECF Remote Service SDK. See ecf downloads for Eclipse or Target Platform installation

Karaf Feature

https://raw.githubusercontent.com/ECF/DubboProvider/master/build/karaf-features.xml

NOTE: Depends upon version 3.14.5 or higher of ECF Remote Service SDK. See Karaf Install Instructions

XML-RPC Provider

OSGi Service Exported Configs

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

[1]

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 Service Exported Configs

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 Service Exported Configs

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 Service Exported Configs

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 Service Exported Configs

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 Service Exported Configs

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 Service Exported Configs

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 Service Exported Configs

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 Service Exported Configs

ecf.jms.hazelcast.manager
ecf.jms.hazelcast.member

OSGi R7 Supported Intents

osgi.async, osgi.basic, osgi.private, osgi.confidential, hazelcast

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 Service Exported Configs

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.

Back to the top