Ejemplo n.º 1
0
  /**
   * Informs all registered objects an association has started.
   *
   * <p>The Control object which represents the transaction is given.
   *
   * <p>A flag is passed indicating whether this association is as a result of a Current.begin
   * operation.
   *
   * @param control The transaction whose association has started.
   * @param begin Indicates if this is a begin rather than a resume.
   * @return
   * @see
   */
  void distributeStart(ControlImpl control, boolean begin) {

    // Determine the Coordinator for the transaction.

    org.omg.CosTransactions.Coordinator coord = null;

    try {
      coord = control.get_coordinator();
    } catch (Unavailable exc) {
    }

    // Browse through the set, telling each that association is starting.

    if (coord != null) {

      for (int i = 0; i < registered.size(); i++) {

        StaticResource resource = (StaticResource) registered.elementAt(i);

        try {
          resource.startAssociation(coord, begin);
        } catch (INVALID_TRANSACTION exc) {
          // Catch INVALID_TRANSACTION exception, and allow it to
          // percolate. We need to inform all previously called
          // StaticResources that the association has ended
          // immediately.

          for (int j = i - 1; j >= 0; j--) {
            ((StaticResource) registered.elementAt(j)).endAssociation(coord, begin);
          }

          throw (INVALID_TRANSACTION) exc.fillInStackTrace();
        } catch (Throwable exc) {
          // discard any other exception
        }
      }
    }
  }
Ejemplo n.º 2
0
  /**
   * Informs all registered StaticResource objects that a thread association has ended.
   *
   * <p>The Control object representing the transaction is given.
   *
   * <p>A flag is passed indicating whether this association is as a result of the transaction
   * completing.
   *
   * @param control The transaction whose association has ended.
   * @param complete Indicates that this is a commit/rollback rather than a suspend.
   * @return
   * @see
   */
  void distributeEnd(ControlImpl control, boolean complete) {

    // Determine the Coordinator for the transaction.

    org.omg.CosTransactions.Coordinator coord = null;

    try {
      coord = control.get_coordinator();
    } catch (Unavailable exc) {
    }

    // Browse through the set, telling each that the association is ending.

    if (coord != null) {
      for (int i = 0; i < registered.size(); i++) {
        StaticResource resource = (StaticResource) registered.elementAt(i);
        try {
          resource.endAssociation(coord, complete);
        } catch (Throwable e) {
          // Discard any exception.
        }
      }
    }
  }