Hi Christian
If you want the redelivery policy take effect, you need to change your
camel context like this
<camelContext id="camelContext" trace="false"
xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:client"/>
<to
uri="camel://jms:queue.net.enbw.services.etg.examples.customerservice.CustomerService"
/>
</route>
<from
uri="camel://jms:queue.net.enbw.services.etg.examples.customerservice.CustomerService"
<to uri="direct:server">
</route>
</camelContext>
And you client's address should camel://direct:client, server's address
should be camel://direct:server
Willem
Claus Ibsen wrote:
On Mon, Nov 2, 2009 at 12:02 PM, Schneider Christian
<[email protected]> wrote:
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?
You need to configure the redelivery policy of your JMS broker for that
For example with AMQ its:
http://activemq.apache.org/redelivery-policy.html
But for Tibco you gotta resort to their documentation how to do that.
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: [email protected]
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>