日期:2014-05-17  浏览次数:22049 次

SPRING QUARTZ 报错 no value for key
Eclipse报错如下:
java.lang.IllegalStateException: No value for key [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@1785f0d] bound to thread [pool-2-thread-1]
at org.springframework.transaction.support.TransactionSynchronizationManager.unbindResource(TransactionSynchronizationManager.java:209)
at org.springframework.orm.jpa.JpaTransactionManager.doCleanupAfterCompletion(JpaTransactionManager.java:570)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1008)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:804)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
at com.ss.base.instrument.TxProfiler.invoke(TxProfiler.java:45)

网上没找到该如何解决,请高手帮忙.
另外:tomcat设置为调试模式,设置断点进行跟踪,却不报错。如果不设置断点,就会报错。

初步推断 多线程引起 但不知该如何解决
spring

------解决方案--------------------
java.lang.IllegalStateException: No value for key [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@1785f0d] bound to thread [pool-2-thread-1]

IllegalStateException = 状态非法

No value for key = key 没有值
------解决方案--------------------
根据 JPA 规范,EntityManager 仅供单个线程使用。
通过 @PersistenceContext 注释来插入 EntityManager 实例,将应用程序更改为使用容器管理的持久性上下文(如果应用程序的编程模型顺应此更改)。本质上,这将通过支持容器进行管理,来强制执行“获取-使用-结束”模式。
如果要是希望在spring环境中使用@PersistenceContext和@PersistenceUnit,则在相关配置文件中增加
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

希望对你的多线程应用起到帮助。