Class SRAClient

java.lang.Object
org.jboss.jbossts.star.client.SRAClient
All Implemented Interfaces:
Closeable, AutoCloseable, SRAClientAPI

@RequestScoped public class SRAClient extends Object implements SRAClientAPI, Closeable
A utility class for controlling the lifecycle of Long Running Actions (SRAs) but the prefered mechanism is to use the annotation in the org.jboss.jbossts.star.annotation package
  • Field Details

  • Constructor Details

  • Method Details

    • postConstruct

      @PostConstruct public void postConstruct()
    • sraToURL

      public static URL sraToURL(String sraId)
    • sraToURL

      public static URL sraToURL(String sraId, String message)
    • encodeURL

      public static String encodeURL(URL sraId, String message)
    • getSRAId

      public static String getSRAId(String sraId)
    • stripUid

      public static String stripUid(URL url)
    • toURL

      public URL toURL(String sraId) throws InvalidSRAId
      Throws:
      InvalidSRAId
    • setCurrentSRA

      public void setCurrentSRA(URL coordinatorUrl)
      Update the clients notion of the current coordinator. Warning all further operations will be performed on the SRA manager that created the passed in coordinator.
      Parameters:
      coordinatorUrl - the full url of an SRA
    • startSRA

      public URL startSRA(String clientID, Long timeout) throws GenericSRAException
      Throws:
      GenericSRAException
    • startSRA

      public URL startSRA(URL parentSRA, String clientID, Long timeout, TimeUnit unit) throws GenericSRAException
      Specified by:
      startSRA in interface SRAClientAPI
      Parameters:
      parentSRA - the parent SRA if this new SRA is nested
      clientID - Each client is expected to have a unique identity (which can be a URL). (optional)
      timeout - Specifies the maximum time in seconds that the SRA will exist for. If the SRA is terminated because of a timeout, the SRA URL is deleted. All further invocations on the URL will return 404. The invoker can assume this was equivalent to a compensate operation. (optional, default to 0)
      Returns:
      the id of the new SRA
      Throws:
      GenericSRAException
    • cancelSRA

      public String cancelSRA(URL sraId) throws GenericSRAException
      Description copied from interface: SRAClientAPI
      Attempt to cancel an SRA Trigger the compensation of the SRA. All compensators will be triggered by the coordinator (ie the compensate message will be sent to each compensators). Upon termination, the URL is implicitly deleted. The invoker cannot know for sure whether the sra completed or compensated without enlisting a io.narayana.sra.
      Specified by:
      cancelSRA in interface SRAClientAPI
      Parameters:
      sraId - The unique identifier of the SRA (required)
      Returns:
      compensator sepcific data provided by the application for nested SRA the API implementation will combine compensator data into a JSON encoded array. This means that compensators MUST not return any data that starts with the JSON array start token (ie a '[' character)
      Throws:
      GenericSRAException - Comms error
    • commitSRA

      public String commitSRA(URL sraId) throws GenericSRAException
      Description copied from interface: SRAClientAPI
      Attempt to close an SRA Trigger the successful completion of the SRA. All compensators will be dropped by the coordinator. The complete message will be sent to the compensators. Upon termination, the URL is implicitly deleted. The invoker cannot know for sure whether the sra completed or compensated without enlisting a io.narayana.sra.
      Specified by:
      commitSRA in interface SRAClientAPI
      Parameters:
      sraId - The unique identifier of the SRA (required)
      Returns:
      compensator sepcific data provided by the application for nested SRA the API implementation will combine compensator data into a JSON encoded array. This means that compensators MUST not return any data that starts with the JSON array start token (ie a '[' character)
      Throws:
      GenericSRAException - Comms error
    • joinSRAWithLinkHeader

      public String joinSRAWithLinkHeader(URL sraUrl, Long timelimit, String linkHeader) throws GenericSRAException
      Parameters:
      sraUrl - the URL of the SRA to join
      timelimit - how long the io.narayana.sra is prepared to wait for SRA completion
      linkHeader - io.narayana.sra protocol URLs in link header format (RFC 5988)
      Returns:
      a recovery URL for this enlistment
      Throws:
      GenericSRAException - if the SRA coordinator failed to enlist the io.narayana.sra
    • joinSRA

      public void joinSRA(URL sraId, Long timelimit, String compensatorUrl) throws GenericSRAException
      Description copied from interface: SRAClientAPI
      A SRAParticipant can join with the SRA at any time prior to the completion of an activity
      Specified by:
      joinSRA in interface SRAClientAPI
      Parameters:
      sraId - The unique identifier of the SRA (required)
      timelimit - The time limit (in seconds) that the SRAParticipant can guarantee that it can compensate the work performed by the io.narayana.sra.demo.service. After this time period has elapsed, it may no longer be possible to undo the work within the scope of this (or any enclosing) SRA. It may therefore be necessary for the application or io.narayana.sra.demo.service to start other activities to explicitly try to compensate this work. The application or coordinator may use this information to control the lifecycle of a SRA. (required)
      compensatorUrl - The resource path that the SRA coordinator will use to drive the compensator. Performing a GET on the compensator URL will return the current status of the compensator, or 404 if the compensator is no longer present. The following types must be returned by Compensators to indicate their current status: - Compensating: the SRAParticipant is currently compensating for the SRA; - Compensated: the SRAParticipant has successfully compensated for the SRA. - FailedToCompensate: the SRAParticipant was not able to compensate for the SRA. It must maintain information about the work it was to compensate until the coordinator sends it a forget message. - Completing: the SRAParticipant is tidying up after being told to complete. - Completed: the coordinator/io.narayana.sra has confirmed. - FailedToComplete: the SRAParticipant was unable to tidy-up. Performing a POST on URL/compensate will cause the compensator to compensate the work that was done within the scope of the SRA. Performing a POST on URL/complete will cause the compensator to tidy up and it can forget this SRA. (optional)
      Throws:
      GenericSRAException - Comms error
    • joinSRA

      public String joinSRA(URL sraId, Long timelimit, String compensateUrl, String completeUrl, String leaveUrl, String statusUrl) throws GenericSRAException
      Description copied from interface: SRAClientAPI
      Similar to SRAClientAPI.joinSRA(URL, Long, String) but the various compensator urls are passed in explicitly
      Specified by:
      joinSRA in interface SRAClientAPI
      Parameters:
      sraId - The unique identifier of the SRA (required)
      timelimit - The time limit (in seconds) that the SRAParticipant can guarantee that it can compensate the work performed by the io.narayana.sra.demo.service
      compensateUrl - Performing a POST onthis URL will cause the io.narayana.sra to compensate the work that was done within the scope of the SRA.
      completeUrl - Performing a POST on this URL will cause the io.narayana.sra to tidy up and it can forget this transaction.
      leaveUrl - Performing a PUT on this URL with cause the compensator to leave the SRA
      statusUrl - Performing a GET on this URL will return the status of the compensator
      Throws:
      GenericSRAException
    • getAllSRAs

      public List<SRAInfo> getAllSRAs() throws GenericSRAException
      Description copied from interface: SRAClientAPI
      Returns all SRAs Gets both active and recovering SRAs
      Specified by:
      getAllSRAs in interface SRAClientAPI
      Returns:
      List
      Throws:
      GenericSRAException - Comms error
    • getActiveSRAs

      public List<SRAInfo> getActiveSRAs() throws GenericSRAException
      Description copied from interface: SRAClientAPI
      Lookup active SRAs
      Specified by:
      getActiveSRAs in interface SRAClientAPI
      Throws:
      GenericSRAException - Comms error
    • getRecoveringSRAs

      public List<SRAInfo> getRecoveringSRAs() throws GenericSRAException
      Description copied from interface: SRAClientAPI
      List recovering Long Running Actions Returns SRAs that are recovering (ie some compensators still need to be ran)
      Specified by:
      getRecoveringSRAs in interface SRAClientAPI
      Throws:
      GenericSRAException - Comms error
    • isActiveSRA

      public Boolean isActiveSRA(URL sraId) throws GenericSRAException
      Description copied from interface: SRAClientAPI
      Indicates whether an SRA is active
      Specified by:
      isActiveSRA in interface SRAClientAPI
      Parameters:
      sraId - The unique identifier of the SRA (required)
      Throws:
      GenericSRAException - Comms error
    • isCompensatedSRA

      public Boolean isCompensatedSRA(URL sraId) throws GenericSRAException
      Description copied from interface: SRAClientAPI
      Indicates whether an SRA was compensated
      Specified by:
      isCompensatedSRA in interface SRAClientAPI
      Parameters:
      sraId - The unique identifier of the SRA (required)
      Throws:
      GenericSRAException - Comms error
    • isCompletedSRA

      public Boolean isCompletedSRA(URL sraId) throws GenericSRAException
      Description copied from interface: SRAClientAPI
      Indicates whether an SRA is complete
      Specified by:
      isCompletedSRA in interface SRAClientAPI
      Parameters:
      sraId - The unique identifier of the SRA (required)
      Throws:
      GenericSRAException - Comms error
    • getTerminationUris

      public Map<String,String> getTerminationUris(URL aaId, Class<?> compensatorClass, jakarta.ws.rs.core.UriInfo uriInfo, boolean validate)
    • getUrl

      public String getUrl()
    • getCurrent

      public URL getCurrent()
      Description copied from interface: SRAClientAPI
      checks whether there is an SRA associated with the calling thread
      Specified by:
      getCurrent in interface SRAClientAPI
      Returns:
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
    • getResponseData

      public List<String> getResponseData(URL sraId)
      Specified by:
      getResponseData in interface SRAClientAPI