2

I'm currently facing the following known issue : https://jira.spring.io/browse/SWF-1525

I using Oracle9 and Ikaricp as connection pool. (At first i thought it was an issue with apache dbcp, this is why i switched to ikaricp)

I'm not using JPA but i tried to adapt one of the given workaround to the HibernateFlowExecutionListener.

Here is the code :

public class FixedHibernateFlowExecutionListener extends 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);
}}

The problem (beside the bug in SWF) is that calling 'session.disconnect();' never disconnects the session from the connection so the connection remains in use.

The lazy init is triggered in a subflow in 10% of the cases, in the 'on-start' tag of the subflow using Hibernate.initialize() on each collection item. I have to find a fix for this because this is a very heavy operation that must not necessarily be done.

My hibernate properties :

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

Has anyone found a solution for this?

Note : there was a similar question but related to jpa Database connections not being closed with jpaFlowExecutionListener

Thanks for help.

Quent
  • 23
  • 5

0 Answers0