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&amp;moveFailed=.ERROR" /> -->
			<from uri="master:K1-FILE:file:///SHARE/data/input?delete=true&amp;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&amp;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>

Reply via email to