not a good idea

This commit is contained in:
Athou
2014-08-13 11:45:35 +02:00
parent 1d6e212955
commit 2a26031261

View File

@@ -16,32 +16,24 @@ public abstract class UnitOfWork<T> {
protected abstract T runInSession() throws Exception; protected abstract T runInSession() throws Exception;
public T run() { public T run() {
// if newSession is false, we already are in a unit of work and roll back/commit will happen in the wrapping unit of work final Session session = sessionFactory.openSession();
boolean newSession = !ManagedSessionContext.hasBind(sessionFactory); if (ManagedSessionContext.hasBind(sessionFactory)) {
throw new IllegalStateException("Already in a unit of work!");
final Session session = newSession ? sessionFactory.openSession() : sessionFactory.getCurrentSession(); }
T t = null; T t = null;
try { try {
if (newSession) { ManagedSessionContext.bind(session);
ManagedSessionContext.bind(session); session.beginTransaction();
session.beginTransaction();
}
try { try {
t = runInSession(); t = runInSession();
if (newSession) { commitTransaction(session);
commitTransaction(session);
}
} catch (Exception e) { } catch (Exception e) {
if (newSession) { rollbackTransaction(session);
rollbackTransaction(session);
}
this.<RuntimeException> rethrow(e); this.<RuntimeException> rethrow(e);
} }
} finally { } finally {
if (newSession) { session.close();
session.close(); ManagedSessionContext.unbind(sessionFactory);
ManagedSessionContext.unbind(sessionFactory);
}
} }
return t; return t;
} }