Proton DotNet
Loading...
Searching...
No Matches
Classes | Public Member Functions | Properties | List of all members
Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController Class Referencesealed

Proton transaction controller abstraction that provides the transaction services for a Sender link that transmits the transaction Declare and Discharge commands which control the lifetime and outcome of a running transaction. More...

Inheritance diagram for Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController:
Apache.Qpid.Proton.Engine.Implementation.ProtonEndpoint< ITransactionController > Apache.Qpid.Proton.Engine.ITransactionController Apache.Qpid.Proton.Engine.IEndpoint< ITransactionController >

Public Member Functions

 ProtonTransactionController (ProtonSender sender)
 
override ITransactionController Open ()
 
override ITransactionController Close ()
 
ITransaction< ITransactionControllerNewTransaction ()
 Creates a new Transaction instances that is returned in the idle state which can be populated with application specific attachments or assigned a linked resource prior to calling the declare method.
 
ITransaction< ITransactionControllerDeclare ()
 Request that the remote transaction manager declare a new transaction and respond with a new transaction Id for that transaction. Upon successful declaration of a new transaction the remote will respond and the declared event handler will be signaled. This is a convenience method that is the same as first calling new transaction method and then passing the result of that to the declare method that accepts an already created transaction instance.
 
ITransactionController Declare (ITransaction< ITransactionController > transaction)
 Request that the remote transaction manager discharge the given transaction with the specified failure state (true for failed). Upon successful discharge of the given transaction the remote will respond and the discharge event handler will be signalled.
 
ITransactionController Discharge (ITransaction< ITransactionController > transaction, bool failed)
 Request that the remote transaction manager declare a new transaction and respond with a new transaction Id for that transaction. Upon successful declaration of a new transaction the remote will respond and the declared event handler will be signaled.
 
ITransactionController AddCapacityAvailableHandler (Action< ITransactionController > handler)
 Allows the caller to add an delegate that will be signaled when the underlying link for this transaction controller has been granted credit which would then allow for transaction declare or discharge commands to be sent to the remote Transactional Resource. If the controller already has credit to send then the handler will be invoked immediately otherwise it will be stored until credit becomes available. Once a handler is signaled it is no longer retained for future updates and the caller will need to register it again once more transactional work is to be completed. Because more than one handler can be added at a time the caller should check again before attempting to perform a transaction declare or a discharge as other tasks might have already consumed credit if work is done via some asynchronous mechanism.
 
ITransactionController DeclaredHandler (Action< ITransaction< ITransactionController > > handler)
 Called when the transaction manager end of the link has responded to a previous declare request and the transaction can now be used to enroll deliveries into the active transaction.
 
ITransactionController DeclareFailedHandler (Action< ITransaction< ITransactionController > > handler)
 Called when the transaction manager end of the link has responded to a previous declare request indicating that the declaration failed and the transaction cannot be used to perform transactional work.
 
ITransactionController DischargedHandler (Action< ITransaction< ITransactionController > > handler)
 Called when the transaction manager end of the link has responded to a previous discharge request and the transaction and the transaction has been completed.
 
ITransactionController DischargeFailedHandler (Action< ITransaction< ITransactionController > > handler)
 Called when the transaction manager end of the link has responded to a previous discharge request and the transaction discharge failed for some reason.
 
ITransactionController ParentEndpointClosedHandler (Action< ITransactionController > handler)
 Sets a Action delegate for when the parent Session or Connection of this link is locally closed. Typically used by clients for logging or other state update event processing. Clients should not perform any blocking calls within this context. It is an error for the handler to throw an exception and the outcome of doing so is undefined.
 
- Public Member Functions inherited from Apache.Qpid.Proton.Engine.Implementation.ProtonEndpoint< ITransactionController >
 ProtonEndpoint (ProtonEngine engine)
 Creates a new instance of this endpoint implementation which is owned by the provided engine instance.
 
OpenHandler (Action< T > openHandler)
 Sets a Action for when an AMQP Open frame is received from the remote peer. Used to process remotely initiated Connections. Locally initiated sessions have their own Action invoked instead. This method is typically used by servers to listen for the remote peer to open its endpoint, while a client would listen for the server to open its end of the endpoint once a local open has been performed. Typically used by clients as servers will typically listen to some parent resource event handler to determine if the remote is initiating a resource open.
 
CloseHandler (Action< T > closeHandler)
 Sets a EventHandler for when an AMQP closing frame is received from the remote peer.
 
LocalOpenHandler (Action< T > localOpenHandler)
 Sets a Action for when an this endpoint is opened locally via a call to Open. Typically used by clients for logging or other state update event processing. Clients should not perform any blocking calls within this context. It is an error for the handler to throw an exception and the outcome of doing so is undefined. Typically used by clients as servers will typically listen to some parent resource event handler to determine if the remote is initiating a resource open.
 
LocalCloseHandler (Action< T > localCloseHandler)
 Sets a Action for when an this endpoint is closed locally via a call to Close. Typically used by clients for logging or other state update event processing. Clients should not perform any blocking calls within this context. It is an error for the handler to throw an exception and the outcome of doing so is undefined.
 
EngineShutdownHandler (Action< IEngine > shutdownHandler)
 Sets an Action that is invoked when the engine that supports this endpoint is shutdown which indicates a desire to terminate all engine operations. Any endpoint that has been both locally and remotely closed will not receive this event as it will no longer be tracked by the parent its parent endpoint. A typical use of this event would be from a locally closed endpoint that is awaiting response from the remote. If this event fires then there will never be a remote response to any pending operations and the client or server instance should react accordingly to clean up any related resources etc.
 
Close ()
 Close the end point locally and send the closing performative immediately if possible or holds it until the Connection / Engine state allows it. If the engine encounters an error writing the performative or the engine is in a failed state from a previous error then this method will throw an exception. If the engine has been shutdown then this method will close out the local end of the endpoint and clean up any local resources before returning normally.
 
Open ()
 Open the end point locally, sending the Open performative immediately if possible or holding it until SASL negotiations or the AMQP header exchange and other required performative exchanges has completed. The endpoint will signal any registered handler of the remote opening the endpoint once the remote performative that signals open completion arrives.
 
- Public Member Functions inherited from Apache.Qpid.Proton.Engine.IEndpoint< ITransactionController >
Open ()
 Open the end point locally, sending the Open performative immediately if possible or holding it until SASL negotiations or the AMQP header exchange and other required performative exchanges has completed. The endpoint will signal any registered handler of the remote opening the endpoint once the remote performative that signals open completion arrives.
 
Close ()
 Close the end point locally and send the closing performative immediately if possible or holds it until the Connection / Engine state allows it. If the engine encounters an error writing the performative or the engine is in a failed state from a previous error then this method will throw an exception. If the engine has been shutdown then this method will close out the local end of the endpoint and clean up any local resources before returning normally.
 
LocalOpenHandler (Action< T > localOpenHandler)
 Sets a Action for when an this endpoint is opened locally via a call to Open. Typically used by clients for logging or other state update event processing. Clients should not perform any blocking calls within this context. It is an error for the handler to throw an exception and the outcome of doing so is undefined. Typically used by clients as servers will typically listen to some parent resource event handler to determine if the remote is initiating a resource open.
 
LocalCloseHandler (Action< T > localCloseHandler)
 Sets a Action for when an this endpoint is closed locally via a call to Close. Typically used by clients for logging or other state update event processing. Clients should not perform any blocking calls within this context. It is an error for the handler to throw an exception and the outcome of doing so is undefined.
 
OpenHandler (Action< T > localOpenHandler)
 Sets a Action for when an AMQP Open frame is received from the remote peer. Used to process remotely initiated Connections. Locally initiated sessions have their own Action invoked instead. This method is typically used by servers to listen for the remote peer to open its endpoint, while a client would listen for the server to open its end of the endpoint once a local open has been performed. Typically used by clients as servers will typically listen to some parent resource event handler to determine if the remote is initiating a resource open.
 
CloseHandler (Action< T > localCloseHandler)
 Sets a EventHandler for when an AMQP closing frame is received from the remote peer.
 
EngineShutdownHandler (Action< IEngine > shutdownHandler)
 Sets an Action that is invoked when the engine that supports this endpoint is shutdown which indicates a desire to terminate all engine operations. Any endpoint that has been both locally and remotely closed will not receive this event as it will no longer be tracked by the parent its parent endpoint. A typical use of this event would be from a locally closed endpoint that is awaiting response from the remote. If this event fires then there will never be a remote response to any pending operations and the client or server instance should react accordingly to clean up any related resources etc.
 

Properties

IConnection Connection [get]
 Provides access to the connection that owns this transaction controller endpoint.
 
ISession Session [get]
 Provides access to the session that created this transaction controller.
 
bool HasCapacity [get]
 Returns true if the transaction controller has capacity to send or buffer and transaction command to declare or discharge. If no capacity then a call to transaction controller declare or discharge would throw an exception.
 
override bool IsLocallyOpen [get]
 
override bool IsLocallyClosed [get]
 
override bool IsRemotelyOpen [get]
 
override bool IsRemotelyClosed [get]
 
override Symbol[] OfferedCapabilities [get, set]
 
override ErrorCondition ErrorCondition [get, set]
 
override Symbol[] RemoteOfferedCapabilities [get]
 
override Symbol[] DesiredCapabilities [get, set]
 
override Symbol[] RemoteDesiredCapabilities [get]
 
override IReadOnlyDictionary< Symbol, object > Properties [get, set]
 
override IReadOnlyDictionary< Symbol, object > RemoteProperties [get]
 
override ErrorCondition RemoteErrorCondition [get]
 
Source Source [get, set]
 Access the Source value to assign to the local end of this transaction coordinator link. Must be called during link setup, i.e. before calling the open method.
 
Source RemoteSource [get]
 Gets the Source value to assign to the remote end of this transaction coordinator link. Must be called during link setup, i.e. before calling the open method.
 
Coordinator Coordinator [get, set]
 Access the Coordinator value to assign to the local end of this transaction coordinator link. Must be called during link setup, i.e. before calling the open method.
 
Coordinator RemoteCoordinator [get]
 Gets the Coordinator value to assign to the remote end of this transaction coordinator link. Must be called during link setup, i.e. before calling the open method.
 
IEnumerable< ITransaction< ITransactionController > > Transactions [get]
 Returns a enumerator over the set of Transactions that are active within this ITransactionController which have not reached a terminal state meaning they have not been successfully discharged and have not failed in either the declare phase or the discharge phase. If there are no transactions active within this transaction controller this method will return an enumerator that provides no entries.
 
- Properties inherited from Apache.Qpid.Proton.Engine.Implementation.ProtonEndpoint< ITransactionController >
virtual IEngine Engine [get]
 Provides access to the engine instance that owns the resources of this endpoint and its parent.
 
IAttachments Attachments [get]
 Access the attachments instance that is associated with this resource where the application can store data relevant to the endpoint for later use.
 
object LinkedResource [get, set]
 Allows the endpoint to have some user defined resource linked to it which can be used to store application state data or other associated object instances with this endpoint.
 
virtual ErrorCondition ErrorCondition [get, set]
 Provides access to the error condition that should be applied to the AMQP frame that closes or ends this endpoint when the close method is called be the user. Setting this value after closing the endpoint has no effect.
 
virtual ErrorCondition RemoteErrorCondition [get, set]
 If the remote has closed this endpoint and provided an ErrorCondition as part of the closing AMQP performative then this method will return it.
 
bool IsLocallyOpen [get]
 Returns true if the endpoint open was previously called and the close method has not yet been invoked. This only reflects the state on the local end and the user should also check the remote state.
 
bool IsLocallyClosed [get]
 Returns true if the endpoint having been previously locally opened is now closed due to a call the the close method. This does not reflect the state of the remote endpoint and that should be checked separately.
 
bool IsRemotelyOpen [get]
 Returns true if this endpoint is currently remotely open meaning that the AMQP performative that completes the open phase of this endpoint's lifetime has arrived but the performative that closes it has not.
 
bool IsRemotelyClosed [get]
 Returns true if this endpoint is currently remotely closed meaning that the AMQP performative that completes the close phase of this endpoint's lifetime has arrived.
 
Symbol[] OfferedCapabilities [get, set]
 Access the capabilities to be offered on to the remote when this endpoint is opened. The offered capabilities value can only be modified prior to a call to open, once the endpoint has been opened locally an error will be thrown if this method is called.
 
Symbol[] DesiredCapabilities [get, set]
 Access the capabilities that are desired on to the remote when this endpoint is opened. The desired capabilities value can only be modified prior to a call to open, once the endpoint has been opened locally an error will be thrown if this method is called.
 
Symbol[] RemoteOfferedCapabilities [get]
 The capabilities offered by the remote when it opened its end of the endpoint.
 
Symbol[] RemoteDesiredCapabilities [get]
 The capabilities desired by the remote when it opened its end of the endpoint.
 
IReadOnlyDictionary< Symbol, object > Properties [get, set]
 Access the properties that are conveyed to the remote when this endpoint is opened. The properties value can only be modified prior to a call to open, once the endpoint has been opened locally an error will be thrown if this method is called.
 
IReadOnlyDictionary< Symbol, object > RemoteProperties [get]
 The properties sent by the remote when it opened its end of this endpoint.
 
- Properties inherited from Apache.Qpid.Proton.Engine.ITransactionController
- Properties inherited from Apache.Qpid.Proton.Engine.IEndpoint< ITransactionController >
IEngine Engine [get]
 Provides access to the engine instance that owns the resources of this endpoint and its parent.
 
IAttachments Attachments [get]
 Access the attachments instance that is associated with this resource where the application can store data relevant to the endpoint for later use.
 
object LinkedResource [get, set]
 Allows the endpoint to have some user defined resource linked to it which can be used to store application state data or other associated object instances with this endpoint.
 
ErrorCondition ErrorCondition [get, set]
 Provides access to the error condition that should be applied to the AMQP frame that closes or ends this endpoint when the close method is called be the user. Setting this value after closing the endpoint has no effect.
 
ErrorCondition RemoteErrorCondition [get]
 If the remote has closed this endpoint and provided an ErrorCondition as part of the closing AMQP performative then this method will return it.
 
bool IsLocallyOpen [get]
 Returns true if the endpoint open was previously called and the close method has not yet been invoked. This only reflects the state on the local end and the user should also check the remote state.
 
bool IsLocallyClosed [get]
 Returns true if the endpoint having been previously locally opened is now closed due to a call the the close method. This does not reflect the state of the remote endpoint and that should be checked separately.
 
bool IsRemotelyOpen [get]
 Returns true if this endpoint is currently remotely open meaning that the AMQP performative that completes the open phase of this endpoint's lifetime has arrived but the performative that closes it has not.
 
bool IsRemotelyClosed [get]
 Returns true if this endpoint is currently remotely closed meaning that the AMQP performative that completes the close phase of this endpoint's lifetime has arrived.
 
Symbol[] OfferedCapabilities [get, set]
 Access the capabilities to be offered on to the remote when this endpoint is opened. The offered capabilities value can only be modified prior to a call to open, once the endpoint has been opened locally an error will be thrown if this method is called.
 
Symbol[] DesiredCapabilities [get, set]
 Access the capabilities that are desired on to the remote when this endpoint is opened. The desired capabilities value can only be modified prior to a call to open, once the endpoint has been opened locally an error will be thrown if this method is called.
 
IReadOnlyDictionary< Symbol, object > Properties [get, set]
 Access the properties that are conveyed to the remote when this endpoint is opened. The properties value can only be modified prior to a call to open, once the endpoint has been opened locally an error will be thrown if this method is called.
 
Symbol[] RemoteOfferedCapabilities [get]
 The capabilities offered by the remote when it opened its end of the endpoint.
 
Symbol[] RemoteDesiredCapabilities [get]
 The capabilities desired by the remote when it opened its end of the endpoint.
 
IReadOnlyDictionary< Symbol, object > RemoteProperties [get]
 The properties sent by the remote when it opened its end of this endpoint.
 

Additional Inherited Members

- Protected Attributes inherited from Apache.Qpid.Proton.Engine.Implementation.ProtonEndpoint< ITransactionController >
readonly ProtonEngine engine
 

Detailed Description

Proton transaction controller abstraction that provides the transaction services for a Sender link that transmits the transaction Declare and Discharge commands which control the lifetime and outcome of a running transaction.

Member Function Documentation

◆ AddCapacityAvailableHandler()

ITransactionController Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.AddCapacityAvailableHandler ( Action< ITransactionController handler)
inline

Allows the caller to add an delegate that will be signaled when the underlying link for this transaction controller has been granted credit which would then allow for transaction declare or discharge commands to be sent to the remote Transactional Resource. If the controller already has credit to send then the handler will be invoked immediately otherwise it will be stored until credit becomes available. Once a handler is signaled it is no longer retained for future updates and the caller will need to register it again once more transactional work is to be completed. Because more than one handler can be added at a time the caller should check again before attempting to perform a transaction declare or a discharge as other tasks might have already consumed credit if work is done via some asynchronous mechanism.

Parameters
handlerThe delegate that will handle this event
Returns
This transaction controller instance

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ Declare() [1/2]

ITransaction< ITransactionController > Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.Declare ( )
inline

Request that the remote transaction manager declare a new transaction and respond with a new transaction Id for that transaction. Upon successful declaration of a new transaction the remote will respond and the declared event handler will be signaled. This is a convenience method that is the same as first calling new transaction method and then passing the result of that to the declare method that accepts an already created transaction instance.

Returns
A new transaction that can be correlated with later declare events.

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ Declare() [2/2]

ITransactionController Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.Declare ( ITransaction< ITransactionController transaction)
inline

Request that the remote transaction manager discharge the given transaction with the specified failure state (true for failed). Upon successful discharge of the given transaction the remote will respond and the discharge event handler will be signalled.

Parameters
transactionThe transaction instance to associate with a declare
Returns
This transaction controller instance

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ DeclaredHandler()

ITransactionController Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.DeclaredHandler ( Action< ITransaction< ITransactionController > >  handler)
inline

Called when the transaction manager end of the link has responded to a previous declare request and the transaction can now be used to enroll deliveries into the active transaction.

Parameters
handlerThe delegate that will handle this event
Returns
This transaction controller instance

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ DeclareFailedHandler()

ITransactionController Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.DeclareFailedHandler ( Action< ITransaction< ITransactionController > >  handler)
inline

Called when the transaction manager end of the link has responded to a previous declare request indicating that the declaration failed and the transaction cannot be used to perform transactional work.

Parameters
handlerThe delegate that will handle this event
Returns
This transaction controller instance

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ Discharge()

ITransactionController Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.Discharge ( ITransaction< ITransactionController transaction,
bool  failed 
)
inline

Request that the remote transaction manager declare a new transaction and respond with a new transaction Id for that transaction. Upon successful declaration of a new transaction the remote will respond and the declared event handler will be signaled.

Parameters
transactionThe transaction to be discharged
failedboolean that indicates if the transaction has failed.
Returns
This transaction controller instance

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ DischargedHandler()

ITransactionController Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.DischargedHandler ( Action< ITransaction< ITransactionController > >  handler)
inline

Called when the transaction manager end of the link has responded to a previous discharge request and the transaction and the transaction has been completed.

Parameters
handlerThe delegate that will handle this event
Returns
This transaction controller instance

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ DischargeFailedHandler()

ITransactionController Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.DischargeFailedHandler ( Action< ITransaction< ITransactionController > >  handler)
inline

Called when the transaction manager end of the link has responded to a previous discharge request and the transaction discharge failed for some reason.

Parameters
handlerThe delegate that will handle this event
Returns
This transaction controller instance

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ NewTransaction()

ITransaction< ITransactionController > Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.NewTransaction ( )
inline

Creates a new Transaction instances that is returned in the idle state which can be populated with application specific attachments or assigned a linked resource prior to calling the declare method.

Returns
A new transaction that can be correlated with later declare events.

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ ParentEndpointClosedHandler()

ITransactionController Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.ParentEndpointClosedHandler ( Action< ITransactionController handler)
inline

Sets a Action delegate for when the parent Session or Connection of this link is locally closed. Typically used by clients for logging or other state update event processing. Clients should not perform any blocking calls within this context. It is an error for the handler to throw an exception and the outcome of doing so is undefined.

Parameters
handlerThe delegate that will handle this event
Returns
This transaction controller instance

Implements Apache.Qpid.Proton.Engine.ITransactionController.

Property Documentation

◆ Connection

IConnection Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.Connection
get

Provides access to the connection that owns this transaction controller endpoint.

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ Coordinator

Coordinator Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.Coordinator
getset

Access the Coordinator value to assign to the local end of this transaction coordinator link. Must be called during link setup, i.e. before calling the open method.

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ HasCapacity

bool Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.HasCapacity
get

Returns true if the transaction controller has capacity to send or buffer and transaction command to declare or discharge. If no capacity then a call to transaction controller declare or discharge would throw an exception.

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ RemoteCoordinator

Coordinator Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.RemoteCoordinator
get

Gets the Coordinator value to assign to the remote end of this transaction coordinator link. Must be called during link setup, i.e. before calling the open method.

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ RemoteSource

Source Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.RemoteSource
get

Gets the Source value to assign to the remote end of this transaction coordinator link. Must be called during link setup, i.e. before calling the open method.

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ Session

ISession Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.Session
get

Provides access to the session that created this transaction controller.

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ Source

Source Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.Source
getset

Access the Source value to assign to the local end of this transaction coordinator link. Must be called during link setup, i.e. before calling the open method.

Implements Apache.Qpid.Proton.Engine.ITransactionController.

◆ Transactions

IEnumerable<ITransaction<ITransactionController> > Apache.Qpid.Proton.Engine.Implementation.ProtonTransactionController.Transactions
get

Returns a enumerator over the set of Transactions that are active within this ITransactionController which have not reached a terminal state meaning they have not been successfully discharged and have not failed in either the declare phase or the discharge phase. If there are no transactions active within this transaction controller this method will return an enumerator that provides no entries.

Implements Apache.Qpid.Proton.Engine.ITransactionController.


The documentation for this class was generated from the following file: