org.springframework.beans.factory.support.DefaultListableBeanFactory名称为'applicationResource'的bean上的Destroy方法抛出了llegalStateException

时间:2013-12-08 01:19:59

标签: spring jpa

这真让我疯狂,这是我用于当前项目的软件堆栈。 泽西(Rest层),Spring jdbc混合了Spring jpa数据,一切顺利,直到我关闭tomcat。我在控制台上看到以下消息:

2013-12-07 19:40:55,760 ERROR org.springframework.beans.factory.support.DefaultListableBeanFactory(ln513) - Destroy method on bean with name 'applicationResource' threw an exception
java.lang.IllegalStateException
    at com.sun.jersey.server.impl.ThreadLocalHttpContext.getRequest(ThreadLocalHttpContext.java:82)
    at com.sun.jersey.server.impl.application.WebApplicationImpl$2.invoke(WebApplicationImpl.java:286)
    at com.sun.proxy.$Proxy53.hashCode(Unknown Source)
    at com.my.resource.BaseResource.hashCode(BaseResource.java)
    at java.util.concurrent.ConcurrentHashMap.hash(ConcurrentHashMap.java:333)
    at java.util.concurrent.ConcurrentHashMap.remove(ConcurrentHashMap.java:1175)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessBeforeDestruction(PersistenceAnnotationBeanPostProcessor.java:357)
    at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:220)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:510)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:486)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:740)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:455)
    at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1090)
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1064)
    at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1010)
    at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:558)
    at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:143)
    at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4831)
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5478)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1564)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
2013-12-07 19:40:55,761 INFO org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean(ln441) - Closing JPA EntityManagerFactory for persistence unit 'myEntity'

当我使用纯jdbc时,我没有看到这个错误,我知道这个错误在引入jpa后开始抓取,并且在调用PersistenceAnnotationBeanPostProcessor.postProcessBeforeDestruction(PersistenceAnnotationBeanPostProcessor.java:357)时抛出了错误。

我的dao.xml设置

<bean id="transactionManager"
      class="org.springframework.orm.jpa.JpaTransactionManager"
      p:entityManagerFactory-ref="entityManagerFactory"/>

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
      destroy-method="close" p:driverClass="${jdbc.driverClassName}"
      p:password="${jdbc.password}" p:jdbcUrl="${jdbc.url}" p:user="${jdbc.username}"
      p:initialPoolSize="10" p:minPoolSize="10" p:maxPoolSize="50"/>

<bean id="nameParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"
      c:dataSource-ref="dataSource"/>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="jpaDialect">
        <bean class="com.mycompany.hibernate.config.HibernateExtendedJpaDialect"/>
    </property>
    <property name="persistenceUnitName" value="myEntity"/>
</bean>

<jpa:repositories base-package="com.mycompany.repository"/>

我的所有泽西资源都使用@Component注释。

你们能看到出了什么问题吗?

谢谢,感谢您的光临。

0 个答案:

没有答案