错误[ACTIVE] ExecuteThread:' 33' for queue:' weblogic.kernel.Default(自我调整)' - 07.02.2014 11:37:20,360 request_id = 9e32efa6-1374-4b1c-99e9-326a3a256b88 错误代码:99错误在异步任务中延迟0:
本地异常堆栈: 异常[EclipseLink-4002](Eclipse Persistence Services - 2.3.2.v20111125-r10461):org.eclipse.persistence.exceptions.DatabaseException 内部异常:java.sql.SQLException:语句已被关闭 错误代码:0 呼叫:SELECT ID,FIRST_NAME,ISBLOCKED,LAST_NAME,MODIFIED,MSISDN,VERSION,OWNER_ID,CONTACT_ID来自联系人(OWNER_ID =?) bind => [1参数界限] 查询:ReadAllQuery(name =" VasServerfile:/data/msgadmin/wls12c/wlserver_12.1/domains/VAS-MSG-TST-DMN/servers/VAS-MSG-TST-M1-MAN1-1/tmp/_WL_user /VasServer/c7nfil/war/WEB-INF/lib/_wl_cls_gen.jar_VasServerPU" referenceClass =联系sql =" SELECT ID,FIRST_NAME,ISBLOCKED,LAST_NAME,MODIFIED,MSISDN,VERSION,OWNER_ID,CONTACT_ID from CONTACTS WHERE( OWNER_ID =?)") at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333) 在org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:644) 在org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:535) at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1717) 在org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:253) 在org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207) 在org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193) 在org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:264) 在org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:646) at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2611) 在org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2570) 在org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:420) at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1081) 在org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:844) at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1040) 在org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:392)
我正在尝试使用JPA多线程,但我采取了这种例外,任何解决问题的想法。
感谢
答案 0 :(得分:1)
EntityManager
不是线程安全的,因此您应该在单个线程中使用EntityManager
实例。在不同的线程中,您可以使用EntityManagerFactory
实例,因为它是线程安全的。
答案 1 :(得分:0)
如果你想隔离不同的HTTP线程(我的意思是每个http线程都拥有它自己的entityManager),你有web应用程序就可以使用OpenEntityMangerInView过滤器。
web.xml 片段:
<filter>
<filter-name>oemInViewFilter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
<init-param>
<param-name>entityManagerFactoryBeanName</param-name>
<param-value>entityManagerFactory</param-value>
</init-param>
</filter>
您还可以尝试OpenEntityManagerInViewInterceptor: