数据库连接泄漏,hibernate 4.3 + spring webflow 2.3.1

时间:2015-04-23 07:50:11

标签: java hibernate spring-webflow-2 hikaricp connection-leaks

我目前面临以下已知问题:https://jira.spring.io/browse/SWF-1525

我使用Oracle9和Ikaricp作为连接池。 (起初我认为这是apache dbcp的一个问题,这就是为什么我切换到ikaricp)

我没有使用JPA,但我尝试将其中一个给定的解决方法改编为HibernateFlowExecutionListener。

以下是代码:

public class FixedHibernateFlowExecutionListener扩展HibernateFlowExecutionListener {

private final Logger logger = LoggerFactory.getLogger(getClass());

public FixedHibernateFlowExecutionListener(SessionFactory sessionFactory, PlatformTransactionManager transactionManager) {
    super(sessionFactory, transactionManager);
}

@Override
public void paused(RequestContext context) {
    super.paused(context);
    if (isPersistenceContext(context.getActiveFlow())) {

        final Session session = getSession(context.getFlowExecutionContext().getActiveSession());
        if (session != null && session.isConnected()) {
            session.disconnect();
            if (session.isConnected()) {
                logger.error("Couldn't disconnect the connection from the session");
            }
        }
    }

}

private boolean isPersistenceContext(FlowDefinition flow) {
    return flow.getAttributes().contains(PERSISTENCE_CONTEXT_ATTRIBUTE);
}

private Session getSession(FlowSession session) {
    return (Session) session.getScope().get(PERSISTENCE_CONTEXT_ATTRIBUTE);
}}

问题(除了SWF中的错误)是调用' session.disconnect();'永远不会断开会话与连接的连接,因此连接仍在使用中。

懒惰初始化在10%的情况下在子流中被触发,在'开始时'每个集合项上使用Hibernate.initialize()的子流标记。 我必须找到一个解决方案,因为这是一个非常繁重的操作,不一定要做。

我的hibernate属性:

hibernate.connection.release_mode=after_transaction
hibernate.temp.use_jdbc_metadata_defaults=false
hibernate.default_schema=*****
hibernate.dialect=org.hibernate.dialect.Oracle9iDialect
hibernate.id.new_generator_mappings=true
hibernate.event.merge.entity_copy_observer=allow

有没有人为此找到解决方案?

注意:有一个类似的问题,但与jpa Database connections not being closed with jpaFlowExecutionListener

有关

感谢您的帮助。

0 个答案:

没有答案