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
>>