camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Schneider Christian" <Christian.Schnei...@enbw.com>
Subject Problem with SOAP/JMS and transactions
Date Mon, 02 Nov 2009 11:02:29 GMT
Hi,

I am currently trying to get transactions for SOAP/JMS running. I am using
camel-cxf for SOAP handling and camel-jms for jms connections. 

I have a request reply service that should be able to do three different
things:

- no exception occurs in the implementation: The jms Message should be
committed and the normal reply should be sent
- The implementation throws an exception defined in the service contract:
The jms message should be committed and a fault should be sent
- The implemementation throws another kind of exception: The message should
be rolled back so it can be received again

In my service impl I tried throwing a RuntimeException or Error. In both
cases my jms message was committed and a fault was sent back to the client. 

I have attached my spring config. Is there anything I have to add to control
how exceptions influence the transaction?

I also have another question. When my transaction is rolled back, how can I
avoid running into an endless loop where the server always consumes the
message and then rolls it back because of the exception?

Greetings

Christian


Christian Schneider
Team Handel und Risikomanagement
Informationsverarbeitung Business Solutions Trading
EnBW Systeme Infrastruktur Support GmbH

Informationsverarbeitung 
Business Solutions
Handel und Dispatching
Durlacher Allee 93
76131 Karlsruhe

Tel : +49-(0)721-63-15482
Mail: christian.schneider@enbw.com

Sitz der Gesellschaft: Karlsruhe
Handelsregister: Amtsgericht Mannheim   HRB 108550
Vorsitzender des Aufsichtsrats: Dr. Bernhard Beck
Geschäftsführer: Jochen Adenau, Dr. Peter Krampf


------

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
		http://cxf.apache.org/core
http://cxf.apache.org/schemas/core.xsd
		http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
		http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
		http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd
		http://cxf.apache.org/transports/camel
http://cxf.apache.org/transports/camel.xsd"
>
<context:annotation-config/>

	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-camel.xml" />
	
	<bean id="configProps"
	
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigure
r">
		<property name="locations">
			<list>
				<value>classpath:jms.properties</value>
			</list>
		</property>
	</bean>
			
	<bean id="appModule" class="net.enbw.endur.AppModule">
		<property name="customerService" ref="customerService"/>
	</bean>
	
	<bean id="serviceImpl" class="net.enbw.endur.ServiceImpl">
	</bean>

	<!-- SOA configs below  -->
	
	<endpoint id="customerServiceEndpoint"
xmlns="http://cxf.apache.org/jaxws"
		xmlns:service="http://examples.etg.services.enbw.net/"
		serviceName="service:CustomerService"
		endpointName="service:CustomerServiceEndpoint"
	
address="camel://jms:queue.net.enbw.services.etg.examples.customerservice.Cu
stomerService"
		implementor="#serviceImpl">
		<features>
			<!-- Enables logging of SOAP messages. -->
			<logging xmlns="http://cxf.apache.org/core" /> 
		</features>
	</endpoint>

	<client id="customerService" xmlns="http://cxf.apache.org/jaxws"
		xmlns:service="http://examples.etg.services.enbw.net/"
		serviceName="service:CustomerService"
		endpointName="service:CustomerServiceEndpoint"
	
serviceClass="net.enbw.services.etg.examples.customerservice.CustomerService
V1"
	
address="camel://jms:queue.net.enbw.services.etg.examples.customerservice.Cu
stomerService">
		<features>
			<!-- Enables logging of SOAP messages. -->
			<!-- logging xmlns="http://cxf.apache.org/core" /-->
		</features>
	</client>

	<camelContext id="camelContext" trace="false"
xmlns="http://camel.apache.org/schema/spring">
	</camelContext>

	<bean id="jms"
		class="org.apache.camel.component.jms.JmsComponent">
		<constructor-arg index="0">
			<ref bean="jmsConfiguration" />
		</constructor-arg>
		<property name="connectionFactory"
ref="jmsConnectionFactory" />
	</bean>
	<bean id="jmsConfiguration"
		class="org.apache.camel.component.jms.JmsConfiguration">
		<property name="useMessageIDAsCorrelationID" value="true" />
		<property name="acknowledgementModeName" value="TRANSACTED"
/>
		<property name="explicitQosEnabled" value="true" />
		<property name="receiveTimeout"
value="${jms.receiveTimeout}" />
		<property name="requestTimeout"
value="${jms.requestTimeout}" />
		<property name="recoveryInterval"
value="${jms.recoveryInterval}" />
		<property name="timeToLive" value="${jms.timeToLive}" />
		<property name="transacted" value="true" />
		<property name="transactedInOut" value="true" />
		<property name="transactionManager"
ref="jmsTransactionManager"/>
	</bean>

	<bean id="jmsTransactionManager"
class="org.springframework.jms.connection.JmsTransactionManager">
		<property name="connectionFactory"
ref="jmsConnectionFactory" />
	</bean>

	<bean id="jmsConnectionFactory"
		class="com.tibco.tibjms.TibjmsConnectionFactory">
		<property name="serverUrl" value="${jms.serverUrl}" />
		<property name="userName" value="${jms.userName}" />
		<property name="userPassword" value="${jms.userPassword}" />
		<property name="reconnAttemptCount"
value="${jms.reconnAttemptCount}" />
		<property name="reconnAttemptDelay"
value="${jms.reconnAttemptDelay}" />
	</bean>

</beans>


Mime
View raw message