docs: void sendEvents(int eventType, Exception ex, Object connectionHandle)
      {
          ConnectionEvent ce = null;
          if (ex == null)
          {
              ce = new ConnectionEvent(this, eventType);
          }
          else
          {
              ce = new ConnectionEvent(this, eventType, ex);
          }
          ce.setConnectionHandle(connectionHandle);
          Collection copy = null;
          synchronized (m_connectionEventListeners)
          {
              copy = new ArrayList(m_connectionEventListeners);
          }
          switch (ce.getId())
          {
              case ConnectionEvent.CONNECTION_CLOSED:
                  for (Iterator i = copy.iterator(); i.hasNext();)
                  {
                      ConnectionEventListener cel = (ConnectionEventListener) i.next();
                      cel.connectionClosed(ce);
                  }
                  break;
              case ConnectionEvent.LOCAL_TRANSACTION_STARTED:
                  for (Iterator i = copy.iterator(); i.hasNext();)
                  {
                      ConnectionEventListener cel = (ConnectionEventListener) i.next();
                      cel.localTransactionStarted(ce);
                  }
                  break;
              case ConnectionEvent.LOCAL_TRANSACTION_COMMITTED:
                  for (Iterator i = copy.iterator(); i.hasNext();)
                  {
                      ConnectionEventListener cel = (ConnectionEventListener) i.next();
                      cel.localTransactionCommitted(ce);
                  }
                  break;
              case ConnectionEvent.LOCAL_TRANSACTION_ROLLEDBACK:
                  for (Iterator i = copy.iterator(); i.hasNext();)
                  {
                      ConnectionEventListener cel = (ConnectionEventListener) i.next();
                      cel.localTransactionRolledback(ce);
                  }
                  break;
              case ConnectionEvent.CONNECTION_ERROR_OCCURRED:
                  for (Iterator i = copy.iterator(); i.hasNext();)
                  {
                      ConnectionEventListener cel = (ConnectionEventListener) i.next();
                      cel.connectionErrorOccurred(ce);
                  }
                  break;
              default:
                  throw new IllegalArgumentException("Illegal eventType: " + ce.getId());
          }
      }