Here is a snapshot of the configs used  :

1) ActiveMQ

...
   <bean id="x3sPolicy" class="org.apache.activemq.RedeliveryPolicy">
        <property name="maximumRedeliveries" value="1"/>
    </bean>

    <bean id="activemqConnectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="tcp://localhost:61616" />
        <property name="redeliveryPolicy" ref="x3sPolicy"/>
    </bean>

    <bean id="pooledConnectionFactory"
class="org.apache.activemq.pool.PooledConnectionFactoryBean">
        <property name="maxConnections" value="8" />
        <property name="maximumActive" value="500" />
        <property name="transactionManager" ref="transactionManager" />
        <property name="connectionFactory" ref="activemqConnectionFactory"
/>
        <property name="resourceName" value="activemq.default" />
    </bean>

    <bean id="resourceManager"
class="org.apache.activemq.pool.ActiveMQResourceManager"
init-method="recoverResource">
          <property name="transactionManager" ref="transactionManager" />
          <property name="connectionFactory" ref="activemqConnectionFactory"
/>
          <property name="resourceName" value="activemq.default" />
    </bean>

    <osgi:reference id="transactionManager"
interface="javax.transaction.TransactionManager" />

    <osgi:service ref="pooledConnectionFactory">
        <osgi:interfaces>
            <value>javax.jms.ConnectionFactory</value>
        </osgi:interfaces>
        <osgi:service-properties>
            <entry key="name" value="default"/>
        </osgi:service-properties>
    </osgi:service>


2) Camel ActiveMQComponent

    <bean id="active-mq"
class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="transacted" value="true"/>
        <property name="connectionFactory">
            <osgi:reference interface="javax.jms.ConnectionFactory"/> //
OSGI service is published by ActiveMQ service
        </property>        <property name="transactionManager">
            <osgi:reference
interface="org.springframework.transaction.PlatformTransactionManager"/>
        </property>
    </bean>

2) Hibernate - DAO

    <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

        <property name="mappingLocations">
            <list>

<value>classpath*:META-INF/com/xpectis/x3s/platform/model/*.hbm.xml</value>
            </list>
        </property>

        <property name="hibernateProperties">
            <props>
                <prop
key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop
key="hibernate.cglib.use_reflection_optimizer">true</prop>
                <prop key="hibernate.jdbc.batch_size">10</prop>
                <prop
key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
                <prop
key="hibernate.transaction.factory_class">org.springframework.orm.hibernate3.SpringTransactionFactory</prop>
            </props>
        </property>
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>

Remark : To avoid the JNDI lookup issue with Hibernate JTATransaction
Factory, I use springTransactionFactory (see here for more info
http://forum.springsource.org/showthread.php?p=215720)

3) Service layer

Here is the definition of the service used from Camel route :

    <bean id="requestServiceTarget"
class="com.xpectis.x3s.platform.service.impl.RequestServiceImpl">
        <property name="requestDAO">
            <osgi:reference
interface="com.xpectis.x3s.platform.dao.RequestDAO"/>
        </property>
    </bean>

   <!-- Abstract service using the Geronimo Transaction Manager -->
    <bean id="abstractService" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
         <property name="transactionManager">
            <osgi:reference
interface="org.springframework.transaction.PlatformTransactionManager"/>
        </property>
    </bean>

    <bean id="requestService"
          parent="abstractService"

class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

        <property name="target">
            <ref bean="requestServiceTarget" />
        </property>

        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>

4) Route

    <bean id="txErrorHandler"
class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder">
        <property name="springTransactionPolicy"
ref="PROPAGATION_REQUIRED"/>
    </bean>

    <bean id="PROPAGATION_REQUIRED"
class="org.apache.camel.spring.spi.SpringTransactionPolicy">
        <property name="transactionManager">
            <osgi:reference
interface="org.springframework.transaction.PlatformTransactionManager"/>
        </property>
    </bean>
         <!-- Core component
         Flow IN to OUT
         Process P1
        -->
        <camel:route>
            <camel:from ref="fileClientEndpoint" />

            <camel:setHeader headerName="origin">
                <camel:constant>file</camel:constant>
            </camel:setHeader>
            <camel:setHeader headerName="messageType">
                <camel:constant>OINP</camel:constant>
            </camel:setHeader>
            <camel:convertBodyTo type="java.lang.String"/>
            <camel:to ref="directRequestEndpoint" />
        </camel:route>

        <!-- Core component
         Flow IN to OUT
         Process P2
        -->
        <camel:route>
            <camel:from ref="directRequestEndpoint" />
            <camel:transacted ref="PROPAGATION_REQUIRED"/>
            <!-- Call the requestService to save the request -->
            <camel:bean ref="serviceHelper" method="createRequest"/>
            <camel:bean ref="serviceHelper" method="generateError" />
            <camel:to uri="direct:testTx"/>
        </camel:route>

5) Code of the method where the injected Spring service is called

    public Request createRequest(@Header(value = "messageType") String
messageType,
            @Header(value = "CamelFileNameOnly") String fileName, @Body
String body) {

        if (LOG.isDebugEnabled()) {
            LOG.debug(">> Header message Type : '" + messageType + "'");
            LOG.debug(">> Header CamelFileNameOnly : ' " + fileName + "'");
            LOG.debug(">> Body : " + body);
        }

        // Instantiate the Request class
        Request request = new Request();

        // Add the CSV records to the body field, ...
        request.setMessageContent(body.getBytes());
        request.setFileName(fileName);
        request.setRequestType(messageType);

        // Set the status
        request.setRequestStatus(ProcessingStatusType.NEW.getValue());

        // Save the request in the DB
        this.requestService.saveRequest(request);

        // add the request object to the exchange
        // exchange.getOut().setBody(request);

        return request;
    }

and the bundles used for Tx/Spring/ActiveMq stuffs. Other are standards like
Hibernate/MySQL/Spring and Camel 2.0-SNAPSHOT

ka...@root:osgi> list | grep Tx
[  57] [Active     ] [           ] [   60] Geronimo TxManager :: Transaction
(2.2.0.r634076)
[  60] [Active     ] [           ] [   60] Geronimo TxManager :: Connector
(2.2.0.r634076)
ka...@root:osgi> list | grep Trans
[  57] [Active     ] [           ] [   60] Geronimo TxManager :: Transaction
(2.2.0.r634076)
[  58] [Active     ] [           ] [   60] Spring Transaction (2.5.6.SEC01)
[  59] [Active     ] [           ] [   60] Apache Felix Transaction
(0.9.0.SNAPSHOT)

For information

ka...@root:osgi> list | grep Spring
[  16] [Active     ] [           ] [   30] Spring Core (2.5.6.SEC01)
[  18] [Active     ] [           ] [   30] Spring AOP (2.5.6.SEC01)
[  38] [Active     ] [           ] [   30] Spring Beans (2.5.6.SEC01)
[  40] [Active     ] [           ] [   30] Spring Context (2.5.6.SEC01)
[  44] [Active     ] [Created    ] [   30] Apache Felix Karaf :: Spring
Deployer (1.2.0.SNAPSHOT)
[  58] [Active     ] [           ] [   60] Spring Transaction (2.5.6.SEC01)
[  73] [Active     ] [           ] [   60] Spring JMS (2.5.6.SEC01)
[  83] [Active     ] [           ] [   60] Spring ORM (2.5.6.SEC01)
[  84] [Active     ] [           ] [   60] Spring JDBC (2.5.6.SEC01)
ka...@root:osgi> list | grep activemq
[  65] [Active     ] [           ] [   60] activemq-core (5.2.0)
[  66] [Active     ] [           ] [   60] activemq-ra (5.2.0)
[  67] [Active     ] [           ] [   60] activemq-console (5.2.0)
[  68] [Active     ] [           ] [   60] activemq-pool (5.2.0)
[  75] [Active     ] [           ] [   60] activemq-camel (5.2.0)
[  90] [Active     ] [           ] [   60] x3s-activemq (1.0.0.SNAPSHOT)


Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer

*****************************
blog : http://cmoulliard.blogspot.com


On Fri, Jul 3, 2009 at 4:17 PM, Guillaume Nodet <gno...@gmail.com> wrote:

> It is certainly possible to do that.  You need to configure the JMS
> connection factory and the JDBC datasource so that they are aware of
> the transaction manager.
> How did you set up those resources ? They are the critical ones for using
> XA.
>
> On Fri, Jul 3, 2009 at 16:14, Charles Moulliard<cmoulli...@gmail.com>
> wrote:
> > OK. I will change my config to use a separate TransactionManager for DB
> > stuffs.
> >
> > My idea was to use the same transaction manager (JTA) in the application
> for
> > JMS, DB, ... transactions but If this is not possible ...
> >
> > Regards,
> >
> > Charles Moulliard
> > Senior Enterprise Architect
> > Apache Camel Committer
> >
> > *****************************
> > blog : http://cmoulliard.blogspot.com
> >
> >
> > On Fri, Jul 3, 2009 at 4:08 PM, Claus Ibsen <claus.ib...@gmail.com>
> wrote:
> >
> >> On Fri, Jul 3, 2009 at 4:04 PM, Charles Moulliard<cmoulli...@gmail.com>
> >> wrote:
> >> > No. In the route presented here I don't make 2 independant DB calls.
> Only
> >> > one. The second bean called (generateError) only do a throw (without
> any
> >> > Hibernate/DB call)
> >> >
> >> > By the way, in the example
> >> >
> >>
> apache-camel-source\components\camel-spring\src\test\java\org\apache\camel\spring\interceptor\TransactionalClientDataSourceTest.java,
> >> > two DB calls are made by two different beans and rollback is done !!
> >> Yes and it is because it uses a DB TX manager
> >>
> >>    <!-- spring transaction manager -->
> >>    <bean id="txManager"
> >>
> class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
> >>        <property name="dataSource" ref="dataSource"/>
> >>    </bean>
> >>
> >> This TX manager knows about DB stuff.
> >>
> >>
> >>
> >>
> >> >
> >> > Regards,
> >> >
> >> > Charles Moulliard
> >> > Senior Enterprise Architect
> >> > Apache Camel Committer
> >> >
> >> > *****************************
> >> > blog : http://cmoulliard.blogspot.com
> >> >
> >> >
> >> > On Fri, Jul 3, 2009 at 3:56 PM, Claus Ibsen <claus.ib...@gmail.com>
> >> wrote:
> >> >
> >> >> On Fri, Jul 3, 2009 at 3:52 PM, Guillaume Nodet<gno...@gmail.com>
> >> wrote:
> >> >> > If the message is redelivered, this means there is a rollback.
> >> >> > I guess the problem is that your DB is not enlisted in the
> >> transaction.
> >> >> > However, if you don't want to use XA and two phase commit, you
> should
> >> >> > try to perform the database step as late as possible so that there
> is
> >> >> very few
> >> >> > chances that anything wrong happen after the data has been written
> to
> >> the
> >> >> DB.
> >> >> > Btw, in your route, I don't see at which step the message is
> written
> >> >> > to the DB ... ?
> >> >>
> >> >> He uses 2 independent DB calls and uses a JMS TX manager. Then its
> >> >> bound not to be enlisted in the same TX manager.
> >> >> So as G. Nodet said try to combine your DB calls into a single
> >> >> invocation, eg you might need to start / stop a local DB transaction
> >> >> yourself using Hibernate and/or JPA.
> >> >>
> >> >>
> >> >>
> >> >> >
> >> >> > On Fri, Jul 3, 2009 at 15:26, Charles Moulliard<
> cmoulli...@gmail.com>
> >> >> wrote:
> >> >> >> I have created a small route without JMS stuff.
> >> >> >>
> >> >> >> Here is the route :
> >> >> >>
> >> >> >>        <camel:route>
> >> >> >>            <camel:from ref="fileClientEndpoint" />
> >> >> >>
> >> >> >>            <camel:setHeader headerName="origin">
> >> >> >>                <camel:constant>file</camel:constant>
> >> >> >>            </camel:setHeader>
> >> >> >>            <camel:setHeader headerName="messageType">
> >> >> >>                <camel:constant>OINP</camel:constant>
> >> >> >>            </camel:setHeader>
> >> >> >>            <camel:convertBodyTo type="java.lang.String"/>
> >> >> >>            <camel:to ref="directRequestEndpoint" />
> >> >> >>        </camel:route>
> >> >> >>
> >> >> >>        <camel:route>
> >> >> >>            <camel:from ref="directRequestEndpoint" />
> >> >> >>            <camel:transacted ref="PROPAGATION_REQUIRED"/>
> >> >> >>            <!-- Call the requestService to save the request -->
> >> >> >>            <camel:bean ref="serviceHelper"
> method="createRequest"/>
> >> >> >>            <camel:bean ref="serviceHelper" method="generateError"
> />
> >> >> >>            <camel:to uri="direct:testTx"/>
> >> >> >>        </camel:route>
> >> >> >>
> >> >> >> Unfortunately when a throw error is generated in bean called
> >> >> "generateError"
> >> >> >>
> >> >> >>    public void generateError() {
> >> >> >>            throw new IllegalArgumentException("Generate error to
> test
> >> >> >> rollback");
> >> >> >>    }
> >> >> >>
> >> >> >> records are committed in the DB and not rollbacked
> >> >> >>
> >> >> >>
> >> >> >> I see that when the error is throw the message is redelivered a
> >> second
> >> >> time
> >> >> >> as this parameter has been defined in the ActiveMq
> >> >> >>
> >> >> >>    <bean id="x3sPolicy"
> class="org.apache.activemq.RedeliveryPolicy">
> >> >> >> *        <property name="maximumRedeliveries" value="1"/>*
> >> >> >>    </bean>
> >> >> >>
> >> >> >>    <bean id="activemqConnectionFactory"
> >> >> >> class="org.apache.activemq.ActiveMQConnectionFactory">
> >> >> >>        <property name="brokerURL" value="tcp://localhost:61616" />
> >> >> >>        <property name="redeliveryPolicy" ref="x3sPolicy"/>
> >> >> >>    </bean>
> >> >> >>
> >> >> >> Question :  Why policy defined in the ActiveMq is taken into
> account
> >> >> here ?
> >> >> >> Why the rollback does not occur ?
> >> >> >>
> >> >> >> Charles Moulliard
> >> >> >> Senior Enterprise Architect
> >> >> >> Apache Camel Committer
> >> >> >>
> >> >> >> *****************************
> >> >> >> blog : http://cmoulliard.blogspot.com
> >> >> >>
> >> >> >>
> >> >> >> On Fri, Jul 3, 2009 at 12:28 PM, Claus Ibsen <
> claus.ib...@gmail.com>
> >> >> wrote:
> >> >> >>
> >> >> >>> On Fri, Jul 3, 2009 at 12:16 PM, Guillaume Nodet<
> gno...@gmail.com>
> >> >> wrote:
> >> >> >>> > In this case, you should not use transactions for the DB at
> all,
> >> but
> >> >> >>> > if any error occurs while saving the data, an exception should
> be
> >> >> >>> > thrown and should rollback the transaction for the JMS layer.
> >> >> >>> Yeah that would be perfect unless he does some work afterwards
> the
> >> DB
> >> >> >>> and that throws an Exception.
> >> >> >>> Then the DB layer have already committed.
> >> >> >>>
> >> >> >>> So trying to avoid doing work after the DB layer would help.
> >> >> >>>
> >> >> >>>
> >> >> >>> Is this not possible?
> >> >> >>> But he is doing JPA/Hibernte stuff so he could grab the "session"
> >> and
> >> >> >>> invoke a rollback manually in case errors happen afterwards.
> >> >> >>>
> >> >> >>>
> >> >> >>>
> >> >> >>>
> >> >> >>> >
> >> >> >>> > On Fri, Jul 3, 2009 at 10:48, Charles Moulliard<
> >> cmoulli...@gmail.com
> >> >> >
> >> >> >>> wrote:
> >> >> >>> >> Claus,
> >> >> >>> >>
> >> >> >>> >> I don't want at all to use XA transaction. Correct me if I'm
> >> wrong
> >> >> but
> >> >> >>> the
> >> >> >>> >> example of the documentation (Camel 2.0 - JMS Sample - part
> >> Spring
> >> >> XML)
> >> >> >>> does
> >> >> >>> >> not use at all a XA driver and the message will not be removed
> >> from
> >> >> the
> >> >> >>> >> queue if a rollback occurs in the bean MyProcessor ?
> >> >> >>> >>
> >> >> >>> >> My concern is to avoid to lost messages from a file, queues if
> >> >> something
> >> >> >>> >> happen in one of the services called where by example we have
> to
> >> >> save
> >> >> >>> data
> >> >> >>> >> in a DB or generate a report for a client. If such errors
> occur,
> >> >> then we
> >> >> >>> >> have to investigate why can't save data in DB (maybe related
> to a
> >> >> >>> connection
> >> >> >>> >> issue, DB shutdown, ...) or generates files (maybe due to disk
> >> full,
> >> >> >>> access
> >> >> >>> >> right, ....). Sometimes, this is related to conditions out of
> the
> >> >> >>> control of
> >> >> >>> >> our application but sometimes no, then we have to correct the
> >> error
> >> >> and
> >> >> >>> >> install a new version of the code. After the restart of the
> >> >> application
> >> >> >>> and
> >> >> >>> >> recovery of messages (persisted in the case of activemq),
> >> messages
> >> >> will
> >> >> >>> be
> >> >> >>> >> reprocessed.
> >> >> >>> >>
> >> >> >>> >> Regards,
> >> >> >>> >>
> >> >> >>> >> Charles Moulliard
> >> >> >>> >> Senior Enterprise Architect
> >> >> >>> >> Apache Camel Committer
> >> >> >>> >>
> >> >> >>> >> *****************************
> >> >> >>> >> blog : http://cmoulliard.blogspot.com
> >> >> >>> >>
> >> >> >>> >>
> >> >> >>> >> On Fri, Jul 3, 2009 at 10:26 AM, Claus Ibsen <
> >> claus.ib...@gmail.com
> >> >> >
> >> >> >>> wrote:
> >> >> >>> >>
> >> >> >>> >>> And reconsider if you need XA at all. Its slow and hard to
> get
> >> >> setup.
> >> >> >>> >>>
> >> >> >>> >>> Try to let the DB be the last stuff you do and afterwards
> send
> >> the
> >> >> >>> >>> message to another queue for further processing in a 2nd
> route.
> >> >> >>> >>> If that is possible in your use-case.
> >> >> >>> >>>
> >> >> >>> >>>
> >> >> >>> >>> On Fri, Jul 3, 2009 at 10:25 AM, Claus Ibsen<
> >> claus.ib...@gmail.com
> >> >> >
> >> >> >>> wrote:
> >> >> >>> >>> > Hi
> >> >> >>> >>> >
> >> >> >>> >>> > Get it working outside OSGi, eg in a small unit test thats
> >> easy
> >> >> to
> >> >> >>> run
> >> >> >>> >>> > and test from within your IDE.
> >> >> >>> >>> > Google for JMS + hibernate + TX + XA to find some samples
> that
> >> >> work.
> >> >> >>> >>> >
> >> >> >>> >>> > And since you use JMS + DB in the same TX you need to use
> XA
> >> db
> >> >> >>> driver.
> >> >> >>> >>> >
> >> >> >>> >>> > It can be a painful to get setup
> >> >> >>> >>> >
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> http://coffeedrivenjava.blogspot.com/2006/08/distributed-xa-transactions-w-hibernate.html
> >> >> >>> >>> >
> >> >> >>> >>> > And you need an XA TX manager such as JOTM
> >> >> >>> >>> > http://jotm.ow2.org/xwiki/bin/view/Main/WebHome
> >> >> >>> >>> >
> >> >> >>> >>> > In j2ee land there was a JTA with the container that could
> do
> >> it.
> >> >> But
> >> >> >>> >>> > in your OSGi container I do not know if it provides one out
> of
> >> >> the
> >> >> >>> >>> > box.
> >> >> >>> >>> >
> >> >> >>> >>> >
> >> >> >>> >>> > On Fri, Jul 3, 2009 at 10:09 AM, Charles Moulliard<
> >> >> >>> cmoulli...@gmail.com>
> >> >> >>> >>> wrote:
> >> >> >>> >>> >> I'm still fighting against Spring config or Camel because
> >> >> Rollback
> >> >> >>> does
> >> >> >>> >>> not
> >> >> >>> >>> >> occur. I have been able to configure Hibernate to use the
> >> same
> >> >> >>> >>> >> TransactionManager as the one used by JMS
> >> >> >>> >>> >>
> >> >> >>> >>> >> Here is the different part of the config. I don't know
> where
> >> the
> >> >> >>> issue
> >> >> >>> >>> could
> >> >> >>> >>> >> be !
> >> >> >>> >>> >>
> >> >> >>> >>> >> 1) ActiveMQ
> >> >> >>> >>> >>
> >> >> >>> >>> >> ...
> >> >> >>> >>> >>
> >> >> >>> >>> >>    <bean id="activemqConnectionFactory"
> >> >> >>> >>> >> class="org.apache.activemq.ActiveMQConnectionFactory">
> >> >> >>> >>> >>        <property name="brokerURL"
> >> value="tcp://localhost:61616"
> >> >> />
> >> >> >>> >>> >>    </bean>
> >> >> >>> >>> >>
> >> >> >>> >>> >>    <bean id="pooledConnectionFactory"
> >> >> >>> >>> >>
> class="org.apache.activemq.pool.PooledConnectionFactoryBean">
> >> >> >>> >>> >>        <property name="maxConnections" value="8" />
> >> >> >>> >>> >>        <property name="maximumActive" value="500" />
> >> >> >>> >>> >>        <property name="transactionManager"
> >> >> ref="transactionManager"
> >> >> >>> />
> >> >> >>> >>> >>        <property name="connectionFactory"
> >> >> >>> >>> ref="activemqConnectionFactory"
> >> >> >>> >>> >> />
> >> >> >>> >>> >>        <property name="resourceName"
> value="activemq.default"
> >> />
> >> >> >>> >>> >>    </bean>
> >> >> >>> >>> >>
> >> >> >>> >>> >>    <bean id="resourceManager"
> >> >> >>> >>> >> class="org.apache.activemq.pool.ActiveMQResourceManager"
> >> >> >>> >>> >> init-method="recoverResource">
> >> >> >>> >>> >>          <property name="transactionManager"
> >> >> >>> ref="transactionManager" />
> >> >> >>> >>> >>          <property name="connectionFactory"
> >> >> >>> >>> ref="activemqConnectionFactory"
> >> >> >>> >>> >> />
> >> >> >>> >>> >>          <property name="resourceName"
> >> value="activemq.default"
> >> >> />
> >> >> >>> >>> >>    </bean>
> >> >> >>> >>> >>
> >> >> >>> >>> >>    <osgi:reference id="transactionManager"
> >> >> >>> >>> >> interface="javax.transaction.TransactionManager" /> //
> This
> >> OSGI
> >> >> >>> service
> >> >> >>> >>> is
> >> >> >>> >>> >> published by Geronimo Transaction bundle
> >> >> >>> >>> >>
> >> >> >>> >>> >>    <osgi:service ref="pooledConnectionFactory">
> >> >> >>> >>> >>        <osgi:interfaces>
> >> >> >>> >>> >>            <value>javax.jms.ConnectionFactory</value>
> >> >> >>> >>> >>        </osgi:interfaces>
> >> >> >>> >>> >>        <osgi:service-properties>
> >> >> >>> >>> >>            <entry key="name" value="default"/>
> >> >> >>> >>> >>        </osgi:service-properties>
> >> >> >>> >>> >>    </osgi:service>
> >> >> >>> >>> >>
> >> >> >>> >>> >> 2) Camel ActiveMQComponent
> >> >> >>> >>> >>
> >> >> >>> >>> >>    <bean id="active-mq"
> >> >> >>> >>> >>
> >> class="org.apache.activemq.camel.component.ActiveMQComponent">
> >> >> >>> >>> >>        <property name="transacted" value="true"/>
> >> >> >>> >>> >>        <property name="connectionFactory">
> >> >> >>> >>> >>            <osgi:reference
> >> >> interface="javax.jms.ConnectionFactory"/>
> >> >> >>> //
> >> >> >>> >>> >> OSGI service is published by ActiveMQ service
> >> >> >>> >>> >>        </property>
> >> >> >>> >>> >>        <property name="transactionManager">
> >> >> >>> >>> >>            <osgi:reference
> >> >> >>> >>> >>
> >> >> >>>
> >> >>
> interface="org.springframework.transaction.PlatformTransactionManager"/>
> >> >> >>> >>> >>        </property>
> >> >> >>> >>> >>    </bean>
> >> >> >>> >>> >>
> >> >> >>> >>> >> 2) Hibernate - DAO
> >> >> >>> >>> >>
> >> >> >>> >>> >>    <bean id="sessionFactory"
> >> >> >>> >>> >>
> >> >> class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
> >> >> >>> >>> >>
> >> >> >>> >>> >>        <property name="mappingLocations">
> >> >> >>> >>> >>            <list>
> >> >> >>> >>> >>
> >> >> >>> >>> >>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> <value>classpath*:META-INF/com/xpectis/x3s/platform/model/*.hbm.xml</value>
> >> >> >>> >>> >>            </list>
> >> >> >>> >>> >>        </property>
> >> >> >>> >>> >>
> >> >> >>> >>> >>        <property name="hibernateProperties">
> >> >> >>> >>> >>            <props>
> >> >> >>> >>> >>                <prop
> >> >> >>> >>> >>
> >> >> key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
> >> >> >>> >>> >>                <prop key="hibernate.show_sql">true</prop>
> >> >> >>> >>> >>                <prop
> key="hibernate.format_sql">true</prop>
> >> >> >>> >>> >>                <prop
> >> >> >>> >>> >> key="hibernate.cglib.use_reflection_optimizer">true</prop>
> >> >> >>> >>> >>                <prop
> >> key="hibernate.jdbc.batch_size">10</prop>
> >> >> >>> >>> >>                <prop
> >> >> >>> >>> >>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
> >> >> >>> >>> >>                <prop
> >> >> >>> >>> >>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> key="hibernate.transaction.factory_class">org.springframework.orm.hibernate3.SpringTransactionFactory</prop>
> >> >> >>> >>> >>            </props>
> >> >> >>> >>> >>        </property>
> >> >> >>> >>> >>        <property name="dataSource">
> >> >> >>> >>> >>            <ref bean="dataSource" />
> >> >> >>> >>> >>        </property>
> >> >> >>> >>> >>
> >> >> >>> >>> >> Remark : To avoid the JNDI lookup issue, we use
> >> >> >>> springTransactionFactory
> >> >> >>> >>> as
> >> >> >>> >>> >> the TransactionFactory for Hibernate (
> >> >> >>> >>> >> http://forum.springsource.org/showthread.php?p=215720)
> >> >> >>> >>> >>
> >> >> >>> >>> >> 3) Service layer
> >> >> >>> >>> >>
> >> >> >>> >>> >> Here is the definition of the service used from Camel
> route :
> >> >> >>> >>> >>
> >> >> >>> >>> >>    <bean id="notificationServiceTarget"
> >> >> >>> >>> >>
> >> >> >>>
> >> class="com.xpectis.x3s.platform.service.impl.NotificationServiceImpl">
> >> >> >>> >>> >>            <property name="notificationDAO">
> >> >> >>> >>> >>            <osgi:reference
> >> >> >>> >>> >> interface="com.xpectis.x3s.platform.dao.NotificationDAO"/>
> >> >> >>> >>> >>        </property>
> >> >> >>> >>> >>
> >> >> >>> >>> >>    </bean>
> >> >> >>> >>> >>
> >> >> >>> >>> >>   <!-- Abstract service using the Geronimo Transaction
> >> Manager
> >> >> -->
> >> >> >>> >>> >>    <bean id="abstractService" abstract="true"
> >> >> >>> >>> >>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
> >> >> >>> >>> >>         <property name="transactionManager">
> >> >> >>> >>> >>            <osgi:reference
> >> >> >>> >>> >>
> >> >> >>>
> >> >>
> interface="org.springframework.transaction.PlatformTransactionManager"/>
> >> >> >>> >>> >>        </property>
> >> >> >>> >>> >>    </bean>
> >> >> >>> >>> >>
> >> >> >>> >>> >>    <bean id="notificationService"
> >> >> >>> >>> >>          parent="abstractService"
> >> >> >>> >>> >>
> >> >> >>> >>> >>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
> >> >> >>> >>> >>
> >> >> >>> >>> >>        <property name="target">
> >> >> >>> >>> >>            <ref bean="notificationServiceTarget" />
> >> >> >>> >>> >>        </property>
> >> >> >>> >>> >>
> >> >> >>> >>> >>        <property name="transactionAttributes">
> >> >> >>> >>> >>            <props>
> >> >> >>> >>> >>                <prop key="*">PROPAGATION_REQUIRED</prop>
> >> >> >>> >>> >>            </props>
> >> >> >>> >>> >>        </property>
> >> >> >>> >>> >>    </bean>
> >> >> >>> >>> >>
> >> >> >>> >>> >> 4) Route
> >> >> >>> >>> >>
> >> >> >>> >>> >>    <bean id="myPolicy"
> >> >> >>> >>> class="org.apache.camel.processor.RedeliveryPolicy">
> >> >> >>> >>> >>        <property name="maximumRedeliveries" value="1"/>
> >> >> >>> >>> >>    </bean>
> >> >> >>> >>> >>
> >> >> >>> >>> >>    <bean id="txErrorHandler"
> >> >> >>> >>> >>
> >> >> class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder">
> >> >> >>> >>> >>        <property name="springTransactionPolicy"
> >> >> >>> >>> >> ref="PROPAGATION_REQUIRED"/>
> >> >> >>> >>> >>        <property name="redeliveryPolicy" ref="myPolicy"/>
> >> >> >>> >>> >>    </bean>
> >> >> >>> >>> >>
> >> >> >>> >>> >>    <bean id="PROPAGATION_REQUIRED"
> >> >> >>> >>> >>
> class="org.apache.camel.spring.spi.SpringTransactionPolicy">
> >> >> >>> >>> >>        <property name="transactionManager">
> >> >> >>> >>> >>            <osgi:reference
> >> >> >>> >>> >>
> >> >> >>>
> >> >>
> interface="org.springframework.transaction.PlatformTransactionManager"/>
> >> >> >>> >>> >>        </property>
> >> >> >>> >>> >>    </bean>
> >> >> >>> >>> >>
> >> >> >>> >>> >>        <camel:route errorHandlerRef="txErrorHandler">
> >> >> >>> >>> >>            <camel:from ref="queueQuickFixInEndpoint" />
> >> >> >>> >>> >>            <camel:convertBodyTo type="quickfix.Message" />
> >> >> >>> >>> >>            <camel:transacted ref="PROPAGATION_REQUIRED"/>
> >> >> >>> >>> >>            <camel:bean ref="serviceHelper"
> >> >> >>> method="createNotification"
> >> >> >>> >>> />
> >> >> >>> >>> >>            <camel:bean ref="serviceHelper"
> >> >> method="generateError" />
> >> >> >>> >>> >>            <camel:to ref="directNotificationEndpoint" />
> >> >> >>> >>> >>        </camel:route>
> >> >> >>> >>> >>
> >> >> >>> >>> >> Any ideas are welcome
> >> >> >>> >>> >>
> >> >> >>> >>> >> Regards,
> >> >> >>> >>> >>
> >> >> >>> >>> >> Charles Moulliard
> >> >> >>> >>> >> Senior Enterprise Architect
> >> >> >>> >>> >> Apache Camel Committer
> >> >> >>> >>> >>
> >> >> >>> >>> >> *****************************
> >> >> >>> >>> >> blog : http://cmoulliard.blogspot.com
> >> >> >>> >>> >>
> >> >> >>> >>> >>
> >> >> >>> >>> >> On Thu, Jul 2, 2009 at 5:02 PM, Charles Moulliard <
> >> >> >>> cmoulli...@gmail.com
> >> >> >>> >>> >wrote:
> >> >> >>> >>> >>
> >> >> >>> >>> >>> OK. I will try to create my own Hibernate JTATransaction
> >> >> manager as
> >> >> >>> the
> >> >> >>> >>> >>> existing try to perform a JNDI lookup to find the
> >> transaction
> >> >> >>> manager
> >> >> >>> >>> on
> >> >> >>> >>> >>> OSGI platform (inheritage from J2EE world)
> >> >> >>> >>> >>>
> >> >> >>> >>> >>>
> >> >> >>> >>> >>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> http://mail-archives.apache.org/mod_mbox/servicemix-dev/200904.mbox/%3cb23ecedc0904020615y55df4d0fhb303a2ea22df7...@mail.gmail.com%3e
> >> >> >>> >>> >>>
> >> >> >>> >>> >>>
> >> >> >>> >>> >>> Charles Moulliard
> >> >> >>> >>> >>> Senior Enterprise Architect
> >> >> >>> >>> >>> Apache Camel Committer
> >> >> >>> >>> >>>
> >> >> >>> >>> >>> *****************************
> >> >> >>> >>> >>> blog : http://cmoulliard.blogspot.com
> >> >> >>> >>> >>>
> >> >> >>> >>> >>>
> >> >> >>> >>> >>> On Thu, Jul 2, 2009 at 4:56 PM, Claus Ibsen <
> >> >> claus.ib...@gmail.com
> >> >> >>> >
> >> >> >>> >>> wrote:
> >> >> >>> >>> >>>
> >> >> >>> >>> >>>> On Thu, Jul 2, 2009 at 4:53 PM, Charles Moulliard<
> >> >> >>> >>> cmoulli...@gmail.com>
> >> >> >>> >>> >>>> wrote:
> >> >> >>> >>> >>>> > queueQuickFixInEndpoint is a JMS queue.
> >> >> >>> >>> >>>> >
> >> >> >>> >>> >>>> > I will add the ref to the transacted and retest
> >> >> >>> >>> >>>> >
> >> >> >>> >>> >>>> > Question : I suppose that rollback will not occur if
> by
> >> >> example
> >> >> >>> JMS
> >> >> >>> >>> and
> >> >> >>> >>> >>>> DB
> >> >> >>> >>> >>>> > (=Hibernate) does not use the same TransactionManager
> and
> >> >> don't
> >> >> >>> use
> >> >> >>> >>> this
> >> >> >>> >>> >>>> > spring class together :
> >> >> >>> >>> >>>> >
> >> org.springframework.transaction.PlatformTransactionManager
> >> >> >>> >>> >>>> Yes they must be configured to use the same TX manager.
> >> >> >>> >>> >>>>
> >> >> >>> >>> >>>>
> >> >> >>> >>> >>>> >
> >> >> >>> >>> >>>> > Regards,
> >> >> >>> >>> >>>> >
> >> >> >>> >>> >>>> > Charles Moulliard
> >> >> >>> >>> >>>> > Senior Enterprise Architect
> >> >> >>> >>> >>>> > Apache Camel Committer
> >> >> >>> >>> >>>> >
> >> >> >>> >>> >>>> > *****************************
> >> >> >>> >>> >>>> > blog : http://cmoulliard.blogspot.com
> >> >> >>> >>> >>>> >
> >> >> >>> >>> >>>> >
> >> >> >>> >>> >>>> > On Thu, Jul 2, 2009 at 4:46 PM, Claus Ibsen <
> >> >> >>> claus.ib...@gmail.com>
> >> >> >>> >>> >>>> wrote:
> >> >> >>> >>> >>>> >
> >> >> >>> >>> >>>> >> Transacted also have a ref attribute
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>> >> <transacted ref="required"/>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>> >> Is queueQuickFixInEndpoint a JMS queue?
> >> >> >>> >>> >>>> >> You need to use a TX manager that can do both JMS and
> >> DB.
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>> >> On Thu, Jul 2, 2009 at 4:31 PM, Charles Moulliard<
> >> >> >>> >>> cmoulli...@gmail.com
> >> >> >>> >>> >>>> >
> >> >> >>> >>> >>>> >> wrote:
> >> >> >>> >>> >>>> >> > I have been able to solve my problem by adding the
> >> >> following
> >> >> >>> bean
> >> >> >>> >>> >>>> >> definition
> >> >> >>> >>> >>>> >> > :
> >> >> >>> >>> >>>> >> >
> >> >> >>> >>> >>>> >> >    <bean id="required"
> >> >> >>> >>> >>>> >> >
> >> >> class="org.apache.camel.spring.spi.SpringTransactionPolicy">
> >> >> >>> >>> >>>> >> >        <property name="transactionManager">
> >> >> >>> >>> >>>> >> >            <osgi:reference
> >> >> >>> >>> >>>> >> >
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> interface="org.springframework.transaction.PlatformTransactionManager"/>
> >> >> >>> >>> >>>> >> >        </property>
> >> >> >>> >>> >>>> >> >    </bean>
> >> >> >>> >>> >>>> >> >
> >> >> >>> >>> >>>> >> > and in the route
> >> >> >>> >>> >>>> >> >
> >> >> >>> >>> >>>> >> >        <camel:route>
> >> >> >>> >>> >>>> >> >            <camel:from
> ref="queueQuickFixInEndpoint"
> >> />
> >> >> >>> >>> >>>> >> >            <camel:convertBodyTo
> >> type="quickfix.Message"
> >> >> />
> >> >> >>> >>> >>>> >> >            <camel:transacted/>
> >> >> >>> >>> >>>> >> >            <camel:policy ref="required" />
> >> >> >>> >>> >>>> >> >            <camel:bean ref="serviceHelper"
> >> >> >>> >>> >>>> method="createNotification" />
> >> >> >>> >>> >>>> >> >            <camel:bean ref="serviceHelper"
> >> >> >>> method="generateError"
> >> >> >>> >>> />
> >> >> >>> >>> >>>> >> >            <camel:to
> ref="directNotificationEndpoint"
> >> />
> >> >> >>> >>> >>>> >> >        </camel:route>
> >> >> >>> >>> >>>> >> >
> >> >> >>> >>> >>>> >> > Unfortunately, the rollback does not occur in the
> DB
> >> and
> >> >> 6
> >> >> >>> >>> records
> >> >> >>> >>> >>>> have
> >> >> >>> >>> >>>> >> been
> >> >> >>> >>> >>>> >> > created by the method createNotification when error
> >> has
> >> >> been
> >> >> >>> >>> raised
> >> >> >>> >>> >>>> by
> >> >> >>> >>> >>>> >> the
> >> >> >>> >>> >>>> >> > method generateError.
> >> >> >>> >>> >>>> >> >
> >> >> >>> >>> >>>> >> > What is missing ?
> >> >> >>> >>> >>>> >> >
> >> >> >>> >>> >>>> >> > Charles Moulliard
> >> >> >>> >>> >>>> >> > Senior Enterprise Architect
> >> >> >>> >>> >>>> >> > Apache Camel Committer
> >> >> >>> >>> >>>> >> >
> >> >> >>> >>> >>>> >> > *****************************
> >> >> >>> >>> >>>> >> > blog : http://cmoulliard.blogspot.com
> >> >> >>> >>> >>>> >> >
> >> >> >>> >>> >>>> >> >
> >> >> >>> >>> >>>> >> > On Thu, Jul 2, 2009 at 4:19 PM, Charles Moulliard <
> >> >> >>> >>> >>>> cmoulli...@gmail.com
> >> >> >>> >>> >>>> >> >wrote:
> >> >> >>> >>> >>>> >> >
> >> >> >>> >>> >>>> >> >> When I compare the example :
> >> >> >>> >>> JMSTransactionalClientRollbackTest.xml
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >>     <!-- START SNIPPET: e1 -->
> >> >> >>> >>> >>>> >> >>     <!-- setup JMS connection factory -->
> >> >> >>> >>> >>>> >> >>     <bean id="jmsConnectionFactory"
> >> >> >>> >>> >>>> >> >>
> >> class="org.apache.activemq.ActiveMQConnectionFactory">
> >> >> >>> >>> >>>> >> >>         <property name="brokerURL"
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> value="vm://localhost?broker.persistent=false&amp;broker.useJmx=false"/>
> >> >> >>> >>> >>>> >> >>     </bean>
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >>     <!-- setup spring jms TX manager -->
> >> >> >>> >>> >>>> >> >>     <bean id="jmsTransactionManager"
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>>
> >> class="org.springframework.jms.connection.JmsTransactionManager">
> >> >> >>> >>> >>>> >> >>         <property name="connectionFactory"
> >> >> >>> >>> >>>> ref="jmsConnectionFactory"/>
> >> >> >>> >>> >>>> >> >>     </bean>
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >>     <!-- define our activemq component -->
> >> >> >>> >>> >>>> >> >>     <bean id="activemq"
> >> >> >>> >>> >>>> >> >>
> >> >> >>> class="org.apache.activemq.camel.component.ActiveMQComponent">
> >> >> >>> >>> >>>> >> >>         <property name="connectionFactory"
> >> >> >>> >>> >>>> ref="jmsConnectionFactory"/>
> >> >> >>> >>> >>>> >> >>         <!-- define the jms consumer/producer as
> >> >> transacted
> >> >> >>> -->
> >> >> >>> >>> >>>> >> >>         <property name="transacted" value="true"/>
> >> >> >>> >>> >>>> >> >>         <!-- setup the transaction manager to use
> -->
> >> >> >>> >>> >>>> >> >>         <!-- if not provided then Camel will
> >> automatic
> >> >> use a
> >> >> >>> >>> >>>> >> >> JmsTransactionManager, however if you
> >> >> >>> >>> >>>> >> >>              for instance use a JTA transaction
> >> manager
> >> >> then
> >> >> >>> you
> >> >> >>> >>> >>>> must
> >> >> >>> >>> >>>> >> >> configure it -->
> >> >> >>> >>> >>>> >> >>         <property name="transactionManager"
> >> >> >>> >>> >>>> >> ref="jmsTransactionManager"/>
> >> >> >>> >>> >>>> >> >>     </bean>
> >> >> >>> >>> >>>> >> >>     <!-- END SNIPPET: e1 -->
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >>     <!-- START SNIPPET: e2 -->
> >> >> >>> >>> >>>> >> >>     <camelContext xmlns="
> >> >> >>> http://camel.apache.org/schema/spring
> >> >> >>> >>> ">
> >> >> >>> >>> >>>> >> >>         <route>
> >> >> >>> >>> >>>> >> >>             <!-- 1: from the jms queue -->
> >> >> >>> >>> >>>> >> >>             <from uri="activemq:queue:okay"/>
> >> >> >>> >>> >>>> >> >>             <!-- 2: mark this route as transacted
> -->
> >> >> >>> >>> >>>> >> >>             <transacted/>
> >> >> >>> >>> >>>> >> >>             <!-- 3: call our business logic that
> is
> >> >> >>> myProcessor
> >> >> >>> >>> -->
> >> >> >>> >>> >>>> >> >>             <process ref="myProcessor"/>
> >> >> >>> >>> >>>> >> >>             <!-- 4: if success then send it to the
> >> mock
> >> >> -->
> >> >> >>> >>> >>>> >> >>             <to uri="mock:result"/>
> >> >> >>> >>> >>>> >> >>         </route>
> >> >> >>> >>> >>>> >> >>     </camelContext>
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >> with mine.
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >> What is different concerns the TransactionManager
> >> used.
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >> In the example, this is the Spring one:
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >>     <!-- setup spring jms TX manager -->
> >> >> >>> >>> >>>> >> >>     <bean id="jmsTransactionManager"
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>>
> >> class="org.springframework.jms.connection.JmsTransactionManager">
> >> >> >>> >>> >>>> >> >>         <property name="connectionFactory"
> >> >> >>> >>> >>>> ref="jmsConnectionFactory"/>
> >> >> >>> >>> >>>> >> >>     </bean>
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >> and in my case, ActiveMQ is configured to use
> >> Geronimo
> >> >> >>> >>> Transaction
> >> >> >>> >>> >>>> >> Manager
> >> >> >>> >>> >>>> >> >> bundle (which in fact uses spring Transaction
> manager
> >> :
> >> >> >>> >>> >>>> >> >>
> >> >> org.springframework.transaction.jta.JtaTransactionManager;)
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >> I suppose that in the example, the policy is
> defined
> >> by
> >> >> >>> default
> >> >> >>> >>> by
> >> >> >>> >>> >>>> >> spring
> >> >> >>> >>> >>>> >> >> when instantiating the class :
> >> >> >>> >>> >>>> >> >>
> >> org.springframework.jms.connection.JmsTransactionManager
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >> Is it possible to do the same using a
> JtaTransaction
> >> >> manager
> >> >> >>> ?
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >> Regards,
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >> Charles Moulliard
> >> >> >>> >>> >>>> >> >> Senior Enterprise Architect
> >> >> >>> >>> >>>> >> >> Apache Camel Committer
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >> *****************************
> >> >> >>> >>> >>>> >> >> blog : http://cmoulliard.blogspot.com
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >> On Thu, Jul 2, 2009 at 3:57 PM, Claus Ibsen <
> >> >> >>> >>> claus.ib...@gmail.com>
> >> >> >>> >>> >>>> >> wrote:
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >>> Hi
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >> >>> Yeah you need to add all the spring transaction
> >> stuff.
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >> >>> On Thu, Jul 2, 2009 at 3:47 PM, Charles
> Moulliard<
> >> >> >>> >>> >>>> cmoulli...@gmail.com
> >> >> >>> >>> >>>> >> >
> >> >> >>> >>> >>>> >> >>> wrote:
> >> >> >>> >>> >>>> >> >>> > Camel generates the following error with my
> route
> >> :
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>> > Route
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>> >        <camel:route>
> >> >> >>> >>> >>>> >> >>> >            <camel:from
> >> ref="queueQuickFixInEndpoint"
> >> >> />
> >> >> >>> >>> >>>> >> >>> >            <camel:convertBodyTo
> >> >> type="quickfix.Message"
> >> >> >>> />
> >> >> >>> >>> >>>> >> >>> >            <camel:transacted/>
> >> >> >>> >>> >>>> >> >>> >            <camel:bean ref="serviceHelper"
> >> >> >>> >>> >>>> >> method="createNotification"
> >> >> >>> >>> >>>> >> >>> />
> >> >> >>> >>> >>>> >> >>> >            <camel:bean ref="serviceHelper"
> >> >> >>> >>> method="generateError"
> >> >> >>> >>> >>>> />
> >> >> >>> >>> >>>> >> >>> >            <camel:to
> >> ref="directNotificationEndpoint"
> >> >> />
> >> >> >>> >>> >>>> >> >>> >        </camel:route>
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>> > It seems that policy must be defined but in the
> >> >> example
> >> >> >>> here
> >> >> >>> >>> it
> >> >> >>> >>> >>>> is
> >> >> >>> >>> >>>> >> not
> >> >> >>> >>> >>>> >> >>> > mentioned :
> >> >> >>> >>> http://camel.apache.org/transactional-client.html
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>> > Error :
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>> > 15:43:07,838 | ERROR | xtenderThread-30 |
> >> >> >>> >>> ContextLoaderListener
> >> >> >>> >>> >>>> >> >>>    |
> >> >> >>> >>> >>>> >> >>> > BundleApplicationContextListener   50 |
> >> Application
> >> >> >>> context
> >> >> >>> >>> >>>> refresh
> >> >> >>> >>> >>>> >> >>> failed
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>>
> >> (OsgiBundleXmlApplicationContext(bundle=com.xpectis.x3s.x3s-core,
> >> >> >>> >>> >>>> >> >>> > config=osgibundle:/META-INF/spring/*.xml))
> >> >> >>> >>> >>>> >> >>> > org.apache.camel.RuntimeCamelException:
> >> >> >>> >>> >>>> >> >>> java.lang.IllegalArgumentException:
> >> >> >>> >>> >>>> >> >>> > policy must be specified on: Transacted[ref:
> null]
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:986)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:121)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:465)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.springframework.context.event.SimpleApplicationEventMulticaster$1.run(SimpleApplicationEventMulticaster.java:78)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:76)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:274)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:736)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.springframework.osgi.context.support.AbstractOsgiBundleApplicationContext.finishRefresh(AbstractOsgiBundleApplicationContext.java:235)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:358)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:136)
> >> >> >>> >>> >>>> >> >>> >    at java.lang.Thread.run(Thread.java:619)
> >> >> >>> >>> >>>> >> >>> > Caused by: java.lang.IllegalArgumentException:
> >> policy
> >> >> >>> must be
> >> >> >>> >>> >>>> >> specified
> >> >> >>> >>> >>>> >> >>> on:
> >> >> >>> >>> >>>> >> >>> > Transacted[ref: null]
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >>
> >> >> >>> org.apache.camel.util.ObjectHelper.notNull(ObjectHelper.java:258)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.model.TransactedDefinition.createProcessor(TransactedDefinition.java:129)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:226)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:111)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:294)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:120)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:552)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:969)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:946)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.spring.SpringCamelContext.maybeDoStart(SpringCamelContext.java:165)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:160)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >>
> >> >> >>>
> org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:52)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:863)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:99)
> >> >> >>> >>> >>>> >> >>> >    at
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>>
> >> >> >>> >>>
> >> >> >>>
> >> >>
> >>
> org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:119)
> >> >> >>> >>> >>>> >> >>> > Charles Moulliard
> >> >> >>> >>> >>>> >> >>> > Senior Enterprise Architect
> >> >> >>> >>> >>>> >> >>> > Apache Camel Committer
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>> > *****************************
> >> >> >>> >>> >>>> >> >>> > blog : http://cmoulliard.blogspot.com
> >> >> >>> >>> >>>> >> >>> >
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >> >>> --
> >> >> >>> >>> >>>> >> >>> Claus Ibsen
> >> >> >>> >>> >>>> >> >>> Apache Camel Committer
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >> >>> Open Source Integration: http://fusesource.com
> >> >> >>> >>> >>>> >> >>> Blog: http://davsclaus.blogspot.com/
> >> >> >>> >>> >>>> >> >>> Twitter: http://twitter.com/davsclaus
> >> >> >>> >>> >>>> >> >>>
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >>
> >> >> >>> >>> >>>> >> >
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>> >> --
> >> >> >>> >>> >>>> >> Claus Ibsen
> >> >> >>> >>> >>>> >> Apache Camel Committer
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>> >> Open Source Integration: http://fusesource.com
> >> >> >>> >>> >>>> >> Blog: http://davsclaus.blogspot.com/
> >> >> >>> >>> >>>> >> Twitter: http://twitter.com/davsclaus
> >> >> >>> >>> >>>> >>
> >> >> >>> >>> >>>> >
> >> >> >>> >>> >>>>
> >> >> >>> >>> >>>>
> >> >> >>> >>> >>>>
> >> >> >>> >>> >>>> --
> >> >> >>> >>> >>>> Claus Ibsen
> >> >> >>> >>> >>>> Apache Camel Committer
> >> >> >>> >>> >>>>
> >> >> >>> >>> >>>> Open Source Integration: http://fusesource.com
> >> >> >>> >>> >>>> Blog: http://davsclaus.blogspot.com/
> >> >> >>> >>> >>>> Twitter: http://twitter.com/davsclaus
> >> >> >>> >>> >>>>
> >> >> >>> >>> >>>
> >> >> >>> >>> >>>
> >> >> >>> >>> >>
> >> >> >>> >>> >
> >> >> >>> >>> >
> >> >> >>> >>> >
> >> >> >>> >>> > --
> >> >> >>> >>> > Claus Ibsen
> >> >> >>> >>> > Apache Camel Committer
> >> >> >>> >>> >
> >> >> >>> >>> > Open Source Integration: http://fusesource.com
> >> >> >>> >>> > Blog: http://davsclaus.blogspot.com/
> >> >> >>> >>> > Twitter: http://twitter.com/davsclaus
> >> >> >>> >>> >
> >> >> >>> >>>
> >> >> >>> >>>
> >> >> >>> >>>
> >> >> >>> >>> --
> >> >> >>> >>> Claus Ibsen
> >> >> >>> >>> Apache Camel Committer
> >> >> >>> >>>
> >> >> >>> >>> Open Source Integration: http://fusesource.com
> >> >> >>> >>> Blog: http://davsclaus.blogspot.com/
> >> >> >>> >>> Twitter: http://twitter.com/davsclaus
> >> >> >>> >>>
> >> >> >>> >>
> >> >> >>> >
> >> >> >>> >
> >> >> >>> >
> >> >> >>> > --
> >> >> >>> > Cheers,
> >> >> >>> > Guillaume Nodet
> >> >> >>>
>

Reply via email to