Hello. I'm testing with Camel 3.18 routes that worked before with Caml 2.x. I've many issues... One of them is about the "transacted" that produces an exception during the route creation.
The routes are provided in a blueprint, itself packaged as an OSGi bundle delivered as a Karaf feature. The blueprint is attached. The exception is : org.apache.camel.FailedToCreateRouteException: Failed to create route KT1-File at: >>> Transacted <<< in route: Route(KT1-File)[From[master:K1-FILE:file:///SHARE/data/input... because of policy must be specified on: org.apache.camel.reifier.TransactedReifier@4155d8c8 at org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:241) ~[?:?] at org.apache.camel.reifier.RouteReifier.createRoute(RouteReifier.java:75) ~[?:?] at org.apache.camel.impl.DefaultModelReifierFactory.createRoute(DefaultModelReifierFactory.java:49) ~[?:?] at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:878) ~[?:?] at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:766) ~[?:?] at org.apache.camel.impl.engine.AbstractCamelContext.doInit(AbstractCamelContext.java:2947) ~[?:?] at org.apache.camel.support.service.BaseService.init(BaseService.java:83) ~[?:?] at org.apache.camel.impl.engine.AbstractCamelContext.init(AbstractCamelContext.java:2630) ~[?:?] at org.apache.camel.support.service.BaseService.start(BaseService.java:111) ~[?:?] at org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2649) ~[?:?] at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:262) ~[?:?] at org.apache.camel.blueprint.BlueprintCamelContext.start(BlueprintCamelContext.java:241) ~[?:?] at org.apache.camel.blueprint.BlueprintCamelContext.maybeStart(BlueprintCamelContext.java:283) ~[?:?] at org.apache.camel.blueprint.BlueprintCamelContext.blueprintEvent(BlueprintCamelContext.java:188) ~[?:?] at org.apache.aries.blueprint.container.BlueprintEventDispatcher$3.call(BlueprintEventDispatcher.java:197) ~[?:?] at org.apache.aries.blueprint.container.BlueprintEventDispatcher$3.call(BlueprintEventDispatcher.java:195) ~[?:?] at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?] at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?] at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?] at java.lang.Thread.run(Thread.java:829) ~[?:?] Caused by: java.lang.IllegalArgumentException: policy must be specified on: org.apache.camel.reifier.TransactedReifier@4155d8c8 at org.apache.camel.util.ObjectHelper.notNull(ObjectHelper.java:176) ~[?:?] at org.apache.camel.reifier.TransactedReifier.createProcessor(TransactedReifier.java:41) ~[?:?] at org.apache.camel.reifier.ProcessorReifier.makeProcessor(ProcessorReifier.java:847) ~[?:?] at org.apache.camel.reifier.ProcessorReifier.addRoutes(ProcessorReifier.java:588) ~[?:?] at org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:237) ~[?:?] ... 24 more What are the changes between Camel 2.x and 3.x about transactions ? Thanks for your help. Regards.
<?xml version="1.0" encoding="UTF-8"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0 http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.1.0.xsd"> <cm:property-placeholder persistent-id="my_test_26_karaf_2_routes" update-strategy="reload"> <cm:default-properties> <cm:property name="my.option" value="value" /> </cm:default-properties> </cm:property-placeholder> <reference id="myHelper" interface="my.test.t26.helper.Helper" availability="mandatory" /> <reference id="myUOWF" interface="my.test.t26.uow.CustomUnitOfWorkFactory" availability="mandatory" /> <reference id="myJMS" interface="javax.jms.ConnectionFactory" availability="mandatory" /> <reference id="myDB" interface="javax.sql.DataSource" filter="(osgi.jndi.service.name=jdbc/fifi)" availability="mandatory" /> <!-- <reference --> <!-- id="myCluster" --> <!-- interface="org.apache.camel.cluster.CamelClusterService" --> <!-- availability="mandatory" /> --> <camelContext id="KT1" streamCache="true" useMDCLogging="true" xmlns="http://camel.apache.org/schema/blueprint" xsi:schemaLocation="http://camel.apache.org/schema/blueprint https://camel.apache.org/schema/blueprint/camel-blueprint-3.18.4.xsd"> <onException> <exception>java.lang.Exception</exception> <handled> <constant>false</constant> </handled> <log loggingLevel="ERROR" message="EXCEPTION on route ${routeId} : '${exception}' \n${exception.stacktrace}" /> </onException> <route id="KT1-File"> <!-- <from uri="master:K1-FILE:file://{{my.input-folder}}?delete=true&moveFailed=.ERROR" /> --> <from uri="master:K1-FILE:file:///SHARE/data/input?delete=true&moveFailed=.ERROR" /> <transacted /> <log message="File : ${headers.CamelFilePath}" /> <unmarshal> <csv /> </unmarshal> <split shareUnitOfWork="true"> <simple>${body}</simple> <log message="Line : ${body}" /> <split shareUnitOfWork="true"> <simple>${body}</simple> <transform> <groovy>"-- ${request.body} --".toString()</groovy> </transform> <to uri="bean:myHelper" /> <log message="Field : ${body}" /> <to uri="jms:queue:k1-test-queue-1?connectionFactory=#myJMS&transacted=true" /> <transform> <groovy> [ request.getHeader('MyCorrelationId'), request.getHeader('CamelFileName'), request.body ] </groovy> </transform> <setProperty name="mySQL"> <groovy> """ INSERT INTO fifi.karaf1 ( correlation_id, file, message, moment, clock ) VALUES ( #, #, #, now(), clock_timestamp() ) """.stripIndent().toString().replaceAll('(\t|\r|\n)', '') </groovy> </setProperty> <toD uri="sql:${exchangeProperty.mySQL}?dataSource=#myDB" /> </split> </split> <log message="End of ID : ${header.MyCorrelationId}" /> </route> <route id="KT1-AMQ"> <from uri="master:K1-JMS:jms:queue:k1-test-queue-1?connectionFactory=#myJMS" /> <log message="AMQ routing [${headers.MyCorrelationId}-${headers.CamelFileName}] : ${body}" /> </route> </camelContext> </blueprint>