Java 接收org.hibernate.ResourceClosedException“;此TransactionCoordinator已关闭”;
我有一个在Tomcat 6上运行的servlet,它使用Hibernate 4.1.6和c3p0 0.9.1.2,我得到了太多org.Hibernate.ResourceClosedException,消息是“此TransactionCoordinator已关闭” 我已经检查了Java 接收org.hibernate.ResourceClosedException“;此TransactionCoordinator已关闭”;,java,hibernate,servlets,Java,Hibernate,Servlets,我有一个在Tomcat 6上运行的servlet,它使用Hibernate 4.1.6和c3p0 0.9.1.2,我得到了太多org.Hibernate.ResourceClosedException,消息是“此TransactionCoordinator已关闭” 我已经检查了beginTransaction()和rollback()或commit()是否在线程被另一个调用重用之前完成 在hibernate.cfg.xml,我有 <hibernate-configuration>
beginTransaction()
和rollback()
或commit()
是否在线程被另一个调用重用之前完成
在hibernate.cfg.xml,我有
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.connection.url">jdbc:mysql://host/database</property>
<property name="hibernate.connection.username">username</property>
<property name="hibernate.connection.zeroDateTimeBehavior">convertToNull</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="show_sql">true</property>
<property name="current_session_context_class">thread</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">50</property>
<!-- mappings start here -->
...
</session-factory>
</hibernate-configuration>
当我开始在servlet中使用数据库时,我的代码基本上是这样的:
try {
HibernateUtil.beginTransaction();
// do stuffs
HibernateUtil.commit();
} catch (RuntimeException e) {
HibernateUtil.rollback();
throw e;
} catch (Exception e) {
HibernateUtil.rollback();
throw e;
}
我哪里做错了?在那个“//do Stuff”中,您是否尝试从其他事务获取实体对象?谢谢,我想我已经发现了问题,正在研究以回答您。有一些对象是我做的
session=HibernateUtil.getSessionFactory().getCurrentSession()
,并且session是一个静态属性。这可能是问题所在?是的,Hibernate会话不是线程安全的。所以不能在静态属性中声明它
try {
HibernateUtil.beginTransaction();
// do stuffs
HibernateUtil.commit();
} catch (RuntimeException e) {
HibernateUtil.rollback();
throw e;
} catch (Exception e) {
HibernateUtil.rollback();
throw e;
}