- /**
- * Instantiate a new tracker for a transaction. This method bases its decision on which implementation to use
- * based on provided {@link ShardBackendInfo}. If no information is present, it will choose the remote
- * implementation, which is fine, as the queueing logic in ClientActorBehavior will hold on to the requests until
- * the backend is located.
- *
- * @param client Client behavior
- * @param historyId Local history identifier
- * @param transactionId Transaction identifier
- * @param backend Optional backend identifier
- * @return A new state tracker
- */
- static AbstractProxyTransaction create(final DistributedDataStoreClientBehavior client,
- final LocalHistoryIdentifier historyId, final long transactionId,
- final java.util.Optional<ShardBackendInfo> backend) {
-
- final java.util.Optional<DataTree> dataTree = backend.flatMap(ShardBackendInfo::getDataTree);
- final TransactionIdentifier identifier = new TransactionIdentifier(historyId, transactionId);
- if (dataTree.isPresent()) {
- return new LocalProxyTransaction(client, identifier, dataTree.get().takeSnapshot());
- } else {
- return new RemoteProxyTransaction(client, identifier);
- }
- }
-
- final DistributedDataStoreClientBehavior client() {
- return client;