Set an Exception Listener

All the APIs support the ability to set an exception listener on the connection that gets invoked when a connection breaks or experiences a fault-tolerant failover.

When the event is a disconnect, the exception handler can call various EMS methods without any problem. However, when the event is a fault-tolerant failover, the exception handler is not allowed to call any EMS method. To do so risks a deadlock. You can call the setExceptionOnFTSwitch method to receive an exception that contains the new server URL after a fault-tolerant failover has occurred.

The following examples demonstrate how to establish an exception listener for a connection.

  • Java

    Implement an ExceptionListener.onException method, use the Connection object’s setExceptionListener method to register the exception listener, and call Tibjms.setExceptionOnFTSwitch to call the exception handler after a fault-tolerant failover:

      public class tibjmsMsgConsumer
              implements ExceptionListener
      {
    .....
      public void onException(JMSException e)
           {
             /* Handle exception */
           }
    .....
      connection.setExceptionListener(this);
      com.tibco.tibjms.Tibjms.setExceptionOnFTSwitch(true);
    .....
      }

    See the tibjmsMsgConsumer.java sample client for a working example (without the setExceptionOnFTSwitch call).

  • C

    Define an onException function to handle exceptions, use the tibemsConnection_SetExceptionListener function to call onException when an error is encountered, and call tibems_setExceptionOnFTSwitch to call the exception handler after a fault-tolerant failover:

      void onException(
        tibemsConnection    conn,
        tibems_status       reason,
        void*               closure)
      {
         /* Handle exception */
      }
    .....
      status = tibemsConnection_SetExceptionListener(
                                                connection,
                                                onException, 
                                                NULL);
      tibems_setExceptionOnFTSwitch(TIBEMS_TRUE);

    See the tibemsMsgConsumer.c sample client for a working example (without the setExceptionOnFTSwitch call).

  • C#
      public class csMsgConsumer : IExceptionListener
      {
    .....
      public void OnException(EMSException e) 
          {
         /* Handle exception */
          }
    .....
      connection.ExceptionListener = this;
      TIBCO.EMS.Tibems.SetExceptionOnFTSwitch(true);
    .....
      }

    See the csMsgConsumer.cs sample client for a working example (without the setExceptionOnFTSwitch call).