Package org.jboss.jbossts.star.client
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 theorg.jboss.jbossts.star.annotationpackage
-
-
Field Summary
Fields Modifier and Type Field Description static StringCLIENT_ID_PARAM_NAMEstatic StringCOMMITstatic StringCOORDINATOR_URL_PROPstatic longDEFAULT_TIMEOUT_MILLISstatic StringONEPHASECOMMITstatic StringPARENT_SRA_PARAM_NAMEstatic StringPREPAREstatic StringROLLBACKstatic StringRTS_HTTP_CONTEXT_HEADERstatic StringRTS_HTTP_RECOVERY_HEADERstatic StringSTATUSstatic StringTIMELIMIT_PARAM_NAMEstatic StringTX_COMMITTEDstatic StringTX_ROLLBACK_ONLYstatic StringTX_ROLLEDBACK
-
Constructor Summary
Constructors Constructor Description SRAClient()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description StringcancelSRA(URL sraId)Attempt to cancel an SRA Trigger the compensation of the SRA.voidclose()StringcommitSRA(URL sraId)Attempt to close an SRA Trigger the successful completion of the SRA.static StringencodeURL(URL sraId, String message)List<SRAInfo>getActiveSRAs()Lookup active SRAsList<SRAInfo>getAllSRAs()Returns all SRAs Gets both active and recovering SRAsURLgetCurrent()checks whether there is an SRA associated with the calling threadList<SRAInfo>getRecoveringSRAs()List recovering Long Running Actions Returns SRAs that are recovering (ie some compensators still need to be ran)List<String>getResponseData(URL sraId)static StringgetSRAId(String sraId)Map<String,String>getTerminationUris(URL aaId, Class<?> compensatorClass, javax.ws.rs.core.UriInfo uriInfo, boolean validate)StringgetUrl()BooleanisActiveSRA(URL sraId)Indicates whether an SRA is activeBooleanisCompensatedSRA(URL sraId)Indicates whether an SRA was compensatedBooleanisCompletedSRA(URL sraId)Indicates whether an SRA is completevoidjoinSRA(URL sraId, Long timelimit, String compensatorUrl)A SRAParticipant can join with the SRA at any time prior to the completion of an activityStringjoinSRA(URL sraId, Long timelimit, String compensateUrl, String completeUrl, String leaveUrl, String statusUrl)Similar toSRAClientAPI.joinSRA(URL, Long, String)but the various compensator urls are passed in explicitlyStringjoinSRAWithLinkHeader(URL sraUrl, Long timelimit, String linkHeader)voidpostConstruct()voidsetCurrentSRA(URL coordinatorUrl)Update the clients notion of the current coordinator.static URLsraToURL(String sraId)static URLsraToURL(String sraId, String message)URLstartSRA(String clientID, Long timeout)URLstartSRA(URL parentSRA, String clientID, Long timeout, TimeUnit unit)static StringstripUid(URL url)URLtoURL(String sraId)
-
-
-
Field Detail
-
RTS_HTTP_CONTEXT_HEADER
public static final String RTS_HTTP_CONTEXT_HEADER
- See Also:
- Constant Field Values
-
RTS_HTTP_RECOVERY_HEADER
public static final String RTS_HTTP_RECOVERY_HEADER
- See Also:
- Constant Field Values
-
COORDINATOR_URL_PROP
public static final String COORDINATOR_URL_PROP
- See Also:
- Constant Field Values
-
COMMIT
public static final String COMMIT
- See Also:
- Constant Field Values
-
PREPARE
public static final String PREPARE
- See Also:
- Constant Field Values
-
ROLLBACK
public static final String ROLLBACK
- See Also:
- Constant Field Values
-
STATUS
public static final String STATUS
- See Also:
- Constant Field Values
-
ONEPHASECOMMIT
public static final String ONEPHASECOMMIT
- See Also:
- Constant Field Values
-
TIMELIMIT_PARAM_NAME
public static final String TIMELIMIT_PARAM_NAME
- See Also:
- Constant Field Values
-
CLIENT_ID_PARAM_NAME
public static final String CLIENT_ID_PARAM_NAME
- See Also:
- Constant Field Values
-
PARENT_SRA_PARAM_NAME
public static final String PARENT_SRA_PARAM_NAME
- See Also:
- Constant Field Values
-
DEFAULT_TIMEOUT_MILLIS
public static final long DEFAULT_TIMEOUT_MILLIS
- See Also:
- Constant Field Values
-
TX_COMMITTED
public static final String TX_COMMITTED
- See Also:
- Constant Field Values
-
TX_ROLLEDBACK
public static final String TX_ROLLEDBACK
- See Also:
- Constant Field Values
-
TX_ROLLBACK_ONLY
public static final String TX_ROLLBACK_ONLY
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
SRAClient
public SRAClient() throws URISyntaxException, MalformedURLException
-
-
Method Detail
-
postConstruct
@PostConstruct public void postConstruct()
-
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:
startSRAin interfaceSRAClientAPI- Parameters:
parentSRA- the parent SRA if this new SRA is nestedclientID- 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:SRAClientAPIAttempt 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:
cancelSRAin interfaceSRAClientAPI- 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:SRAClientAPIAttempt 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:
commitSRAin interfaceSRAClientAPI- 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 jointimelimit- how long the io.narayana.sra is prepared to wait for SRA completionlinkHeader- 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:SRAClientAPIA SRAParticipant can join with the SRA at any time prior to the completion of an activity- Specified by:
joinSRAin interfaceSRAClientAPI- 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:SRAClientAPISimilar toSRAClientAPI.joinSRA(URL, Long, String)but the various compensator urls are passed in explicitly- Specified by:
joinSRAin interfaceSRAClientAPI- 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.servicecompensateUrl- 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 SRAstatusUrl- Performing a GET on this URL will return the status of the compensator {@see joinSRA}- Throws:
GenericSRAException
-
getAllSRAs
public List<SRAInfo> getAllSRAs() throws GenericSRAException
Description copied from interface:SRAClientAPIReturns all SRAs Gets both active and recovering SRAs- Specified by:
getAllSRAsin interfaceSRAClientAPI- Returns:
- List
- Throws:
GenericSRAException- Comms error
-
getActiveSRAs
public List<SRAInfo> getActiveSRAs() throws GenericSRAException
Description copied from interface:SRAClientAPILookup active SRAs- Specified by:
getActiveSRAsin interfaceSRAClientAPI- Throws:
GenericSRAException- Comms error
-
getRecoveringSRAs
public List<SRAInfo> getRecoveringSRAs() throws GenericSRAException
Description copied from interface:SRAClientAPIList recovering Long Running Actions Returns SRAs that are recovering (ie some compensators still need to be ran)- Specified by:
getRecoveringSRAsin interfaceSRAClientAPI- Throws:
GenericSRAException- Comms error
-
isActiveSRA
public Boolean isActiveSRA(URL sraId) throws GenericSRAException
Description copied from interface:SRAClientAPIIndicates whether an SRA is active- Specified by:
isActiveSRAin interfaceSRAClientAPI- 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:SRAClientAPIIndicates whether an SRA was compensated- Specified by:
isCompensatedSRAin interfaceSRAClientAPI- 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:SRAClientAPIIndicates whether an SRA is complete- Specified by:
isCompletedSRAin interfaceSRAClientAPI- Parameters:
sraId- The unique identifier of the SRA (required)- Throws:
GenericSRAException- Comms error
-
getTerminationUris
public Map<String,String> getTerminationUris(URL aaId, Class<?> compensatorClass, javax.ws.rs.core.UriInfo uriInfo, boolean validate)
-
getUrl
public String getUrl()
-
getCurrent
public URL getCurrent()
Description copied from interface:SRAClientAPIchecks whether there is an SRA associated with the calling thread- Specified by:
getCurrentin interfaceSRAClientAPI- Returns:
-
close
public void close()
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable
-
getResponseData
public List<String> getResponseData(URL sraId)
- Specified by:
getResponseDatain interfaceSRAClientAPI
-
-