docs: @Override
      public SIDestinationAddress[] addDestinationListener(
                                                           String destinationNamePattern,
                                                           DestinationListener destinationListener,
                                                           DestinationType destinationType,
                                                           DestinationAvailability destinationAvailability)
                      throws SIIncorrectCallException,
                      SICommandInvocationFailedException,
                      SIConnectionUnavailableException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(tc, "addDestinationListener", new Object[] { destinationNamePattern,
                                                                      destinationListener,
                                                                      destinationType,
                                                                      destinationAvailability });
  
          // Check that a listener has been specified
          if (destinationListener == null)
          {
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  SibTr.exit(tc, "addDestinationListener", "SIIncorrectCallException");
              // Parameter is null, throw an excepiton
              throw new SIIncorrectCallException(
                              nls.getFormattedMessage(
                                                      "ADD_DEST_LISTENER_ERROR_CWSIP0803",
                                                      null,
                                                      null));
          }
  
          //make sure that the connection is open before trying to use it
          checkNotClosed();
  
          SIDestinationAddress[] destinationAddresses = null;
  
          synchronized (this)
          {
              checkNotClosed();
              destinationAddresses =
                              _destinationManager.addDestinationListener(destinationNamePattern,
                                                                         destinationListener,
                                                                         destinationType,
                                                                         destinationAvailability,
                                                                         this);
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "addDestinationListener", new Object[] { destinationAddresses });
          return destinationAddresses;
      }