|
Page Edited :
CAMEL :
Better JMS Transport for CXF Webservice using Apache Camel
Better JMS Transport for CXF Webservice using Apache Camel has been edited by Christian Schneider (Aug 28, 2008). Change summary: Improved style of article after discussion with Glen Mazza on the CXF dev list Configuring JMS in Apache CXF is possible but not really easy or nice. This article shows how to use Apache Camel to provide a better JMS Transport for CXF. Why not simply use JMS Features of Apache CXFJMS configuration in Apache CXF is possible but the configuration is not very flexible and quite error prone. In CXF you have to configure a JMSConduit or a JMSDestination for each webservice. The connection between Conduit and the Service proxy is the endpoint name which looks like "{http://service.test\}HelloWorldPort.jms-conduit". As this name is never explicitly configured elsewhere it is quite probable that you misspell the name. If this happens then the JMS Transport just does not work. There is no good error reporting to show you what you did wrong. The next thing is that you have to use JNDI for the connectionFactory and the queue name. This is something that beginners with JMS have many problems with. Why is using Apache Camel better in the JMS Transport layerIn Apache Camel you can simply reference the ConnectionFactory as a Spring bean. This means you can either define it directly in a Spring bean what is the ideal way to start or you can use Spring´s JNDI binding to retrieve it from your application server for production use. So how to connect Apache Camel and CXFThe best way to connect Camel and CXF is using the Camel transport for CXF <bean class="org.apache.camel.component.cxf.transport.CamelTransportFactory"> <property name="bus" ref="cxf" /> <property name="camelContext" ref="camelContext" /> <property name="transportIds"> <list> <value>http://cxf.apache.org/transports/camel</value> </list> </property> </bean> This bean registers with CXF and provides a new transport prefix camel:// that can be used in CXF address configurations. The bean references a bean cxf which will be already present in your config. The other refrenceis a camel context. We will later define this bean to provide the routing config.
ConclusionAs you have seen in this example you can use Camel to dramatically ease JMS configuration compared with CXFs native JMS Transport. This is of course only a workaround. The CXF team already works on the native JMS config for CXF to make it at least as good as Camel´s. As CXF and Camel are two projects that have very good connections between them it is perhaps even possible to have a common transport layer for CXF and camel. |
Unsubscribe or edit your notifications preferences
