Mauricio, Mdu, great to see that you are interested. Let me start with short introduction to the project we currently work on. Idea behind is to deliver out of the box flexible platform like architecture for jBPM and Drools as an alternative the the default deployment approach. At the moment here are the main high level requirements for the project:
- ability to version you logic executed by engine (it is all the java code that your processes, rules and events rely on)
- ability to version your processes, recommended is to utilize repository as default but they can be packaged together with logic and versioned with the same principles
- ability to version runtime environment, meaning that you can execute on the same server processes, rules, events that utilizes different version of the jBPM and Drools, most important in upgrade scenario when moving to the latest version to use the new features and fixed components/functionality
- isolalation of engine from the client, client does not have to be aware of versioning on the engine side but at the same time utilize its power
- application server agnostic although JBoss AS 7 is the reference and first and foremost implementation
I will try to give you overview of what we are up to. There are several core elements of the platform:
- runtime components - jbpm, drools and its dependency libraries (packaged as JBoss Module with OSGi descriptors to make it available for OSGi bundles)
- platform components - apis and implementation of the platform that provide comprehensive functionality to glue all components together (packaged as JBoss Modules with OSGi descriptors, same as runtime components)
- custom bundle - this is where custom logic code is and where configuration for ExecutionEngine (this is the main type that clients will interact with), it can have as well process and rules definitions embedded (pure OSGi bundle)
- client apps - enterprise applications that utilize power of execution engine independent of its underlying configuration and versioning schema (war, ear, etc)
Short info about of components relationship:
- runtime components will correspond to official version of the projects (5.2 for jBPM for instance)
- platform components will have apis that are independently versioned and are considered as very stable and should not change frequently - at least that is the plan; implementation of apis is bound to runtime components to allow bundles to use particular version of runtime.
- custom bundles are versioned as regular software artifacts that developers decide on
- client applications are versioned as regular artifacts that developers decide on
Life cycle of the components:
- on application server startup Jboss Modules are started and its OSGI bundle activators will be invoked
- for runtime components there are no bundle activators
- for platform implementation bundle activator registers its execution engine builder in OSGi service registry so custom bundles can look it up and builds its execution engine bound to particular version of platform and runtime
- custom bundle, bundle activator will look up execution engine builder to build the engine and registers it in OSGi service registry for client applications with number of properties to distinguish it from other engine, for instance version number, or valid time
- client application will be bound only to platform api and knowledge-api and dynamically look up execution engine from OSGi registry using resolvers (another platform artifact) responsible to find proper execution engine for given request
ok, that would be very brief description of what we are doing right now, in couple of days I can send you link to the repository where we are contributing as soon as some main interfaces will be defined. Let me know your comments and would be great to hear your requirements so we can think about them before finalizing conceptual phase.
P.S.
If you are interested to see this working (not exactly this but what delivers similar result) I can send you a private message with link to basic PoC we have done at the beginning of this project.
Cheers