Search in sources :

Example 16 with BusinessActivityManager

use of com.arjuna.mw.wst11.BusinessActivityManager in project quickstart by wildfly.

the class SetServiceBAImpl method addValueToSet.

/**
 * Add an item to a set Enrolls a Participant if necessary and passes the call through to the business logic.
 *
 * @param value the value to add to the set.
 * @throws AlreadyInSetException if value is already in the set
 * @throws SetServiceException if an error occurred when attempting to add the item to the set.
 */
@WebMethod
public void addValueToSet(String value) throws AlreadyInSetException, SetServiceException {
    System.out.println("[SERVICE] invoked addValueToSet('" + value + "')");
    BAParticipantManager participantManager;
    try {
        // enlist the Participant for this service:
        SetParticipantBA participant = new SetParticipantBA(value);
        BusinessActivityManager activityManager = BusinessActivityManagerFactory.businessActivityManager();
        System.out.println("[SERVICE] Enlisting a participant into the BA");
        participantManager = activityManager.enlistForBusinessAgreementWithParticipantCompletion(participant, "SetServiceBAImpl:" + UUID.randomUUID());
    } catch (Exception e) {
        System.err.println("Participant enlistment failed");
        e.printStackTrace(System.err);
        throw new SetServiceException("Error enlisting participant", e);
    }
    // invoke the back-end business logic
    System.out.println("[SERVICE] Invoking the back-end business logic");
    MockSetManager.add(value);
    /*
         * this service employs the participant completion protocol which means it decides when it wants to commit local
         * changes. If the local changes (adding the item to the set) succeeded, we notify the coordinator that we have
         * completed. Otherwise, we notify the coordinator that we cannot complete. If any other participant fails or the client
         * decides to cancel we can rely upon being told to compensate.
         */
    System.out.println("[SERVICE] Prepare the backend resource and if successful notify the coordinator that we have completed our work");
    if (MockSetManager.prepare()) {
        try {
            // tell the coordinator manager we have finished our work
            System.out.println("[SERVICE] Prepare successful, notifying coordinator of completion");
            participantManager.completed();
        } catch (Exception e) {
            /*
                 * Failed to notify the coordinator that we have finished our work. Compensate the work and throw an Exception
                 * to notify the client that the add operation failed.
                 */
            MockSetManager.rollback(value);
            System.err.println("[SERVICE]  'completed' callback failed");
            throw new SetServiceException("Error when notifying the coordinator that the work is completed", e);
        }
    } else {
        try {
            /*
                 * tell the participant manager we cannot complete. this will force the activity to fail
                 */
            System.out.println("[SERVICE] Prepare failed, notifying coordinator that we cannot complete");
            participantManager.cannotComplete();
        } catch (Exception e) {
            System.err.println("'cannotComplete' callback failed");
            throw new SetServiceException("Error when notifying the coordinator that the work is cannot be completed", e);
        }
        throw new SetServiceException("Unable to prepare the back-end resource");
    }
}
Also used : BusinessActivityManager(com.arjuna.mw.wst11.BusinessActivityManager) BAParticipantManager(com.arjuna.wst11.BAParticipantManager) WebMethod(javax.jws.WebMethod)

Aggregations

BusinessActivityManager (com.arjuna.mw.wst11.BusinessActivityManager)15 UserBusinessActivity (com.arjuna.mw.wst11.UserBusinessActivity)9 Test (org.junit.Test)9 DemoBusinessParticipant (com.arjuna.wstx.tests.common.DemoBusinessParticipant)8 SystemException (com.arjuna.wst.SystemException)6 BAParticipantManager (com.arjuna.wst11.BAParticipantManager)3 FailureBusinessParticipant (com.arjuna.wstx.tests.common.FailureBusinessParticipant)3 Uid (com.arjuna.ats.arjuna.common.Uid)2 WebMethod (javax.jws.WebMethod)2 TestApplicationException (org.jboss.as.test.xts.base.TestApplicationException)2 Context (com.arjuna.mw.wsc11.context.Context)1 TxContext (com.arjuna.mw.wst.TxContext)1 TransactionManager (com.arjuna.mw.wst11.TransactionManager)1 TxContextImple (com.arjuna.mwlabs.wst11.at.context.TxContextImple)1 FaultedException (com.arjuna.wst.FaultedException)1 TransactionRolledBackException (com.arjuna.wst.TransactionRolledBackException)1 WrongStateException (com.arjuna.wst.WrongStateException)1 DemoBusinessParticipantWithComplete (com.arjuna.wstx.tests.common.DemoBusinessParticipantWithComplete)1 HttpServletRequest (javax.servlet.http.HttpServletRequest)1 Name (javax.xml.soap.Name)1