Hi,

I don't know If I'm wrong or not but I try to configure only
spring/hibernate with Geronimo Transaction Manager in Apache Felix Karaf but
it does not work. Here is the config.

1) Hibernate / Spring / Geronimo

A) Hibernate / Spring config

<!--  Hibernate SessionFactory Definition -->
    <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.manager_lookup_class">org.springframework.orm.hibernate3.LocalTransactionManagerLookup</prop>
            </props>
        </property>
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <!-- lookup to the jtaTxManager bean to find Geronimo Transaction
Manager -->
        <property name="jtaTransactionManager">
             <bean factory-bean="jtaTxManager"
factory-method="getTransactionManager"/>
        </property>
    </bean>

    <!-- JTA Transaction Manager lookup -->
    <bean id="jtaTxManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
      <property name="transactionManager">
          <osgi:reference interface="javax.transaction.TransactionManager"/>
        </property>
    </bean>

    <!-- JTA Transaction Manager exported as OSGI service -->
    <osgi:service id="transactionManagerOsgi" ref="jtaTxManager">
        <osgi:interfaces>

<value>org.springframework.transaction.PlatformTransactionManager</value>

<value>org.springframework.transaction.jta.JtaTransactionManager</value>
        </osgi:interfaces>
    </osgi:service>

B) Services

    <bean id="abstractService" abstract="true"

class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager">
            <osgi:reference>
                <osgi:interfaces>
                    <!--
<value>org.springframework.orm.hibernate3.HibernateTransactionManager</value>
-->

<value>org.springframework.transaction.PlatformTransactionManager</value>

<value>org.springframework.transaction.jta.JtaTransactionManager</value>
                </osgi:interfaces>
            </osgi:reference>
        </property>
    </bean>

Remark : Apache ActiveMq Camel component is not longer transacted

2) Camel route

Remark : Transacted has been removed from the route so we call a bean which
is a spring service plumbing Hibernate stuffs

Here is what I see in the log :

09:41:31,528 | DEBUG | 0: FileComponent | nager$$EnhancerByCGLIB$$4cb40106 |
stractPlatformTransactionManager  371 | Creating new transaction with name
[com.xpectis.x3s.platform.service.RequestService.saveRequest]:
PROPAGATION_REQUIRED,ISOLATION_DEFAULT
09:41:31,544 | DEBUG | 0: FileComponent | SessionFactoryUtils              |
m.hibernate3.SessionFactoryUtils  318 | Opening Hibernate Session
09:41:31,606 | DEBUG | 0: FileComponent | SessionImpl                      |
org.hibernate.impl.SessionImpl    247 | opened session at timestamp:
12469524915
09:41:31,606 | DEBUG | 0: FileComponent | SessionFactoryUtils              |
m.hibernate3.SessionFactoryUtils  326 | Registering Spring transaction
synchronization for new Hibernate Session
09:41:32,763 | DEBUG | 0: FileComponent | SessionFactoryUtils              |
m.hibernate3.SessionFactoryUtils  789 | Closing Hibernate Session
09:41:32,763 | DEBUG | 0: FileComponent | nager$$EnhancerByCGLIB$$4cb40106 |
stractPlatformTransactionManager  821 | Initiating transaction rollback

No insert is done in the DB


Regards,

Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer

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


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

> Right, but you must be prepared to have duplicate JMS messages if
> something wrong happen between the time the data has been written to
> the DB and the time the JMS message is acked.
>
> On Fri, Jul 3, 2009 at 17:20, Claus Ibsen<claus.ib...@gmail.com> wrote:
> > On Fri, Jul 3, 2009 at 4:44 PM, Charles Moulliard<cmoulli...@gmail.com>
> wrote:
> >> If I use as TransactionManager
> >>
> >> org.springframework.orm.hibernate3.HibernateTransactionManager
> >>
> >> in DAO layer
> >> in Spring layer
> >> in Camel route
> >>
> >> instead of
> >>
> >> org.springframework.transaction.PlatformTransactionManager
> >>
> >> It works. The transaction is well rollbacked !!!!! yes yes yes yes
> > Ah yeah it is. Since the DB TX manager will handle the DB and since
> > you are consuming from a JMS queue then Spring
> > DefaultMessageListenerContainer will also rollback if a *runtime*
> > exception is thrown back to it. And Camel does this in its
> > TransactionErrorHandler. So yeah you are safe now.
> >
> > Only problem is if you also want to send a JMS message in your route :)
> >
> >
> >
> >>
> >> If you find a solution to use the JTATransactionManager Guillaume, you
> are
> >> welcome ;-)
> >>
> >> Charles Moulliard
> >> Senior Enterprise Architect
> >> Apache Camel Committer
> >>
> >> *****************************
> >> blog : http://cmoulliard.blogspot.com
> >>
> >>
> >> On Fri, Jul 3, 2009 at 4:14 PM, 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
> >>>> >> >>> > ------------------------
> >>>> >> >>> > Blog: http://gnodet.blogspot.com/
> >>>> >> >>> > ------------------------
> >>>> >> >>> > Open Source SOA
> >>>> >> >>> > http://fusesource.com
> >>>> >> >>> >
> >>>> >> >>>
> >>>> >> >>>
> >>>> >> >>>
> >>>> >> >>> --
> >>>> >> >>> Claus Ibsen
> >>>> >> >>> Apache Camel Committer
> >>>> >> >>>
> >>>> >> >>> Open Source Integration: http://fusesource.com
> >>>> >> >>> Blog: http://davsclaus.blogspot.com/
> >>>> >> >>> Twitter: http://twitter.com/davsclaus
> >>>> >> >>>
> >>>> >> >>
> >>>> >> >
> >>>> >> >
> >>>> >> >
> >>>> >> > --
> >>>> >> > Cheers,
> >>>> >> > Guillaume Nodet
> >>>> >> > ------------------------
> >>>> >> > Blog: http://gnodet.blogspot.com/
> >>>> >> > ------------------------
> >>>> >> > Open Source SOA
> >>>> >> > http://fusesource.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
> >
>
>
>
> --
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> ------------------------
> Open Source SOA
> http://fusesource.com
>

Reply via email to