Definitely interested. It's been a while since I've checked in on the ServiceMix project and the directions wrt OSGi look extremely promising.
On 8/24/07, Nodet Guillaume <[EMAIL PROTECTED]> wrote: > > Any other people interested ? > > Cheers, > Guillaume Nodet > > On Aug 23, 2007, at 3:37 PM, Kit Plummer wrote: > > > I'd be up for a few chat sessions! > > > > On 8/23/07, Nodet Guillaume <[EMAIL PROTECTED]> wrote: > >> > >> Btw, if there is sufficient interest, we could organize irc meetings > >> to discuss these topics and post the log to the dev list for > >> archiving > >> and later discussion. > >> > >> Cheers, > >> Guillaume Nodet > >> > >> On Aug 22, 2007, at 4:59 PM, Nodet Guillaume wrote: > >> > >>> As I explained in the other thread, I've been working on a new API > >>> for ServiceMix 4.0. > >>> Hopefully this will serve as an input for JBI 2.0. > >>> This API is available at https://svn.apache.org/repos/asf/ > >>> incubator/servicemix/branches/servicemix-4.0/api > >>> > >>> So here a few key changes: > >>> * clean integration with OSGi > >>> * the NormalizedMessage can contain not only XML > >>> * no more components > >>> * no more JBI packaging (just use OSGi bundles) > >>> * move the Channel to the Endpoint > >>> * use push delivery instead of pulling exchanges > >>> * introduce a single interface for identifying the Target of an > >>> Exchange > >>> > >>> As we remove components, everything goes down to the endpoint which > >>> become a key feature. > >>> > >>> The endpoint must implement the Endpoint interface. In OSGi, the > >>> NMR would listen to endpoints > >>> registered in the OSGi registry and call the registry to register / > >>> unregister the endpoints. > >>> As part of the endpoint registration, the NMR would inject a > >>> Channel into them, thus actually activating the > >>> endpoint. I guess I could write a sequence diagram for that > >>> (anybody knows a good tool for uml ?). > >>> In a non OSGI environment, the Endpoint will be registered in the > >>> Registry by calling the register method > >>> somehow. > >>> > >>> The Endpoint receives Exchange to be processed on the process > >>> method. > >>> I think we should keep the JBI 1.0 semantics and the endpoint use > >>> the same process as for JBI 1.0, which is > >>> send the exchange back using the Channel (with the response / > >>> fault / error / done). This will put the threading, > >>> transactions and security burden on the container itself. Which > >>> means it is easier to write JBI apps :-) > >>> > >>> Exchanges can be created using the Channel#createExchange method. > >>> The only change I'd like to > >>> integrate in the messaging API is to allow for non xml payloads and > >>> maybe untyped attachments. The body > >>> could be converted automatically to a given type if supported (I > >>> think Camel does it nicely, so I'm thinking of > >>> shamelessly copying the converter layer). I have added a few > >>> helper methods on the exchanges and > >>> messages (copy, copyFrom, ensureReReadable, display) to ease > >>> message management. > >>> > >>> For the deployment part, there is no packaging anymore. One would > >>> deploy an OSGi bundle that would > >>> register the needed endpoints in the OSGi registry. For certain > >>> types of endpoints, we may need an external > >>> activation process (such as creating a server socket for listening > >>> to HTTP requests) that may need to be shared > >>> across endpoints of a given type. In such a case, you would deploy > >>> a "component" that listens to new > >>> endpoints implementing HttpEndpoint for example. When a new > >>> endpoint is registered, the listener would > >>> activate a server socket that could be shared across all http > >>> endpoints. In a different way, if we have a BPEL > >>> engine, the bpel "component" would listen for new bundles and look > >>> for a specific file containing deployment > >>> information. The component would register new endpoints in the OSGi > >>> registry as needed (we could do that > >>> for jaxws pojos using cxf for example). > >>> So I said there is no more components, because this feature is not > >>> in the api anymore, but we will certainly need > >>> these components for some use cases. For simple endpoints, you > >>> would not need any component at all. > >>> Another benefit is that you can easily deploy a whole application > >>> inside a single OSGi bundle. Using spring-osgi, > >>> the bundle would just consist in a spring configuration file > >>> containing the endpoints declaration and expose them > >>> as OSGi services. > >>> > >>> Of course, we need to write a JBI 1.0 compatibility layer, and we > >>> could have an intermediate layer where SAs and > >>> JBI components could be OSGi bundles directly, thus leveraging the > >>> OSGi classloading mechanism. > >>> > >>> The thing I'm not completely sure about if the Target interface > >>> which aims to identify the target of an exchange. > >>> I'm thinking that some metadata are associated with endpoints (like > >>> service name, interface name, wsdl > >>> location, etc..). These metadatas could be used to retrieve > >>> targets using the Registry. We could plug in different > >>> mechanisms to query the metadata (simple lookup per id, policy > >>> based, etc...). And the result itself could be > >>> not only a single Endpoint, but could include some policies like: > >>> load balance between all the endpoint implementing > >>> the given interface, etc.... Also, I think Target should be > >>> injected on Endpoints using spring, so you would look up a > >>> targe using a spring bean factory (or multiple ones): > >>> <smx:endpoint-target id="my-endoint-id" /> > >>> or > >>> <smx:interface-target name="my:qname" /> > >>> The API is quite open right now, so any ideas welcome. > >>> > >>> I think i covered the main areas of the API. The main goal is OSGi > >>> and leveraging it as much as possible. There are > >>> still some gray areas: what about the start/stop/shutdown lifecycle > >>> which may be needed in some cases as I > >>> discovered recently (when you want to gracefully shutdown a jms > >>> consumer without loosing the ongoing messages > >>> for example). I also want to give due credits to James, which has > >>> been working with me on that. > >>> Remember that nothing can't be changed and that' s why I'm asking > >>> for feedback at this early stage, where there are > >>> only ideas ;-) > >>> > >>> Feedback welcome.... > >>> > >>> Cheers, > >>> Guillaume Nodet > >>> > >>> > >> > >> > >