This is really an area where we should spend some time in the docs
discussing the pros/cons of each EM approach as well as the endorsed
ways of setting them in a project.

CODI already has a good start -
https://cwiki.apache.org/EXTCDI/jpa-usage.html but I'm not sure the
relationship between each and TX support is clear.

On Sun, Aug 26, 2012 at 5:30 PM, Stuart Douglas <[email protected]> wrote:
>
> On 24/08/2012, at 7:47 PM, Mark Struberg <[email protected]> wrote:
>
>> Well, we might miss some explanation for this lines
>>
>>
>>>   @PersistenceContext(unitName="default")
>>> private EntityManager entityManager;
>> This only works in SE. In an EE container you will get a Container Managed 
>> EM, which is not manageable by the user, but strictly bound to EJBs.
>>
>> Even the sample of softwaremill will not work on every EE container
>>
>>>    @PersistenceUnit(name="pu")
>>>    private EntityManagerFactory emf;
>>
>> On a few servers the EE - injected EMF will only allow you to create managed 
>> EMs.
>>
>
> This is a complete violation of the JPA spec, which containers do this?
>
> Stuart
>
>
>> The best approach is to either create an additional 
>> EntityManagerFactoryProducer where you can even stuff in JPA properties in a 
>> central place, and inject it via CDI:
>>
>>>    @Inject
>>>    private EntityManagerFactory emf;
>> Or you can simply do:
>>
>>> @ApplicationScoped // important!
>>> public class EntityManagerProducer {
>>>    private EntityManagerFactory emf = 
>>> Persistence.createEntityManagerFactory();
>>>
>>>     @Produces @RequestScoped
>>>     public EntityManager getEntityManager() {
>>>         return new EntityManagerTxEnlistDecorator 
>>> (emf.createEntityManager());
>>>     }
>>>
>>>     public void close(@Disposes EntityManager em) {
>>>         em.close();
>>>     }
>>> }
>>>
>>
>> Please note that this is the classic way to get a non-JTA EM! If you like to 
>> use UserTransactions, then check our JPA module. Guess Gerhard added a 
>> sample for it.
>>
>> LieGrue,
>> strub
>>
>>
>>
>>
>> ----- Original Message -----
>>> From: Adrian Gonzalez <[email protected]>
>>> To: "[email protected]" 
>>> <[email protected]>
>>> Cc:
>>> Sent: Friday, August 24, 2012 11:38 AM
>>> Subject: RequestScoped entityManager
>>>
>>> Hello,
>>>
>>> Does DS provides a requestScopes em ?
>>>
>>> I tried to to something like 
>>> https://cwiki.apache.org/EXTCDI/jpa-usage.html, but
>>> I had an error (don't remember which one, I think it was because em
>>> wasn't associated with current tx)
>>>
>>> For the moment, I'm using softwaremill EntityManagerTxEnlistDecorator
>>> (https://github.com/softwaremill/softwaremill-common/tree/master/softwaremill-cdi/src/main/java/pl/softwaremill/common/cdi/persistence
>>> and doing something like (I'm doing it from memory so, there can be some
>>> errors) :
>>>
>>> public class EntityManagerProducer {
>>>    @PersistenceUnit(name="pu")
>>>    private EntityManagerFactory emf;
>>>
>>>     @Produces @RequestScoped
>>>     public EntityManager getEntityManager() {
>>>         return new EntityManagerTxEnlistDecorator 
>>> (emf.createEntityManager());
>>>     }
>>>
>>>     public void close(@Disposes EntityManager em) {
>>>         em.close();
>>>     }
>>> }
>>>
>>> Not sure if it deserves a special classe in DS (perhaps at least
>>> softwaremill EntityManagerTxEnlistDecorator   ?)
>>>
>>> Thanks
>>>
>

Reply via email to