Hi,

With a jta persistence unit you shouldnt manage these things.

Then the cache of queries should be configured for sql queries. Jpa queries
are not so costly.

- Romain
Le 4 oct. 2012 01:47, "David Jencks" <[email protected]> a écrit :

> I see that both geronimo and openejb have jta or non-tx jpa query wrappers
> that close the entity manager after the query executes.  This pretty
> effectively prevents the query from being re-executed.
>
> Despite recalling having written the geronimo version, I can't remember
> why this is necessary.
>
> We've found someone who is doing something like this:
>
> @Stateless
> @ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
> @TransactionManagement(TransactionManagementType.CONTAINER)
> @TransactionAttribute(TransactionAttributeType.REQUIRED)
> public class Foo implements FooLocal
> {
>     @PersistenceContext(unitName="FooJpa", type =
> PersistenceContextType.TRANSACTION) private EntityManager em;
>
>     private Query findBars;
>
>     @PostConstruct void postConstruct()
>     {
>             findBars = em.createNamedQuery("findBars");
>     }
>
>     public Collection<Bar> getAllBars() {
>       return findBars.getResultList();
>   }
> }
>
> The second time getAllBars() is called, the em is closed.
>
> There are some other errors in their code which might possibly be causing
> this, but I think what is happening is that the postconstruct is executing
> outside a jta transaction, so that the findBars query is a wrapped query
> that closes itself after the query executes, even though it is executing in
> a jta environment.
>
> Should our wrapper only close the em if it is executed (rather than
> created) outside a jta tx?
>
> advice really appreciated :-)
>
> thanks
> david jencks
>
>
>

Reply via email to