我目前面临以下已知问题: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 数据库连接有关
感谢帮助。