[ 
https://issues.apache.org/activemq/browse/CAMEL-1475?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=51047#action_51047
 ] 

Claus Ibsen commented on CAMEL-1475:
------------------------------------

Okay got this baby working now
{code:java}
                from("direct:okay")
                    // marks this route as transacted, and we dont pass in any 
parameters so we
                    // will auto lookup and use the Policy defined in the 
spring XML file
                    .transacted()
                    .setBody(constant("Tiger in Action")).beanRef("bookService")
                    .setBody(constant("Elephant in 
Action")).beanRef("bookService");
{code}

And with the Spring XML below Camel will lookup beans with the type 
{{org.apache.camel.spi.Policy}} and if there are 1 policy defined it will use 
that as default.

{code:xml}
    <!-- START SNIPPET: e1 -->
    <!-- datasource to the database -->
    <bean id="dataSource" 
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:hsqldb:mem:camel"/>
        <property name="username" value="sa"/>
        <property name="password" value=""/>
    </bean>

    <!-- spring transaction manager -->
    <bean id="txManager" 
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- policy for required transaction used in our Camel routes -->
    <bean id="PROPAGATION_REQUIRED" 
class="org.apache.camel.spring.spi.SpringTransactionPolicy">
        <property name="transactionManager" ref="txManager"/>
    </bean>

    <!-- bean for book business logic -->
    <bean id="bookService" 
class="org.apache.camel.spring.interceptor.BookService">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- END SNIPPET: e1 -->
{code}

Next step is to make it even easier, eg to be able to lookup the 
PlatformManager and if there is 1 single defined use that one and use REQUIRED 
by default.
Then we can loose the PROPAGATION_REQUIRED bean.

> transactionErrorHandler should be able to wrap routes with default policy if 
> no policy defined
> ----------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-1475
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1475
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core, camel-spring
>    Affects Versions: 1.6.0
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>             Fix For: 2.0.0
>
>
> See TransactionalClientWithRollbackTest in camel-spring
> The {{.policy(required)}} is needed in the routes even though we have a 
> global transaction error handler with a default policy set:
> {code}
>                  errorHandler(transactionErrorHandler(required));
> {code}
> So Camel should fallback and use the global policy if the route itself does 
> not have a policy defined.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to