easysoa / EasySOA

A light, collaborative platform to make Service Oriented Architecture simple.
http://www.easysoa.org
35 stars 8 forks source link

Discovering deployables #97

Open mdutoo opened 12 years ago

mdutoo commented 12 years ago

Service discovery allow comparison for sanity check purposes. Versioned services allow to check that the "right" service is used along an EasySOA-integrated SOA development process (ex. in dev, according to design).

However they do not allow that when dealing with what already exists in the entreprise, because the version of the consumer is not known. It's possible to do a discovery of consumed services, but all too often consumed service definitions point to an unversioned, runtime only definition provided by the provider's service stack - so even if they had this information, it would be about the provider.

The solution is discovery of versioned service consumer implementations, that is applications, and at a grain both finer and more manageable (because that's their implementation i.e. what they're made of), deployables (or "modules"). Deployables can be dependency artifacts (ex. in Java Maven artifacts or OSGi bundles, in Ruby Gems...), or be more specific to platforms.

If versioned deployables's internals have information (typically configuration ex. SCA, OSGi, but also processes ex. BPEL, XPDL) :

Else all deployables (or a root deployable) can be used as signature / trace of the application version, and the same checks be made, albeit on a smaller perimeter.

in Java, with Maven

Each maven artifact (jar, war, pom...) is a versioned deployable, and to each ApplicationImpl is mapped a root artifact (typically a pom). Maven snapshots can also be used it they're further versioned by a timestamp. Beyond, maven artifacts are also OK for most Java deployables (Nuxeo bundles, OSGi bundles, JBI, Bonita's .bar archives...) and dependency managers (Ivy...).

Maven artifacts can be discovered :

Doing Maven artifact discovery :

They can use the same EasySOA remote Service & Deployable discovery API to feed EasySOA with information they already manage : their versioned deployables, the services they expose and consume and further internals info. They can do so by pull (EasySOA asking them) or push. Pull can be done by Jasmine probes, or by EasySOA (triggered by user action, scheduling or their registration).

Priorities

mkalam-alami commented 12 years ago

Specs for the Discovery by Classpath Analysis prototype

Configuration/launch

Discovery behavior

  1. Load the configuration
  2. Explore the classloader to find all Jars and gather their names
  3. Send a notification to EasySOA, to store the jar list in the configured app (in configured environment)
  4. In EasySOA, store in a list property of AppliImpl the jar list, while making sure there are no duplicates (in case several notifications are fired)

Validation improvement

(Discovery note: in general, if we don't know all that we need to send a discovery notification, the pending data should be stored and the user action required on the probe side - not on the EasySOA core)