예제 #1
0
  @Test
  public void testMultiClose() throws Exception {
    UserBusinessActivity uba = UserBusinessActivity.getUserBusinessActivity();

    BusinessActivityManager bam = BusinessActivityManager.getBusinessActivityManager();
    com.arjuna.wst11.BAParticipantManager bpm1 = null;
    com.arjuna.wst11.BAParticipantManager bpm2 = null;
    DemoBusinessParticipant p = new DemoBusinessParticipant(DemoBusinessParticipant.CLOSE, "1240");
    FailureBusinessParticipant fp =
        new FailureBusinessParticipant(FailureBusinessParticipant.FAIL_IN_CLOSE, "5679");

    try {
      uba.begin();

      bpm1 = bam.enlistForBusinessAgreementWithParticipantCompletion(p, "1240");
      bpm2 = bam.enlistForBusinessAgreementWithParticipantCompletion(fp, "5679");
      bpm1.completed();
      bpm2.completed();
    } catch (Exception eouter) {
      try {
        uba.cancel();
      } catch (Exception einner) {
      }
      throw eouter;
    }
    // the close should succeed even though the participant fails
    uba.close();
    assertTrue(p.passed());
  }
  /** Suspend the current transaction. */
  protected void suspendTransaction() {
    try {
      /*
       * There should either be an Atomic Transaction *or* a Business Activity
       * associated with the thread.
       */
      final TransactionManager transactionManager = TransactionManagerFactory.transactionManager();
      final BusinessActivityManager businessActivityManager =
          BusinessActivityManagerFactory.businessActivityManager();

      if (transactionManager != null) {
        transactionManager.suspend();
      }

      if (businessActivityManager != null) {
        businessActivityManager.suspend();
      }
    } catch (final Throwable th) {
      wstxLogger.i18NLogger.warn_mw_wst11_service_JaxHC11P_1(
          "com.arjuna.mw.wst11.service.JaxBaseHeaderContextProcessor.suspendTransaction()", th);
    }
  }