我目前面临以下已知问题: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
有关感谢您的帮助。