2

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

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

我没有使用 JPA,但我尝试将给定的解决方法之一调整为 HibernateFlowExecutionListener。

这是代码:

公共类 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() 的子流的“on-start”标记中。我必须为此找到解决方法,因为这是一项非常繁重的操作,不一定要完成。

我的休眠属性:

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

有没有人找到解决方案?

注意:有一个类似的问题,但与未使用 jpaFlowExecutionListener 关闭的 jpa 数据库连接有关

感谢帮助。

4

0 回答 0