() {
+ @Override
+ public void onComplete(Throwable failure, ActorSelection primaryShard) {
+ if(failure != null) {
+ newTxFutureCallback.createTransactionContext(failure, null);
+ } else {
+ newTxFutureCallback.setPrimaryShard(primaryShard);
+ }
+ }
+ }, actorContext.getClientDispatcher());
+ }
+
+ return txFutureCallback;
}
+ public String getTransactionChainId() {
+ return transactionChainId;
+ }
- private class TransactionContextImpl implements TransactionContext{
- private final String shardName;
- private final String actorPath;
- private final ActorSelection actor;
+ protected ActorContext getActorContext() {
+ return actorContext;
+ }
+
+ /**
+ * Interfaces for transaction operations to be invoked later.
+ */
+ private static interface TransactionOperation {
+ void invoke(TransactionContext transactionContext);
+ }
+
+ /**
+ * Implements a Future OnComplete callback for a CreateTransaction message. This class handles
+ * retries, up to a limit, if the shard doesn't have a leader yet. This is done by scheduling a
+ * retry task after a short delay.
+ *
+ * The end result from a completed CreateTransaction message is a TransactionContext that is
+ * used to perform transaction operations. Transaction operations that occur before the
+ * CreateTransaction completes are cache and executed once the CreateTransaction completes,
+ * successfully or not.
+ */
+ private class TransactionFutureCallback extends OnComplete