Hi,

I have to paste the proposal in this email since apache wiki is unreachable today, I will put the proposal on apache wiki when the wiki server is back.

Any suggestion for this proposal is appreciated.

Cheers

Freeman

=== Summary of Requirements Being Addressed ===

Allow JBI service units to be written using CXF with JAX-WS api and
deployed to any JBI Container.


=== Summary of Proposed Solution ===

To enable CXF service provider or consumer being deployed into JBI
container, a CXF Service Engine should be implemented. CXF service
Engine should be a JBI service engine which implement all standard JBI
component interface and JBI component lifecycle interface, also CXF
Service Eninge itself should be a container which CXF service provider
or consumer can be deployed into. To do this, a new JBI transport
should be implemented. JBI transport should use JBI normalized message
api to send or receive normalized messages. Message sent to NMR
transport should be only plain xml payload, no soap tag should be
included in the message.
CXF Service engine should work with binding component provided by any JBI container, by this way, multiple transport could be supported.

Also, a configurable CXF binding component which can support
multi-transport should be implemented, by means of the deployment
descriptor of service unit which will be deployed into CXF binding component, proper transport should be selected on the fly.


=== Changes and/or Additions to APIs and/or Internal Classes ===

To implement CXF Service Engine, according to JBI specification, several class should be added

public class CXFServiceEngine implements ComponentLifeCycle, Component {}

public class CXFBootstrap implements Bootstrap {}

public class CXFServiceUnitManager implements ServiceUnitManager {}

public class ComponentClassLoader extends URLClassLoader {}

and all service unit lifecycle change should delegate to

public class CXFServiceUnit{}

To implement JBI transport, according to CXF transport api, several class should be added

public class JBITransportFactory implements ConduitInitiator, DestinationFactory

public class JBIConduit implements Conduit

public class JBIDestination implements Destination


To implement configurable multi-transport supported CXF binding componet, should add class

public class CXFBindingComponent implements ComponentLifeCycle, Component {}

public class CXFBCBootstrap implements Bootstrap {}

=== Changes to Configuration ===

A JBITransport class and namespace mapping should be added to
bus-extensions.xml

<extensions xmlns="http://cxf.apache.org/bus/extension";>



<extension class="org.apache.cxf.jbi.transport.JBITransportFactory" deferred="true">
        <namespace>http://cxf.apache.org/transports/jbi</namespace>

<namespace>http://cxf.apache.org/transports/jbi/configuration</namespace>
    </extension>



</extensions>

=== Demos Impact ===

1. demo to show internal CXF consumer and internal CXF provider of JBI container

The CXF Service Engine will start both consumer and provider Serivce
Units in the assembly. The consumer is coded to wait for the providers
endpoint to activate. Once the provider endpoint has activated, the
consumer sends xml payload messages to the provider. These messages are taken by the CXF JBI transport, wrapped in a NormalizedMessage and sent via the NMR to the service provider. The responses are sent back in a similar fashion. greetMe use InOut MEP, sayHi use InOnly MEP. This demo work with both servicemix and OpenESB to illustrate CXF service engine can work with any JBI compatible container.

2. demo to show internal CXF provider and external CXF consumer with different transport

A standalone CXF client(as consumer) invoke servicemix soap binding
service unit using soap/http, the servicemix soap binding service
route this request to CXF service unit using XML/NMR specified by
JBI. Here servicemix soap binding service unit play the role as a
router, connecting CXF service consumer and provider with different
transport and different binding.

Also, this demo show CXF service engine can work with third party binding component.

3. demo to show internal CXF consumer and external CXF provider with different transport

A CXF client service unit(as consumer) invoke servicemix JMS binding service unit using XML/NMR, the servicemix JMS binding service route this request to CXF standalone server using XML/JMS. Here servicemix JMS binding service unit play the role as a router, connecting CXF service consumer and provider with different transport.

4. demo to show external CXF consumer and external CXF provider with different transport

A CXF client (as consumer) invoke servicemix soap binding service unit using SOAP/HTTP, the servicemix soap binding service unit route this request to servicemix jms binding service unit using XML/NMR, then servicemix jms binding service unit invoke CXF server(as provider) using XML/JMS. Here servicemix JMS binding component and servicemix http binding play the role as a kind of transformer, connecting CXF service consumer and provider with different transport.



5. demo to show CXF configurable multi-transport binding component can
   handle request or reponse with different transport(HTTP/CORBA/JMS
   and so on) according to the
   deployment descriptor of the service unit which is deployed into
   it.

=== Documentation Impact ===

Add document to describe how to develop CXF service unit and deploy it into CXF service engine.


--
Freeman Fang
Software Engineer

IONA Asia Pacific Software Development Center
No.2 Floor A Unit Information Center
Zhongguancun Software Park Haidian District,
Beijing, P.R.China

Tel.: +86-10-82825151 -  ex. 551
Fax: +86-10-8282-5210
[EMAIL PROTECTED]
-------------------------------------------------
Making Software Work Together TM


Reply via email to