private void doReleaseLock(final String sagaId, final Saga sagaInstance) { if (sagaInstance == null || !CurrentUnitOfWork.isStarted()) { lock.releaseLock(sagaId); } else if (CurrentUnitOfWork.isStarted()) { CurrentUnitOfWork.get() .registerListener( new UnitOfWorkListenerAdapter() { @Override public void onCleanup(UnitOfWork unitOfWork) { // a reference to the saga is maintained to prevent it from GC until after the UoW // commit lock.releaseLock(sagaInstance.getSagaIdentifier()); } }); } }
private void removeEntry(final String sagaIdentifier, final Map<String, ?> sagaMap) { if (!CurrentUnitOfWork.isStarted()) { sagaMap.remove(sagaIdentifier); } else { CurrentUnitOfWork.get() .registerListener( new UnitOfWorkListenerAdapter() { @Override public void afterCommit(UnitOfWork unitOfWork) { sagaMap.remove(sagaIdentifier); } }); } }