Note that the lwcontainer' s only purpose is to be able to deploy existing lightweight components. It relies on servicemix specific features, whereas other components are not specifically tied to ServiceMix. I' d really like to get rid of that in a very very long term. * implement existing lw components (xslt, ftp, drools, groovy, ...) as standard JBI components * create a simpler programming model (maybe like the old spring client toolkit) or enhance the jsr181 component .
Recall that a JBI container is a "container of containers". JBI components are not so easy to write (if you want it to be reusable) and when possible, all JBI related features should be hidden by SE when you want to develop a service. That' s what the jsr181 component or a BPEL engine SE do: you just deploy a service unit (pojo, xslt, bpel, ...) in a container (the component) to activate a service. Cheers, Guillaume Nodet On 7/24/06, Guillaume Nodet <[EMAIL PROTECTED]> wrote:
Quoting the JBI spec: "SEs are the business logic drivers of the JBI system." "BCs are used to send and receive messages via particular protocols and transports." Let's talk about the jsr181 component. I think the definition for BCs clearly indicates that the jsr181 component is not a BC, so I think it must be a SE ;) The fact that you deploy some java code on it is just a side point: each JBI component has its own deployment model for service units and I would not consider a java class on a different level than a BPEL process. If you do not want to deal with classpath issues, we could add a default classpath location of "." to the SU if nothing is specified. And I do think that the service deployed on the jsr181 component contains the business logic in the same way a BPEL process do. The lwcontainer is a bit of a problem. If possible, i would not categorize it as a BC or SE. Actually, the lwcontainer will never send or receive exchange itself. The only operation performed is to start / stop lightweight components (which can be BCs or SEs). For the shared-library part, it would be cool to put lightweight components in a shared library. However, due to classloader considerations, this shared library would need to contain all the dependencies of all lightweight components, and that would make a very big SL (in tens of MBs). WE could also put all these dependencies in the lwcontainer, but the problem would be the same. I' m not very keen on having a 30 Mb component just to use a lightweight component i would have created on my own. Btw, SL can not really be used when embedding servicemix -- or you use the full JBI feature set (component installation, SU deployment, etc) and it is not really embedded anymore ;) Feel free to argue :) Cheers, Guillaume Nodet On 7/24/06, Philip Dodds <[EMAIL PROTECTED] > wrote: > > I have been working through the lw-container, JSR181 and wanted to share > some thoughts on these service engines. > > I'm wondering whether then should be service engines, since they each > require a additions to the classpath I'm wondering if they shouldn't be > Binding Component Archetypes. I suppose the question becomes one on how > > best to define the JBI spec. > > Here is the logic for my argument: > > If a binding component is meant to broker some interaction with an > external > system then the JSR-181 and lw-container are most likey doing that. If > I > can presenting a service interface to the ESB for business logic (most > common usecase in the JSR181) then I would have thought I was a binding > component. In a binding component we would be able to handle additions > to > the classpath through the JBI descriptor, while in the Service Units > this > is don't outside of JBI. > > I'm thinking that the lw-container and jsr-181 se could be better places > as > shared libraries that archetypes use - such that you can create an > archetype > (even add classes to the dependencies) and still have the functionality. > > This leads into the ServiceMix components and LW-Container - I'm > wondering > whether servicemix-components would be better off being a Shared > Library, > then you could create a binding component based on the lightweight > component > shared library and the servicemix components shared library and > hopefully > the class path would be resolved. The only problem I see here is that > if > you are working in a servicemix embedded model you might need to be able > to > reference shared libraries in your servicemix.xml to force them to load > in > there so that the packaging can be consistent. > > I realize this is all large scale changes but I wanted to throw them out > > there to see what people think? > > Cheers > > P > >