public void fireStatementErrorOccurred(PreparedStatement ps, SQLException error) {
    Set mlCopy;

    synchronized (this) {
      mlCopy = (Set) mlisteners.clone();
    }

    StatementEvent evt = new StatementEvent(source, ps, error);
    for (Iterator i = mlCopy.iterator(); i.hasNext(); ) {
      StatementEventListener cl = (StatementEventListener) i.next();
      cl.statementErrorOccurred(evt);
    }
  }