SOAP, REST, and ECF Remote Services
Join the DZone community and get the full member experience.
Join For FreeIn addition to supporting the OSGi 4.2 remote services specification, we on the ECF team have also been working on support for accessing REST-style services, as well as those that use the Simple Object Access Protocol (SOAP).
The ability to support all these styles of service-oriented architecture is fundamentally enabled by ECF's provider architecture, but since mentioned that in a recent posting, in this post I'm going to touch on something useful that's enabled by this provider architecture.
Most remote services (whether web services, OSGi remote services, REST-based services, etc) have two basic roles
- The service host...aka the 'server'
- The service consumer...aka the 'client'
Typically,
the service host is first 'registered'...to make it available for
remote access, and after that the service consumer then accesses/uses
the remote service (e.g. makes remote method calls on a proxy, issues
http requests for resources, sends/receives messages, or has some other
way of actually accessing/calling the remote service).
Note
that the service host need not be exposed by a 'server' (although it
frequently is)...in some systems clients can register/expose services
as well as servers. And it's probably obvious that service consumers
don't have to be 'clients' either...i.e. they can be servers that are
communicating with other servers. This is why I use the role names
'host' and 'consumer' rather than 'server' and 'client' when referring
to remote services.
OSGi remote services use the OSGi service registry...for
both the host's registration of services, and the consumer's lookup and
access to a remote service. Whatever the transport used to implement
the distribution, typically both the host's registration and the
consumer's lookup are done via the OSGi service registry. This typical
use case implies, however, that both the host framework and the
consumer framework have access to the OSGi service registry (since both
registration and lookup are via the service registry).
But what
if you would like to consume a service that doesn't use OSGi (and
therefore doesn't have a service registry)? With ECF's remote services
API, along with our recently added REST
and SOAP support, we've enabled this use case (non-OSGi service host)
while still providing the benefits of using OSGi remote services for
the consumer.
How, you say? First of all, ECF's transport
independent architecture allows clients to talk whatever protocol they
require to communicate with a remote process...so, for example, the
XMPP provider is able to communicate with any remote system that uses
the (standardized) XMPP protocol. This does *not* have to be an OSGi-based system.
Second, ECF now has a very small, remote service client
API...specifically to allow consumers to interact with non-OSGi
services, while still using the OSGi service registry (if they wish) on
the client. Since both the ECF remote services API, as well as this new remote service client API
are also transport independent, and have both explicit support for
REST-style and SOAP-based transports, providers for specific REST-based
protocols and/or SOAP-based protocols are easy to create.
As an example, I recently created a SOAP/Web services client (for an existing web service), using Apache Axis (to convert wsdl to java), the WTP tooling (for automating the generation of the java code from wsdl),
and this new remote services client API. To the non-OSGi service host,
this client looks/behaves like all other clients. The same idea...for
an existing REST-based API (Twitter in this case), is shown by this demo.
Unlike
other clients, however, these clients can use OSGi to maximum value:
i.e. to structure the client in a modular way, to handle the dynamic
requirements of a remote/networked/unreliable service, or even (re)
expose the proxy as a another remote service...that other consumers can
access. This can be used for building load balancing of web services, or to aggregate sets of services...as well as other purposes.
Note
there is no additional tooling required to build such a client...since
your favorite tools for creating the SOAP-based and/or REST-based
clients may be used, alongside APIs and tooling for interacting with
the OSGi service registry...e.g. Eclipse PDE, OSGi declarative services and/or others.
Opinions expressed by DZone contributors are their own.
Comments