[ 
https://issues.apache.org/jira/browse/OLINGO-580?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14541221#comment-14541221
 ] 

Ivan Lucas Vargas commented on OLINGO-580:
------------------------------------------

Hi,

Just to contribute with the issue, and also is the only way I found to get this 
working, I'll post some additional information. I followed the instructions 
given from [~chandan.v.a] above, but I was struggling with Hibernate saying me 
that there was no transaction in progress. As I'm using CDI, the logical way to 
get my local implementation of ODataJPATransaction was to inject the 
EntityManager via @PersistenceContext in order to call the em.joinTransaction() 
and have Hibernate tied to my transaction started at my begin() method 
implementation.

The problem here is that the ODataJPAContextImpl class, inside the 
getEntityManager(), creates one EntityManager (by calling 
emf.createEntityManager()) for each request. This EntityManager is not the same 
as my @PersistenceContext injection, causing to have two EntityManagers for 
each request and, as consequence, the em.joinTransaction() was "joining the 
transaction" for the wrong EntityManager. This lead to the Hibernate error "no 
transaction in progress". 

So, the solution I found for this issue is to set the ODataJPAContext into my 
local implementation of the ODataJPATransaction and ask from the EntityManager 
created from the ODataJPAContext itself. This way, I'm getting the same 
instance of the EntityManager created from Olingo and the 
getEntityManager().joinTransaction() works as expected.

In my understanding, in this case, instead of calling the 
context.setEntityManagerFactory(), I should pass my instance (created from CDI) 
of the EntityManager (through a new method context.setEntityManager(), for 
instance) itself and Olingo should use it. Is this correct or I'm missing 
something?

tks!

> Support JTA based transactions in JPA processor
> -----------------------------------------------
>
>                 Key: OLINGO-580
>                 URL: https://issues.apache.org/jira/browse/OLINGO-580
>             Project: Olingo
>          Issue Type: New Feature
>          Components: odata2-jpa
>    Affects Versions: V2 2.0.3
>            Reporter: Chandan V.A
>            Assignee: Chandan V.A
>             Fix For: V2 2.0.4
>
>         Attachments: OLINGO-580.diff
>
>
> Olingo V2 JPA processor supports RESOURCE_LOCAL based transaction. Enhance 
> the processor to support JTA based transactions.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to