I never tested doing distributed transactions but in literature the common
sense is that it sucks.

Christian

Am Di., 11. Dez. 2018 um 13:54 Uhr schrieb Niehues, Christian <
[email protected]>:

> And what would a transaction solution look like if the work is spread over
> different nodes in a cluster?
>
>
> Christian
>
> ------------------------------
> *Von:* Christian Schneider <[email protected]>
> *Gesendet:* Donnerstag, 6. Dezember 2018 17:07:48
> *An:* [email protected]
> *Betreff:* Re: Coordination between spring JtaTransactionManager and
> Aries JPA
>
> > I only still see some difference when using seda instead of direct in
> camel routes, so there seems to be some issue when using different threads.
> Yes. A transaction by default only works on the same thread.
>
> Christian
>
>
> Am Do., 6. Dez. 2018 um 14:46 Uhr schrieb Niehues, Christian <
> [email protected]>:
>
>> Hi Christian,
>>
>>
>> Thanks for the fast and detailed answer.
>>
>>
>> I think I already used a XADatasource because of the properties set in my
>> datasource configuration:
>>
>> pool=dbcp2
>> xa=true
>>
>> Question about that: I saw you can also use pool=aries but when I try to
>> use it I get no EntityManager. So do I have to change additional things?
>>
>>
>> I think my problem was that I didn't use a pooled connectionfactory.
>> Since I use XaPooledConnectionFactory like in your example it seems to
>> work.
>>
>> I only still see some difference when using seda instead of direct in
>> camel routes, so there seems to be some issue when using different threads.
>>
>> Also I need to check if it works when using cluster setup.
>>
>>
>> Thanks
>>
>> Christian
>>
>> ------------------------------
>> *Von:* Christian Schneider <[email protected]>
>> *Gesendet:* Mittwoch, 5. Dezember 2018 16:30:21
>> *An:* [email protected]
>> *Betreff:* Re: Coordination between spring JtaTransactionManager and
>> Aries JPA
>>
>> I also had the problem of combining jpa and camel transactions a while
>> ago and created an example and documentation for XA setup.
>> See:
>>
>> https://github.com/Talend/tesb-rt-se/blob/master/examples/tesb/ebook/xa-docs.md
>> https://github.com/Talend/tesb-rt-se/tree/master/examples/tesb/ebook
>>
>> Camel route:
>>
>> https://github.com/Talend/tesb-rt-se/blob/master/examples/tesb/ebook/ebook-importer/src/main/java/org/talend/esb/examples/ebook/importer/ImportRoutes.java
>>
>> The example reads from a xml file, parses each record into a jaxb bean
>> and sends the serialized bean to jms.
>> Then it reads from jms into a bean again and writes into a database using
>> jpa. This second flow coordinates a camel jms transaction and a jpa db
>> transaction using jta.
>>
>> You can find the necessary jta setup in the camel context:
>>
>> https://github.com/Talend/tesb-rt-se/blob/master/examples/tesb/ebook/ebook-connectionfactory/src/main/resources/OSGI-INF/blueprint/blueprint.xml
>>
>> and the connection factory definition:
>>
>> https://github.com/Talend/tesb-rt-se/blob/master/examples/tesb/ebook/ebook-importer/src/main/resources/OSGI-INF/blueprint/blueprint.xml
>>
>> I think what is not mentioned in the example is that you have to setup an
>> xa ready datasource (at least I did not find it) using pax-jdbc.
>> See
>>
>> https://ops4j1.jira.com/wiki/spaces/PAXJDBC/pages/119078914/Pooling+and+XA+support+in+1.0.0
>>
>> https://ops4j1.jira.com/wiki/spaces/PAXJDBC/pages/61767716/Pooling+and+XA+support+for+DataSourceFactory
>>
>> Cheers
>> Christian
>>
>>
>> Am Mi., 5. Dez. 2018 um 15:43 Uhr schrieb Niehues, Christian <
>> [email protected]>:
>>
>>> Hi,
>>>
>>> I have a server application running in karaf and I have problems to
>>> combine transactions defined in spring/camel and code having @Transactional
>>> annotation.
>>>
>>> In my blueprint.xml I have defined something like this:
>>>
>>> *   <reference id="jtaTransactionManager"
>>> interface="javax.transaction.TransactionManager" />*
>>> *   <reference id="userTransaction"
>>> interface="javax.transaction.UserTransaction" />*
>>>
>>> *   <bean id="transactionManager"
>>> class="org.springframework.transaction.jta.JtaTransactionManager">*
>>> *       <argument ref="jtaTransactionManager" />*
>>> *       <argument ref="userTransaction" />*
>>> *   </bean>*
>>>
>>> *   <bean id="PROPAGATION_REQUIRES_NEW"
>>> class="org.apache.camel.spring.spi.SpringTransactionPolicy">*
>>> *       <property name="transactionManager" ref="transactionManager" />*
>>> *       <property name="propagationBehaviorName"
>>> value="PROPAGATION_REQUIRES_NEW" />*
>>> *   </bean>*
>>>
>>> So I start a new transaction by using *PROPAGATION_REQUIRES_NEW *in a
>>> camel route. The camel route leads to a WebService endpoint. Anywhere in
>>> the underlying code where I use @Transactional and get a EntityManager
>>> injected I can see that the transaction is handled by a coordination from
>>> aries-jpa and gets committed by the uppermost @Transactional annotation.
>>> But I want that the underlying code uses the transaction created by the
>>> *PROPAGATION_REQUIRES_NEW* in the camel route so I am maybe able to
>>> rollback the transaction inside the camel route. How to achieve this? Do I
>>> have to use a TransactionManager from aries-jpa instead?
>>>
>>> Thanks in advance,
>>> Christian
>>>
>>>
>>
>> --
>> --
>> Christian Schneider
>> http://www.liquid-reality.de
>>
>> Computer Scientist
>> http://www.adobe.com
>>
>>
>
> --
> --
> Christian Schneider
> http://www.liquid-reality.de
>
> Computer Scientist
> http://www.adobe.com
>
>

-- 
-- 
Christian Schneider
http://www.liquid-reality.de

Computer Scientist
http://www.adobe.com

Reply via email to