Quantcast
Channel: Spring Community Forums - Data
Viewing all articles
Browse latest Browse all 297

Use Hibernate StatelessSession along another Spring managed session.

$
0
0
Hi,

Normally, we use Spring and Atomikos to manage the JTA sessions and set hibernate.auto_close_session to true. Now, if we manually open a stateless session (for some async job) as:

Code:

StatelessSession sl = sessionFactory.openStatelessSession();
How do we close the StatelessSession? If we call

Code:

sl.close()
then the "currentSession" will rollback.

If we annotate

Code:

@Transactional(propagation = Propagation.NOT_SUPPORTED)
on the method that use the StatelessSession, the commit hangs, the Atomikos log shows that it keep spawning new transactions and never stops.

Full code:

Code:

public Vendor findByCode(String code) {
                StatelessSession slsession = null;
                Transaction tx = null;
                try {
                        slsession = getStatelessSession();
                        tx = slsession.beginTransaction();
                        return (Vendor) slsession.createQuery("from Vendor"
                                        + " where code = :code")
                                        .setParameter("code", code)
                                        .uniqueResult();
                } catch (HibernateException e) {
                        e.printStackTrace();
                        return null;
                } finally {
                        if (slsession != null && tx != null) {
                                tx.commit();
                                slsession.close();
                        }
                }
        }

There is already a Spring managed session, and this method was called.

Could you suggest what is wrong?

Viewing all articles
Browse latest Browse all 297

Trending Articles