You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Richard Luong <rl...@gmail.com> on 2011/04/20 22:23:52 UTC

Slice closing EntityManager on named queries

I'm using OpenJPA 2.1.0.  When executing a named query the first time 
(which goes to all slices), everything works fine.  However, on the 
second call to the named query, it appears that openjpa creates and 
closes the EntityManager instantly.  This then causes and 
IllegalStateException.  The code works fine when running on a non-sliced 
environment.  I'm able to call entityManager.find() multiple times 
without issue.

I'm pasting the log and my persistence unit below.  Any help would be 
appreciated.

Thanks,
Richard.

Code Snippet:
     public List<Permissions> findPermissionsByUserResource(Long userID, 
String resource) {
         log.info("about to use entityMgr");
         Query query = entityManager.createNamedQuery("permsByUser");
         query.setParameter("userIDParam", userID);
         query.setParameter("resourceParam", resource);
         Set<Permissions> results = new LinkedHashSet<Permissions>();
         results.addAll(query.getResultList());
         log.info("finished first query.  about to execute second");
         query = entityManager.createNamedQuery("permsByUserRoles");
         query.setParameter("userIDParam", userID);
         query.setParameter("resourceParam", resource);
         results.addAll(query.getResultList());
         log.info("finished second query. about to return.");
         return new ArrayList<Permissions>(results);
     }


Error Log:

... (1st time query is run)...

77779  platform_slice  TRACE  [http-8080-1] openjpa.Runtime - Found 
datasource1: datasource 1730863804 from configuration. StoreContext: 
org.apache.openjpa.kernel.BrokerImpl@308bd98e
77770  platform_slice.platform  TRACE  [http-8080-1] openjpa.Runtime - 
Found datasource1: datasource 1730863804 from configuration. 
StoreContext: org.apache.openjpa.kernel.BrokerImpl@308bd98e
77698  platform_slice.platform1  TRACE  [http-8080-1] openjpa.Runtime - 
Found datasource1: datasource 762843784 from configuration. 
StoreContext: org.apache.openjpa.kernel.BrokerImpl@308bd98e
77696  platform_slice.platform2  TRACE  [http-8080-1] openjpa.Runtime - 
Found datasource1: datasource 638105098 from configuration. 
StoreContext: org.apache.openjpa.kernel.BrokerImpl@308bd98e
77826  platform_slice  TRACE  [http-8080-1] openjpa.Runtime - 
org.apache.openjpa.persistence.EntityManagerFactoryImpl@2b8ca663 created 
EntityManager org.apache.openjpa.persistence.EntityManagerImpl@308bd98e.
2011-04-20 12:57:35,393 INFO [xxx.PermissionsDAOImpl] - about to use 
entityMgr
78122  platform_slice  TRACE  [http-8080-1] openjpa.Runtime - Query 
"SELECT perms FROM Permissions perms JOIN perms.users usrs JOIN 
perms.resource res WHERE usrs.uid = :userIDParam AND res.nameField = 
:resourceParam " is cached."
78308  platform_slice  WARN   [http-8080-1] openjpa.Runtime - Query 
"SELECT perms FROM Permissions perms JOIN perms.users usrs JOIN 
perms.resource res WHERE usrs.uid = :userIDParam AND res.nameField = 
:resourceParam " is removed from cache  excluded permanently. Query 
"SELECT perms FROM Permissions perms JOIN perms.users usrs JOIN 
perms.resource res WHERE usrs.uid = :userIDParam AND res.nameField = 
:resourceParam " is not cached because its result is not obtained by 
executing a select statement. This can happen if the query was evaluated 
in-memory. The result was provided by 
org.apache.openjpa.lib.rop.MergedResultObjectProvider.  .
2011-04-20 12:57:35,874 INFO 
[com.edelements.platform.dao.impl.PermissionsDAOImpl] - finished first 
query.  about to execute second
78320  platform_slice  TRACE  [http-8080-1] openjpa.Runtime - Query 
"SELECT perms FROM Permissions perms JOIN perms.resource res JOIN 
perms.roles rols JOIN rols.users usrs WHERE usrs.uid = :userIDParam AND 
res.nameField = :resourceParam " is cached."
78363  platform_slice  WARN   [http-8080-1] openjpa.Runtime - Query 
"SELECT perms FROM Permissions perms JOIN perms.resource res JOIN 
perms.roles rols JOIN rols.users usrs WHERE usrs.uid = :userIDParam AND 
res.nameField = :resourceParam " is removed from cache  excluded 
permanently. Query "SELECT perms FROM Permissions perms JOIN 
perms.resource res JOIN perms.roles rols JOIN rols.users usrs WHERE 
usrs.uid = :userIDParam AND res.nameField = :resourceParam " is not 
cached because its result is not obtained by executing a select 
statement. This can happen if the query was evaluated in-memory. The 
result was provided by 
org.apache.openjpa.lib.rop.MergedResultObjectProvider.  .
2011-04-20 12:57:35,926 INFO 
[com.edelements.platform.dao.impl.PermissionsDAOImpl] - finished second 
query. about to return.
78366  platform_slice  TRACE  [http-8080-1] openjpa.Runtime - 
org.apache.openjpa.persistence.EntityManagerImpl@308bd98e.close() invoked.

... (2nd time query is run)...

78630  platform_slice  TRACE  [http-8080-1] openjpa.Runtime - Found 
datasource1: datasource 1730863804 from configuration. StoreContext: 
org.apache.openjpa.kernel.BrokerImpl@37efd36
78622  platform_slice.platform  TRACE  [http-8080-1] openjpa.Runtime - 
Found datasource1: datasource 1730863804 from configuration. 
StoreContext: org.apache.openjpa.kernel.BrokerImpl@37efd36
78550  platform_slice.platform1  TRACE  [http-8080-1] openjpa.Runtime - 
Found datasource1: datasource 762843784 from configuration. 
StoreContext: org.apache.openjpa.kernel.BrokerImpl@37efd36
78547  platform_slice.platform2  TRACE  [http-8080-1] openjpa.Runtime - 
Found datasource1: datasource 638105098 from configuration. 
StoreContext: org.apache.openjpa.kernel.BrokerImpl@37efd36
78631  platform_slice  TRACE  [http-8080-1] openjpa.Runtime - 
org.apache.openjpa.persistence.EntityManagerFactoryImpl@2b8ca663 created 
EntityManager org.apache.openjpa.persistence.EntityManagerImpl@37efd36.
2011-04-20 12:57:36,194 INFO 
[com.edelements.platform.dao.impl.PermissionsDAOImpl] - about to use 
entityMgr
78633  platform_slice  TRACE  [http-8080-1] openjpa.Runtime - 
org.apache.openjpa.persistence.EntityManagerImpl@37efd36.close() invoked.
Apr 20, 2011 12:57:36 PM org.apache.catalina.core.ApplicationDispatcher 
invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException
     at org.apache.openjpa.kernel.BrokerImpl.free(BrokerImpl.java:4384)
     at org.apache.openjpa.kernel.BrokerImpl.close(BrokerImpl.java:4311)
     at 
org.apache.openjpa.kernel.DelegatingBroker.close(DelegatingBroker.java:1346)
     at 
org.apache.openjpa.persistence.EntityManagerImpl.close(EntityManagerImpl.java:1284)
     at 
org.springframework.orm.jpa.EntityManagerFactoryUtils.closeEntityManager(EntityManagerFactoryUtils.java:331)
     at 
org.springframework.orm.jpa.JpaTransactionManager.doCleanupAfterCompletion(JpaTransactionManager.java:550)
     at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1011)
     at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:804)
     at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
     at 
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
     at 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
     at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
     at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
     at $Proxy15.findPermissionsByUserResource(Unknown Source)
     at xxx.LoginController.loginSimple(LoginController.java:50)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     at java.lang.reflect.Method.invoke(Method.java:597)
     at 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
     at 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
     at 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
     at 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
     at 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
     at 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
     at 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     at 
org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:359)
     at 
org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:275)
     at 
org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
     at 
org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
     at 
org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:344)
     at 
org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:272)
     at 
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:81)
     at 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
     at 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
     at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
     at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
     at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
     at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
     at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
     at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
     at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
     at 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
     at java.lang.Thread.run(Thread.java:662)
Apr 20, 2011 12:57:36 PM org.apache.catalina.core.StandardWrapperValve 
invoke
SEVERE: Servlet.service() for servlet spring threw exception
java.lang.IllegalStateException
     at org.apache.openjpa.kernel.BrokerImpl.free(BrokerImpl.java:4384)
     at org.apache.openjpa.kernel.BrokerImpl.close(BrokerImpl.java:4311)
     at 
org.apache.openjpa.kernel.DelegatingBroker.close(DelegatingBroker.java:1346)
     at 
org.apache.openjpa.persistence.EntityManagerImpl.close(EntityManagerImpl.java:1284)
     at 
org.springframework.orm.jpa.EntityManagerFactoryUtils.closeEntityManager(EntityManagerFactoryUtils.java:331)
     at 
org.springframework.orm.jpa.JpaTransactionManager.doCleanupAfterCompletion(JpaTransactionManager.java:550)
     at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1011)
     at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:804)
     at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
     at 
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
     at 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
     at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
     at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
     at $Proxy15.findPermissionsByUserResource(Unknown Source)
     at xxx.LoginController.loginSimple(LoginController.java:50)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     at java.lang.reflect.Method.invoke(Method.java:597)
     at 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
     at 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
     at 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
     at 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
     at 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
     at 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
     at 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     at 
org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:359)
     at 
org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:275)
     at 
org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
     at 
org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
     at 
org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:344)
     at 
org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:272)
     at 
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:81)
     at 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
     at 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
     at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
     at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
     at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
     at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
     at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
     at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
     at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
     at 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
     at java.lang.Thread.run(Thread.java:662)


Persistence Unit:
<persistence-unit name="platform_slice">
<provider>
             org.apache.openjpa.persistence.PersistenceProviderImpl
</provider>

<properties>
<property name="openjpa.Log" value="Runtime=TRACE, DefaultLevel=WARN, 
Tool=INFO"/>
<property name="openjpa.BrokerFactory" value="slice"/>
<property name="openjpa.slice.Names"   
value="platform,platform1,platform2"/>
<property name="openjpa.slice.Master"  value="platform"/>
<!-- Lenient: Allows DB to continue, even when one slice is unavailable. -->
<property name="openjpa.slice.Lenient" value="true"/>

<property name="openjpa.ConnectionDriverName"
                       value="com.mysql.jdbc.Driver"/>
<property name="openjpa.ConnectionUserName" value="root"/>
<property name="openjpa.ConnectionPassword" value="password"/>
<property name="openjpa.slice.platform.ConnectionURL"
                       value="jdbc:mysql://127.0.0.1:3306/platform"/>
<property name="openjpa.slice.platform1.ConnectionURL"
                       value="jdbc:mysql://127.0.0.1:3306/platform1"/>
<property name="openjpa.slice.platform2.ConnectionURL"
                       value="jdbc:mysql://127.0.0.1:3306/platform2"/>

<property name="openjpa.slice.DistributionPolicy"
                            value="xxx.ShardDistributionPolicy"/>
<property name="openjpa.slice.ReplicatedTypes"
                                value="xxx.Institutions,xxx.Users"/>

</properties>
</persistence-unit>


Re: Slice closing EntityManager on named queries

Posted by Pinaki Poddar <pp...@apache.org>.
Also switch off Prepared Query Cache 
<property name="openjpa.jdbc.QuerySQLCache" value="false"/>

-----
Pinaki 
--
View this message in context: http://openjpa.208410.n2.nabble.com/Slice-closing-EntityManager-on-named-queries-tp6295930p6298785.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Re: Slice closing EntityManager on named queries

Posted by Pinaki Poddar <pp...@apache.org>.
>From the stacktrace it appears that the Spring framework wrappers decided to
close the persistence context (EntityManager). Is it possible for you to run
the test in a simple JSE environment to narrow down the cause?
Also, does it behave the same way if instead of NameQuery, you use a JPQL
string?

-----
Pinaki 
--
View this message in context: http://openjpa.208410.n2.nabble.com/Slice-closing-EntityManager-on-named-queries-tp6295930p6298783.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.