Effectively the producer method is the same like having a method getEm() in my 
@Stateful 

The EM is imo still bound to the @Stateful but it is _used_ outside of it. 
I gonna rewrite the sample to use the Stateful as interceptor. But I fear it 
will still not work.

LieGrue,
strub




----- Original Message -----
> From: Romain Manni-Bucau <[email protected]>
> To: [email protected]; Mark Struberg <[email protected]>
> Cc: 
> Sent: Wednesday, 26 June 2013, 9:10
> Subject: Re: em.find outside of a JTA transaction
> 
> hmm, aren't you used to produce your own em instead of using a container
> one? whatever you can use a stateful directly to achieve it but you can't
> produce an extended em.
> 
> The spec is not that clear about it, it says the extended em is bound to
> the stateful. You can still wrap your calls in the stateful
> (call(Callable)) but it is a bit less elegant.
> 
> *Romain Manni-Bucau*
> *Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
> *Blog: 
> **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
> *LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
> *Github: https://github.com/rmannibucau*
> 
> 
> 
> 2013/6/26 Mark Struberg <[email protected]>
> 
>>  Why should it not be allowed?
>>  There are even samples for a PersistenceContext producer field in the CDI
>>  spec. They are not EXTENDED though.
>> 
>>  > Btw not sure what you want to achieve with it...
>>  That one is pretty easy to explain. By default when working without DTOs
>>  but with plain entities on the frontend you need to em.merge() the entity
>>  on any postback because otherwise lazy loading and navigation would not
>>  work. But this has the side effect that changes in the entity automatically
>>  get stored in the database - even if the user didn't want to because he
>>  didn't yet press the 'Save' button.
>> 
>>  By using an unsynchronized transaction context and explicitly call
>>  em.joinTransactio() when in the save() action, all the changes in the DB
>>  only happens when the user really likes to store it.
>> 
>>  All the trick with the EntityManager producer is just to make sure there
>>  is no synchronized transaction attached to the EM on the postback.
>> 
>>  got me?
>> 
>>  LieGrue,
>>  strub
>> 
>> 
>> 
>> 
>>  ----- Original Message -----
>>  > From: Romain Manni-Bucau <[email protected]>
>>  > To: Mark Struberg <[email protected]>; [email protected]
>>  > Cc:
>>  > Sent: Tuesday, 25 June 2013, 17:37
>>  > Subject: Re: em.find outside of a JTA transaction
>>  >
>>  > Hi Mark
>>  >
>>  > You produce an extended em, that's not allowed i think (i didnt 
> say it is
>>  > forbidden). Btw not sure what you want to achieve with it...
>>  > Le 25 juin 2013 17:13, "Mark Struberg" 
> <[email protected]> a
>>  > écrit :
>>  >
>>  >>
>>  >>
>>  >>  Hi!
>>  >>
>>  >>  According to the spec all read operations on an EntityManager 
> should
>>  work
>>  >>  and only write operations must be queued up until 
> em.joinTransaction()
>>  gets
>>  >>  called.
>>  >>  Is this correct?
>>  >>
>>  >>  Maybe I have an error in my sample, but I get a nasty Exception 
> in my
>>  >>  sample.
>>  >>
>>  >>  https://github.com/struberg/jta_test
>>  >>  just mvn clean install
>>  >>
>>  >>  java.lang.IllegalStateException: InternalError: an entity manager
>>  should
>>  >>  already be registered for this extended persistence unit
>>  >>      at
>>  >>
>>  >
>> 
> org.apache.openejb.persistence.JtaEntityManagerRegistry.getEntityManager(JtaEntityManagerRegistry.java:99)
>>  >>      at
>>  >>
>>  >
>> 
> org.apache.openejb.persistence.JtaEntityManager.getEntityManager(JtaEntityManager.java:91)
>>  >>      at
>>  >>
>>  >
>> 
> org.apache.openejb.persistence.JtaEntityManager.find(JtaEntityManager.java:164)
>>  >>      at
>>  >>
>>  >
>> 
> org.apache.webbeans.custom.persistence.EntityManager$$OwbNormalScopeProxy0.find(javax/persistence/EntityManager.java)
>>  >>      at
>>  >>  
> at.struct.jpatest.CustomerService.loadCustomer(CustomerService.java:56)
>>  >>      at
>>  >>
>>  >
>> 
> at.struct.jpatest.CustomerService$$OwbNormalScopeProxy0.loadCustomer(at/struct/jpatest/CustomerService.java)
>>  >>      at 
> at.struct.jpatest.StoreTest.assertSurName(StoreTest.java:67)
>>  >>      at
>>  at.struct.jpatest.StoreTest.testCustomerLifecycle(StoreTest.java:41)
>>  >>
>>  >>  LieGrue,
>>  >>  strub
>>  >>
>>  >
>> 
>

Reply via email to