/**
   * Remove a listener
   *
   * @param listener The listener
   */
  public void removeListener(UserTransactionListener listener) {
    UserTransactionListenerImpl impl = listeners.get(listener);

    if (impl != null) {
      delegator.removeListener(impl);
      listeners.remove(listener);
    }
  }
  /**
   * Remove a provider
   *
   * @param provider The provider
   */
  public void removeProvider(UserTransactionProvider provider) {
    UserTransactionProviderImpl impl = providers.get(provider);

    if (impl != null) {
      delegator.removeProvider(impl);
      providers.remove(provider);
    }
  }
  /**
   * Add a provider
   *
   * @param provider The provider
   */
  public void addProvider(UserTransactionProvider provider) {
    UserTransactionProviderImpl impl = new UserTransactionProviderImpl(provider);

    delegator.addProvider(impl);
    providers.put(provider, impl);
  }
  /**
   * Add a listener
   *
   * @param listener The listener
   */
  public void addListener(UserTransactionListener listener) {
    UserTransactionListenerImpl impl = new UserTransactionListenerImpl(listener);

    delegator.addListener(impl);
    listeners.put(listener, impl);
  }
 /** Fire a user transaction started event */
 public void userTransactionStarted() {
   delegator.userTransactionStarted();
 }