通常、Spring + Atomikos を使用して JTA セッションを管理し、hibernate.auto_close_session を true に設定します。ここで、(非同期ジョブの) ステートレス セッションを次のように手動で開くとします。
StatelessSession sl = sessionFactory.openStatelessSession();
StatelessSession を閉じるにはどうすればよいですか? 電話したら
sl.close()
その後、「currentSession」がロールバックします。注釈を付ければ
@Transactional(propagation = Propagation.NOT_SUPPORTED)
StatelessSession を使用するメソッドでは、コミットがハングします。Atomikos ログは、新しいトランザクションを生成し続け、停止しないことを示しています。
完全なコード:
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();
}
}
}
Spring マネージド セッションが既に存在し、このメソッドが呼び出されました。
何が間違っているのか教えていただけますか?