ServiceBusTransactionContext.java
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.messaging.servicebus;
import com.azure.core.annotation.Immutable;
import java.nio.ByteBuffer;
/**
* Represents transaction in service. This object just contains transaction id. Transaction management operations
* like create transaction, rollback, and commit operation need to be done using the sender or receiver clients.
* <p>
* A transaction times out after 2 minutes. The transaction timer starts when the first operation in the transaction
* starts.
* </p>
*
* <p><strong>Creating and using a transaction</strong></p>
* <!-- src_embed com.azure.messaging.servicebus.servicebusreceiverasyncclient.committransaction#servicebustransactioncontext -->
* <pre>
* // This mono creates a transaction and caches the output value, so we can associate operations with the
* // transaction. It does not cache the value if it is an error or completes with no items, effectively retrying
* // the operation.
* Mono<ServiceBusTransactionContext> transactionContext = receiver.createTransaction()
* .cache(value -> Duration.ofMillis(Long.MAX_VALUE),
* error -> Duration.ZERO,
* () -> Duration.ZERO);
*
* transactionContext.flatMap(transaction -> {
* // Process messages and associate operations with the transaction.
* Mono<Void> operations = Mono.when(
* receiver.receiveDeferredMessage(sequenceNumber).flatMap(message ->
* receiver.complete(message, new CompleteOptions().setTransactionContext(transaction))),
* receiver.abandon(receivedMessage, new AbandonOptions().setTransactionContext(transaction)));
*
* // Finally, either commit or rollback the transaction once all the operations are associated with it.
* return operations.flatMap(transactionOperations -> receiver.commitTransaction(transaction));
* });
* </pre>
* <!-- end com.azure.messaging.servicebus.servicebusreceiverasyncclient.committransaction#servicebustransactioncontext -->
*
* @see ServiceBusReceiverClient#createTransaction()
* @see ServiceBusReceiverAsyncClient#createTransaction()
* @see ServiceBusSenderClient#createTransaction()
* @see ServiceBusSenderAsyncClient#createTransaction()
* @see <a href="https://docs.microsoft.com/azure/service-bus-messaging/service-bus-transactions">Transaction
* Overview</a>
*/
@Immutable
public final class ServiceBusTransactionContext {
private final ByteBuffer transactionId;
ServiceBusTransactionContext(ByteBuffer transactionId) {
this.transactionId = transactionId;
}
/**
* Gets the transaction id.
*
* @return transaction ID
*/
public ByteBuffer getTransactionId() {
return this.transactionId;
}
}