private void closeInternal(State newStatus) { if (checkAndSetStatus(ImmutableSet.of(State.INITIALIZING, State.READY), newStatus)) { callback.blockUntilSafeToShutdown(); executorService.shutdown(); txManager.close(); } }
private void changeStateToCallbackFailure(Throwable th) { log.error("Callback failed and was not able to perform its cleanup task. " + "Closing the TransactionManager.", th); callbackThrowable = th; closeInternal(State.CLOSED_BY_CALLBACK_FAILURE); }
private void runCallbackIfInitializedOrScheduleForLater(Runnable callbackTask) { if (isInitializedInternal()) { callbackTask.run(); } else { scheduleInitializationCheckAndCallback(); } }
@Override public void close() { closeInternal(State.CLOSED); }
@Override public void registerClosingCallback(Runnable closingCallback) { assertOpen(); txManager.registerClosingCallback(closingCallback); }
private void changeStateToCallbackFailure(Throwable th) { log.error("Callback failed and was not able to perform its cleanup task. " + "Closing the TransactionManager.", th); callbackThrowable = th; closeInternal(State.CLOSED_BY_CALLBACK_FAILURE); }
@Override public TransactionManager delegate() { assertOpen(); if (!isInitialized()) { throw new NotInitializedException("TransactionManager"); } return txManager; }
private enum State { INITIALIZING, READY, CLOSED, CLOSED_BY_CALLBACK_FAILURE } }
InitializeCheckingWrapper(TransactionManager manager, Supplier<Boolean> initializationPrerequisite, Callback<TransactionManager> callBack, ScheduledExecutorService initializer) { this.txManager = manager; this.initializationPrerequisite = initializationPrerequisite; this.callback = callBack; this.executorService = initializer; runCallbackIfInitializedOrScheduleForLater(this::attemptCallbackSynchronously); }
private void attemptCallbackSynchronously() { try { if (callback.runOnceOnly(txManager)) { changeStateToReady(); } else { scheduleInitializationCheckAndCallback(); } } catch (Throwable e) { changeStateToCallbackFailure(e); } }
private void runCallbackIfInitializedOrScheduleForLater(Runnable callbackTask) { if (isInitializedInternal()) { callbackTask.run(); } else { scheduleInitializationCheckAndCallback(); } }
@Override public boolean isInitialized() { assertOpen(); return status == State.READY && isInitializedInternal(); }
@Override public LockService getLockService() { assertOpen(); return txManager.getLockService(); }
private void changeStateToReady() { if (checkAndSetStatus(ImmutableSet.of(State.INITIALIZING), State.READY)) { executorService.shutdown(); } }
private void runCallbackWithRetry() { try { callback.runWithRetry(txManager); changeStateToReady(); } catch (Throwable e) { changeStateToCallbackFailure(e); } }
private void closeInternal(State newStatus) { if (checkAndSetStatus(ImmutableSet.of(State.INITIALIZING, State.READY), newStatus)) { callback.blockUntilSafeToShutdown(); executorService.shutdown(); txManager.close(); } }
@Override public void close() { closeInternal(State.CLOSED); }
@Override public void registerClosingCallback(Runnable closingCallback) { assertOpen(); txManager.registerClosingCallback(closingCallback); }
private enum State { INITIALIZING, READY, CLOSED, CLOSED_BY_CALLBACK_FAILURE } }
private void attemptCallbackSynchronously() { try { if (callback.runOnceOnly(txManager)) { changeStateToReady(); } else { scheduleInitializationCheckAndCallback(); } } catch (Throwable e) { changeStateToCallbackFailure(e); } }