[OPS4J JDBC] javax.persistence.TransactionRequiredException: no transaction is in progress on local TX

1,075 views
Skip to first unread message

Maurice Betzel

unread,
Aug 23, 2017, 10:53:38 AM8/23/17
to OPS4J
Dear community, i think i have a issue wiring up Spring(Blueprint) / Hibernate / JPA / OPS4J JDBC / Camel, using:

  1. Karaf 4.0.8 (Felix)
  2. Servicemix Spring 3.2.17
  3. Aries JPA 2.3.0
  4. Hibernate 4.3.6
  5. OPS4J Pax JDBC 0.9.0
  6. Camel 2.16.5

The problem occurs when running a camel route using transaction demarcation on it giving a javax.persistence.TransactionRequiredException: no transaction is in progress.


Persistence unit


<persistence-unit name="pydio2xbound_mssql_persistence_unit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<non-jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=pydio2xbound-mssql)</non-jta-data-source>
<class>de.hmm.medit.esb.xbound.pydio2xbound.some.classes</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"/>
<property name="hibernate.ejb.entitymanager_factory_name" value="mssql"/>
<property name="hibernate.connection.release_mode" value="auto"/>
<property name="hibernate.connection.autocommit" value="false" />
<property name="hibernate.showsql" value="false"/>
</properties>
</persistence-unit>


DAO context:


<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jpa="http://aries.apache.org/xmlns/jpa/v2.0.0"
xmlns:tx="http://aries.apache.org/xmlns/transactions/v2.0.0"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://aries.apache.org/xmlns/jpa/v2.0.0 http://aries.apache.org/schemas/jpa/jpa_200.xsd">

<jpa:enable/>
<tx:enable/>

<bean id="daoService" class="de.hmm.medit.esb.xbound.pydio2xbound.persistence.dao.impl.WellspectDao"/>
<service ref="daoService" interface="de.hmm.medit.esb.xbound.pydio2xbound.persistence.dao.spi.WellspectDaoService"/>

</blueprint>


DAO service:


public class Dao implements DaoService {

@PersistenceContext(unitName = UNIT_NAME_MSSQL)
EntityManager entityManagerMSSQL;

@Transactional(Transactional.TxType.REQUIRED)
@Override
public void persist(AuftragsDatei auftragsDatei) {
entityManagerMSSQL.persist(auftragsDatei);
...etc...


OPS4J Persistence config file:


dataSourceName=pydio2xbound-mssql
databaseName=pydio2xbound
osgi.jdbc.driver.name=mssql-pool
url=jdbc:sqlserver://127.0.0.1:1433
user=root
password=************
jdbc.pool.maxTotal=4
#jdbc.factory.defaultAutoCommit=false


Karaf list datasource:


^karaf@root>service:list DataSource
[javax.sql.DataSource]
----------------------
 databaseName = pydio2xbound
 dataSourceName = pydio2xbound-mssql
 felix.fileinstall.filename = file:/E:/Development/karaf/medit-esb-1.3.1-SNAPSHOT/etc/org.ops4j.datasource-xbound.pydio2xbound.mssql.persistence.cfg
 jdbc.pool.maxTotal = 4
 osgi.jdbc.driver.name = mssql-pool
 osgi.jndi.service.name = pydio2xbound-mssql
 password = *********
 service.bundleid = 252
 service.factoryPid = org.ops4j.datasource
 service.id = 271
 service.pid = org.ops4j.datasource.0025c61e-c8d5-451f-91e5-f1258d806ce5
 service.scope = singleton
 url = jdbc:sqlserver://127.0.0.1:1433
 user = root
Provided by :
 OPS4J Pax JDBC Config (252)
Used by:
 Apache Aries JPA container (236)


Spring / Camel context:


<reference id="mssqlDatasource" interface="javax.sql.DataSource" filter="(&amp;(objectClass=javax.sql.DataSource)(dataSourceName=pydio2xbound-mssql))" availability="mandatory"/>

<reference id="daoService" interface="de.hmm.medit.esb.xbound.pydio2xbound.persistence.dao.spi.DaoService"/>

<bean id="dbTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="mssqlDatasource"/>
</bean>

<bean id="dbPropagationRequired" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
<property name="transactionManager" ref="dbTransactionManager"/>
<property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
</bean>

<camelContext id="xbound-service-pydio2xbound-aggregation" xmlns="http://camel.apache.org/schema/blueprint">


<route id="idempotent-data-persistence">
<from uri="direct:process-data"/>
<transacted ref="dbPropagationRequired"/>

<setHeader headerName="CamelHttpMethod">
<constant>GET</constant>
</setHeader>
<enrich strategyRef="dataAggregationStrategy">
<simple>cxfrs:bean:dynamicClient?address=${in.header.CamelHttpUri}</simple>
</enrich>
<process ref="csvParserProcessor"/>
<setHeader headerName="body">
<simple>${body}</simple>
</setHeader>
<setBody>
<simple>${body.auftragsDatei}</simple>
</setBody>
<bean
ref="wellspectDaoService" method="persistDetectingDuplicatesMSSQL"/>
<...some more routing...>
</route>



Complete stacktrace:


2017-08-23 16:43:00,070 | DEBUG | 4 - timer://rest | aggregation                      | 48 - org.apache.camel.camel-core - 2.16.5 | Processing file : https://transfer.zhp-online.de/pydio/api/v2/io/my-files/excel/Auftrags%2520daten_20170504-8.csv
2017-08-23 16:43:00,070 | DEBUG | 4 - timer://rest | DataSourceTransactionManager     | 157 - org.apache.servicemix.bundles.spring-tx - 3.2.17.RELEASE_1 | Creating new transaction with name [null]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
2017-08-23 16:43:00,070 | DEBUG | 4 - timer://rest | DataSourceTransactionManager     | 157 - org.apache.servicemix.bundles.spring-tx - 3.2.17.RELEASE_1 | Acquired Connection [1735559577, URL=jdbc:sqlserver://127.0.0.1:1433;authenticationScheme=nativeAuthentication;xopenStates=false;sendTimeAsDatetime=true;trustServerCertificate=false;sendStringParametersAsUnicode=true;selectMethod=direct;responseBuffering=adaptive;packetSize=8000;multiSubnetFailover=false;loginTimeout=15;lockTimeout=-1;lastUpdateCount=true;encrypt=false;disableStatementPooling=true;databaseName=pydio2xbound;applicationName=Microsoft JDBC Driver for SQL Server;applicationIntent=readwrite;, UserName=root, Microsoft JDBC Driver 4.1 for SQL Server] for JDBC transaction
2017-08-23 16:43:00,070 | DEBUG | 4 - timer://rest | DataSourceTransactionManager     | 157 - org.apache.servicemix.bundles.spring-tx - 3.2.17.RELEASE_1 | Switching JDBC Connection [1735559577, URL=jdbc:sqlserver://127.0.0.1:1433;authenticationScheme=nativeAuthentication;xopenStates=false;sendTimeAsDatetime=true;trustServerCertificate=false;sendStringParametersAsUnicode=true;selectMethod=direct;responseBuffering=adaptive;packetSize=8000;multiSubnetFailover=false;loginTimeout=15;lockTimeout=-1;lastUpdateCount=true;encrypt=false;disableStatementPooling=true;databaseName=pydio2xbound;applicationName=Microsoft JDBC Driver for SQL Server;applicationIntent=readwrite;, UserName=root, Microsoft JDBC Driver 4.1 for SQL Server] to manual commit
2017-08-23 16:43:00,070 | DEBUG | 4 - timer://rest | aggregation                      | 48 - org.apache.camel.camel-core - 2.16.5 | Persisting https://transfer.zhp-online.de/pydio/api/v2/io/my-files/excel/Auftrags%2520daten_20170504-8.csv
2017-08-23 16:43:00,354 | DEBUG | 4 - timer://rest | TikaProcessor                    | 437 - de.hmm.medit.esb.tika.service - 1.3.1.SNAPSHOT | Metadata of the document:
2017-08-23 16:43:00,354 | DEBUG | 4 - timer://rest | TikaProcessor                    | 437 - de.hmm.medit.esb.tika.service - 1.3.1.SNAPSHOT | Content-Encoding : windows-1252
2017-08-23 16:43:00,354 | DEBUG | 4 - timer://rest | TikaProcessor                    | 437 - de.hmm.medit.esb.tika.service - 1.3.1.SNAPSHOT | resourceName : Auftrags daten_20170504-8.csv
2017-08-23 16:43:00,354 | DEBUG | 4 - timer://rest | TikaProcessor                    | 437 - de.hmm.medit.esb.tika.service - 1.3.1.SNAPSHOT | Content-Type : text/csv; charset=windows-1252
2017-08-23 16:43:00,386 | DEBUG | 4 - timer://rest | CSVParserProcessor               | 621 - de.hmm.medit.esb.xbound.pydio2xbound.aggregation - 1.3.1.SNAPSHOT | Parsed CSV entries: 107
2017-08-23 16:43:00,402 | ERROR | 4 - timer://rest | DefaultErrorHandler              | 48 - org.apache.camel.camel-core - 2.16.5 | Failed delivery for (MessageId: ID-LH00127-56851-1503499248618-1-14 on ExchangeId: ID-LH00127-56851-1503499248618-1-13). Exhausted after delivery attempt: 1 caught: javax.persistence.TransactionRequiredException: no transaction is in progress

Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
[aggregation-rest-c] [aggregation-rest-c] [timer://rest?fixedRate=true&repeatCount=1                                     ] [       548]
[aggregation-rest-c] [filter3           ] [filter[simple{${body.mimeString} == 'text/csv' or ${body.mimeString} == 'appli] [       332]
[aggregation-rest-c] [bean8             ] [bean[ref:uriBuilder method: setFileURIv2]                                     ] [         0]
[aggregation-rest-c] [log14             ] [log                                                                           ] [         0]
[aggregation-rest-c] [to11              ] [direct:process-data                                                           ] [       332]
[idempotent-data-pe] [transacted3       ] [transacted[ref:dbPropagationRequired]                                         ] [       332]
[idempotent-data-pe] [log16             ] [log                                                                           ] [         0]
[idempotent-data-pe] [setHeader16       ] [setHeader[CamelHttpMethod]                                                    ] [         0]
[idempotent-data-pe] [enrich3           ] [enrich[simple{cxfrs:bean:dynamicClient?address=${in.header.CamelHttpUri}}]    ] [       153]
[idempotent-data-pe] [process3          ] [ref:csvParserProcessor                                                        ] [       163]
[idempotent-data-pe] [setHeader17       ] [setHeader[body]                                                               ] [         0]
[idempotent-data-pe] [setBody5          ] [setBody[simple{${body.auftragsDatei}}]                               ] [         0]
[idempotent-data-pe] [bean10            ] [bean[ref:daoService method: persist]         ] [        16]

Exchange
---------------------------------------------------------------------------------------------------------------------------------------
Exchange[
    Id                  ID-LH00127-56851-1503499248618-1-13
    ExchangePattern     InOnly
    Headers             {Accept-Ranges=0-211690, body=de.hmm.medit.esb.xbound.pydio2xbound.aggregation.internal.model.PydioContent@6c23ef27, breadcrumbId=ID-LH00127-56851-1503499248618-1-1, Cache-Control=no-cache, must-revalidate, CamelHttpMethod=GET, CamelHttpResponseCode=200, CamelHttpUri=https://transfer.zhp-online.de/pydio/api/v2/io/my-files/excel/Auftrags%2520daten_20170504-8.csv, CamelRedelivered=false, CamelRedeliveryCounter=0, connection=close, Content-Disposition=attachment; filename="Auftrags daten_20170504-8.csv", Content-Length=211690, Content-Range=bytes 0-211689/211690;, content-transfer-encoding=binary, content-type=application/force-download; name="Auftrags daten_20170504-8.csv", Date=Wed, 23 Aug 2017 14:43:00 GMT, Expires=0, firedTime=Wed Aug 23 16:42:59 CEST 2017, Pragma=no-cache, Server=Apache/2.4.18 (Red Hat) PHP/5.6.25, X-Powered-By=PHP/5.6.25}
    BodyType            de.hmm.medit.esb.xbound.pydio2xbound.persistence.entities.AuftragsDatei
    Body                de.hmm.medit.esb.xbound.pydio2xbound.persistence.entities.AuftragsDatei@16cf6715
]

Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
javax.persistence.TransactionRequiredException: no transaction is in progress
    at org.hibernate.jpa.spi.AbstractQueryImpl.checkTransaction(AbstractQueryImpl.java:222)
    at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:492)
    at de.hmm.medit.esb.xbound.pydio2xbound.persistence.dao.impl.Dao.persistDetectingDuplicatesMSSQL(Dao.java:42)
    at Proxyac81bcf6_79cf_4580_afb2_4af8d3f3666c.persistDetectingDuplicatesMSSQL(Unknown Source)
    at Proxy33315017_2dda_4860_80a6_a01c145301b5.persistDetectingDuplicatesMSSQL(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_121]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_121]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_121]
    at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_121]
    at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:408)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:279)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:252)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:177)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:337)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:59)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:171)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.processByErrorHandler(TransactionErrorHandler.java:218)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:99)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:112)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.processByErrorHandler(TransactionErrorHandler.java:218)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler$1.doInTransactionWithoutResult(TransactionErrorHandler.java:181)[52:org.apache.camel.camel-spring:2.16.5]
    at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:33)[157:org.apache.servicemix.bundles.spring-tx:3.2.17.RELEASE_1]
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:131)[157:org.apache.servicemix.bundles.spring-tx:3.2.17.RELEASE_1]
    at org.apache.camel.spring.spi.TransactionErrorHandler.doInTransactionTemplate(TransactionErrorHandler.java:174)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.processInTransaction(TransactionErrorHandler.java:134)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:103)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:112)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.FilterProcessor.process(FilterProcessor.java:57)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:677)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:605)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:237)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Splitter.process(Splitter.java:104)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:165)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:73)[48:org.apache.camel.camel-core:2.16.5]
    at java.util.TimerThread.mainLoop(Timer.java:555)[:1.8.0_121]
    at java.util.TimerThread.run(Timer.java:505)[:1.8.0_121]
2017-08-23 16:43:00,404 | DEBUG | 4 - timer://rest | TransactionTemplate              | 157 - org.apache.servicemix.bundles.spring-tx - 3.2.17.RELEASE_1 | Initiating transaction rollback on application exception
org.apache.camel.RuntimeCamelException: javax.persistence.TransactionRequiredException: no transaction is in progress
    at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1652)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler$1.doInTransactionWithoutResult(TransactionErrorHandler.java:188)[52:org.apache.camel.camel-spring:2.16.5]
    at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:33)[157:org.apache.servicemix.bundles.spring-tx:3.2.17.RELEASE_1]
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:131)[157:org.apache.servicemix.bundles.spring-tx:3.2.17.RELEASE_1]
    at org.apache.camel.spring.spi.TransactionErrorHandler.doInTransactionTemplate(TransactionErrorHandler.java:174)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.processInTransaction(TransactionErrorHandler.java:134)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:103)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:112)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.FilterProcessor.process(FilterProcessor.java:57)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:677)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:605)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:237)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Splitter.process(Splitter.java:104)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:165)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:73)[48:org.apache.camel.camel-core:2.16.5]
    at java.util.TimerThread.mainLoop(Timer.java:555)[:1.8.0_121]
    at java.util.TimerThread.run(Timer.java:505)[:1.8.0_121]
Caused by: javax.persistence.TransactionRequiredException: no transaction is in progress
    at org.hibernate.jpa.spi.AbstractQueryImpl.checkTransaction(AbstractQueryImpl.java:222)
    at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:492)
    at de.hmm.medit.esb.xbound.pydio2xbound.persistence.dao.impl.Dao.persistDetectingDuplicatesMSSQL(Dao.java:42)
    at Proxyac81bcf6_79cf_4580_afb2_4af8d3f3666c.persistDetectingDuplicatesMSSQL(Unknown Source)
    at Proxy33315017_2dda_4860_80a6_a01c145301b5.persistDetectingDuplicatesMSSQL(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_121]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_121]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_121]
    at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_121]
    at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:408)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:279)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:252)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:177)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:337)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:59)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:171)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.processByErrorHandler(TransactionErrorHandler.java:218)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:99)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:112)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.processByErrorHandler(TransactionErrorHandler.java:218)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler$1.doInTransactionWithoutResult(TransactionErrorHandler.java:181)[52:org.apache.camel.camel-spring:2.16.5]
    ... 35 more
2017-08-23 16:43:00,406 | DEBUG | 4 - timer://rest | DataSourceTransactionManager     | 157 - org.apache.servicemix.bundles.spring-tx - 3.2.17.RELEASE_1 | Initiating transaction rollback
2017-08-23 16:43:00,407 | DEBUG | 4 - timer://rest | DataSourceTransactionManager     | 157 - org.apache.servicemix.bundles.spring-tx - 3.2.17.RELEASE_1 | Rolling back JDBC transaction on Connection [1735559577, URL=jdbc:sqlserver://127.0.0.1:1433;authenticationScheme=nativeAuthentication;xopenStates=false;sendTimeAsDatetime=true;trustServerCertificate=false;sendStringParametersAsUnicode=true;selectMethod=direct;responseBuffering=adaptive;packetSize=8000;multiSubnetFailover=false;loginTimeout=15;lockTimeout=-1;lastUpdateCount=true;encrypt=false;disableStatementPooling=true;databaseName=pydio2xbound;applicationName=Microsoft JDBC Driver for SQL Server;applicationIntent=readwrite;, UserName=root, Microsoft JDBC Driver 4.1 for SQL Server]
2017-08-23 16:43:00,408 | DEBUG | 4 - timer://rest | DataSourceTransactionManager     | 157 - org.apache.servicemix.bundles.spring-tx - 3.2.17.RELEASE_1 | Releasing JDBC Connection [1735559577, URL=jdbc:sqlserver://127.0.0.1:1433;authenticationScheme=nativeAuthentication;xopenStates=false;sendTimeAsDatetime=true;trustServerCertificate=false;sendStringParametersAsUnicode=true;selectMethod=direct;responseBuffering=adaptive;packetSize=8000;multiSubnetFailover=false;loginTimeout=15;lockTimeout=-1;lastUpdateCount=true;encrypt=false;disableStatementPooling=true;databaseName=pydio2xbound;applicationName=Microsoft JDBC Driver for SQL Server;applicationIntent=readwrite;, UserName=root, Microsoft JDBC Driver 4.1 for SQL Server] after transaction
2017-08-23 16:43:00,408 | DEBUG | 4 - timer://rest | DataSourceUtils                  | 552 - org.apache.servicemix.bundles.spring-jdbc - 3.2.17.RELEASE_1 | Returning JDBC Connection to DataSource
2017-08-23 16:43:00,408 | WARN  | 4 - timer://rest | TransactionErrorHandler          | 48 - org.apache.camel.camel-core - 2.16.5 | Transaction rollback (0x6fa0c2c8) redelivered(unknown) for (MessageId: ID-LH00127-56851-1503499248618-1-12 on ExchangeId: ID-LH00127-56851-1503499248618-1-13) caught: javax.persistence.TransactionRequiredException: no transaction is in progress
2017-08-23 16:43:00,408 | WARN  | 4 - timer://rest | TimerConsumer                    | 48 - org.apache.camel.camel-core - 2.16.5 | Error processing exchange. Exchange[ID-LH00127-56851-1503499248618-1-2][Message: de.hmm.medit.esb.pydio.api.TreeNodeSaxHandler@467c1a52]. Caused by: [org.apache.camel.RuntimeCamelException - javax.persistence.TransactionRequiredException: no transaction is in progress]
org.apache.camel.RuntimeCamelException: javax.persistence.TransactionRequiredException: no transaction is in progress
    at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1652)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler$1.doInTransactionWithoutResult(TransactionErrorHandler.java:188)[52:org.apache.camel.camel-spring:2.16.5]
    at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:33)[157:org.apache.servicemix.bundles.spring-tx:3.2.17.RELEASE_1]
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:131)[157:org.apache.servicemix.bundles.spring-tx:3.2.17.RELEASE_1]
    at org.apache.camel.spring.spi.TransactionErrorHandler.doInTransactionTemplate(TransactionErrorHandler.java:174)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.processInTransaction(TransactionErrorHandler.java:134)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:103)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:112)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.FilterProcessor.process(FilterProcessor.java:57)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:677)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:605)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:237)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Splitter.process(Splitter.java:104)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:165)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:73)[48:org.apache.camel.camel-core:2.16.5]
    at java.util.TimerThread.mainLoop(Timer.java:555)[:1.8.0_121]
    at java.util.TimerThread.run(Timer.java:505)[:1.8.0_121]
Caused by: javax.persistence.TransactionRequiredException: no transaction is in progress
    at org.hibernate.jpa.spi.AbstractQueryImpl.checkTransaction(AbstractQueryImpl.java:222)
    at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:492)
    at de.hmm.medit.esb.xbound.pydio2xbound.persistence.dao.impl.Dao.persistDetectingDuplicatesMSSQL(Dao.java:42)
    at Proxyac81bcf6_79cf_4580_afb2_4af8d3f3666c.persistDetectingDuplicatesMSSQL(Unknown Source)
    at Proxy33315017_2dda_4860_80a6_a01c145301b5.persistDetectingDuplicatesMSSQL(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_121]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_121]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_121]
    at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_121]
    at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:408)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:279)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:252)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:177)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:337)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:59)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:171)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.processByErrorHandler(TransactionErrorHandler.java:218)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:99)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:112)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)[48:org.apache.camel.camel-core:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler.processByErrorHandler(TransactionErrorHandler.java:218)[52:org.apache.camel.camel-spring:2.16.5]
    at org.apache.camel.spring.spi.TransactionErrorHandler$1.doInTransactionWithoutResult(TransactionErrorHandler.java:181)[52:org.apache.camel.camel-spring:2.16.5]



A transaction is being set up, ut by the time it reaches my DAO there is no TX in progress. I guess i am using the wrong Spring JTA transaction manager?



Maurice Betzel

unread,
Aug 26, 2017, 6:14:52 AM8/26/17
to OPS4J
The solution i found sofar:

Get the TransactionManagerFactory With this TransactionManagerFactory i create a Spring JPA Platformtransactionmanager, which gets inserted in a Camel SpringTransactionPolicy.

<reference id="hibernateEntityManagerFactory" interface="javax.persistence.EntityManagerFactory" filter="(osgi.unit.name=pydio2xbound_mssql_persistence_unit)" availability="mandatory"/>

<reference id="wellspectDaoService" interface="de.hmm.medit.esb.xbound.pydio2xbound.wellspect.persistence.dao.spi.WellspectDaoService"/>

<bean id="jpaTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="hibernateEntityManagerFactory"/>
</bean>

<bean id="jpaPropagationRequired" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
<property name="transactionManager" ref="jpaTransactionManager"/>
    <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
</bean>

<bean id="daoProcessor" class="de.hmm.medit.esb.xbound.pydio2xbound.wellspect.aggregation.camel.impl.DaoProcessor">
<property name="entityManagerFactory" ref="hibernateEntityManagerFactory"/>
<property name="wellspectDaoService" ref="wellspectDaoService"/>
</bean>


This setup does createEntityManager(), doBegin() ect. on behalf of the Camel route.
For persistence in mid route i call the OSGi service method using the in route created EntityManager:

@Override
public void persistDetectingDuplicatesMSSQL(WellspectAuftragsDatei wellspectAuftragsDatei, EntityManager entityManager) {
entityManager.persist(wellspectAuftragsDatei);
etc...

Notice i disabled @Transactional to avoid Aries byte weaving this method, effectively deactivating Aries on this method call.
Extracting the, by this thread created, EntityManager from the EnityManagerFactory needed some research in Spring and is handled within the DaoProcessor:

EntityManager entityManager = EntityManagerFactoryUtils.getTransactionalEntityManager(entityManagerFactory);



Reply all
Reply to author
Forward
0 new messages