Christian,

I'll take a look at that.

The nice thing about using the white board as a webservice registration
mechanism is that I can define all my interceptors, handlers, and security
in a single project.  Then when a bundle is installed it registers itself
for exposure.  My new server project picks it up an creates JAXWS and JAXRS
servers/endpoints for the bundle and exposes it.

When the bundle is uninstalled the unregister method gets called on the
manager and that then undeploys the related endpoint.  No dangling resources
or proxy time outs.

My manager project keeps a map of the registered microservice and as a
convenience in my basic implementation of the microservice I instantiate a
UUID to a final String on it and return that as the unique identifier.  So
when the bundle is uninstalled and the manager receives that notificatoin
and simply calls to get the unique identifier to pull the container object
that holds the JAX WS and JAX RS servers in it.  It calls stop/destroy on
them and nulls the handles out in the container as well as removing it from
its map/regsitry.

Now when the microservice installs it gets auto deployed with all my
security and logging and badgerfish settings.  It is also automatically
invoked by a web service call without having to configure routes.  As for
the use of Camel routes, I've now inverted that so that the routes I use
live only in the bundles and don't talk across them.  The service interfaces
are for cross bundle talking.  So all my projects now have a "connector"
class and I'm using @EndpointInject to inject the camel routes.

So when the bundle gets deployed, it is auto installed as a webservice if it
exposes itself via the whiteboard/service registry.  When the service is
called it invokes the implementation class which holds a handle to the
connector.  That endpoint can then call 0..N camel routes.  In a way it is
like using an inverted Camel Java DSL. 

Because that connector class wraps the camel routes any casting or fishing
of references out of lists (like MessageContentList or BeanIO arrays) can be
done inside that object and not be visible to the calling class.  The caller
is just invoking a method on a POJO and getting a response back.

The only downside is I'm now having to use the JAX WS and JAX RS service
factories directly and creating the endpoints myself as the Camel or at
least Camel/blueprint wouldn't permit that sort of dynamism.

Because I'm using that service registration mechanism I can also instantiate
multiple managers bound to different ports with different
security/transports and simply filter on the OSGi microservice registration
to determine if it should expose it or not.  So if I have different security
requirements for invoices, supplier look up, etc. I can set that up in one
project and then whatever bundles get installed and register themselves
correctly will get picked up and exposed automatically.





--
View this message in context: 
http://camel.465427.n5.nabble.com/CXF-cross-cutting-concerns-tp5778798p5779020.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to