예제 #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
        }
      }
    }
  }
예제 #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.
        }
      }
    }
  }
예제 #3
0
  /**
   * Adds the given StaticResource object to the set of those informed of thread association
   * changes.
   *
   * <p>If there is a current thread association, then the added StaticResource is called
   * immediately so that it is aware of the association.
   *
   * @param obj The StaticResource to be added.
   * @return
   * @see
   */
  void addStatic(StaticResource obj) {

    registered.addElement(obj);

    // Determine whether there is a current association.

    try {
      org.omg.CosTransactions.Coordinator coord = CurrentTransaction.getCurrentCoordinator();

      // Tell the StaticResource that the association has started.
      // Pretend that it is a begin association, as the
      // StaticResource has not seen the transaction before.

      if (coord != null) {
        obj.startAssociation(coord, true);
      }
    } catch (Throwable exc) {
      // Discard any exception.
    }
  }
예제 #4
0
  /**
   * Removes the given StaticResource object from the set of those informed of thread association
   * changes.
   *
   * @param obj The StaticResource to be removed.
   * @return Indicates success of the operation.
   * @see
   */
  boolean removeStatic(StaticResource obj) {

    boolean result = registered.removeElement(obj);
    return result;
  }