[
https://issues.apache.org/jira/browse/OPENEJB-1443?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13191085#comment-13191085
]
David Blevins commented on OPENEJB-1443:
----------------------------------------
2011-11-29 - http://svn.apache.org/viewvc?view=revision&revision=1207802 -
rmannibucau
> EntityManager in non-transactional business methods using queries can be used
> only once
> ---------------------------------------------------------------------------------------
>
> Key: OPENEJB-1443
> URL: https://issues.apache.org/jira/browse/OPENEJB-1443
> Project: OpenEJB
> Issue Type: Bug
> Components: integration
> Affects Versions: 3.1.4
> Reporter: David Allen
> Fix For: 4.0.0-beta-2
>
>
> A call without any transaction on a business method which does not require a
> transaction cannot use the EntityManager after making a query. The Query
> object is wrapped by JtaQuery which closes the EntityManager after any call
> to the object. The following is an example that does not work when called
> outside of any transaction, where em is the injected EntityManager:
> @TransactionAttribute(TransactionAttributeType.SUPPORTS)
> public City getCity(String cityName) {
> Query query = null;
> query = em.createNamedQuery("City.RetrieveCityByName");
> query.setParameter(1, cityName);
> if (!query.getResultList().isEmpty())
> --> return (City) query.getResultList().get(0);
> else
> throw new RuntimeException("Cannot locate a city named
> " +
> cityName);
> }
> The first call to getResultList() is OK, but the second call fails because it
> already closed the EntityManager. The following stack trace excerpt shows
> the stack in OpenEJB during the second call to getResultList():
> Caused by: java.lang.IllegalStateException: Attempting to execute an
> operation on a closed EntityManager.
> at
> org.eclipse.persistence.internal.jpa.EntityManagerImpl.verifyOpen(EntityManagerImpl.java:1516)
> at
> org.eclipse.persistence.internal.jpa.EntityManagerImpl.close(EntityManagerImpl.java:1380)
> at
> org.apache.openejb.persistence.JtaQuery.getResultList(JtaQuery.java:45)
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira