docs: @Override
      public SIDestinationAddress createTemporaryDestination(Distribution distribution,
                                                             String destinationPrefix)
  
                      throws SIConnectionUnavailableException, SIConnectionDroppedException,
                      SIResourceException, SIConnectionLostException, SILimitExceededException,
                      SIErrorException,
                      SINotAuthorizedException,
                      SIInvalidDestinationPrefixException
      {
          if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
              SibTr.entry(CoreSPIConnection.tc, "createTemporaryDestination",
                          new Object[] { this, destinationPrefix, distribution });
  
          // See if this connection has been closed
          checkNotClosed();
  
          // Check to make sure that the destination prefix is valid. 
          // If it's not, then we can't continue.
          String result = SICoreUtils.isDestinationPrefixValid(destinationPrefix);
          if (!result.equals(SICoreUtils.VALID)) // if its not valid there is something wrong
          {
              if (result.equals(SICoreUtils.MAX_LENGTH_EXCEEDED)) {// prefix length might have been exceeded
                  if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
                      SibTr.exit(CoreSPIConnection.tc, "createTemporaryDestination", "SIInvalidDestinationPrefixException");
                  throw new SIInvalidDestinationPrefixException(
                                  nls.getFormattedMessage(
                                                          "INVALID_DESTINATION_PREFIX_MAX_LENGTH_ERROR_CWSIP0039",
                                                          null,
                                                          null));
              } else { // an invalid character is there in the prefix 
  
                  if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
                      SibTr.exit(CoreSPIConnection.tc, "createTemporaryDestination", "SIInvalidDestinationPrefixException");
                  throw new SIInvalidDestinationPrefixException(
                                  nls.getFormattedMessage(
                                                          "INVALID_DESTINATION_PREFIX_CHAR_ERROR_CWSIP0040",
                                                          new Object[] { destinationPrefix, result },
                                                          null));
              }
          }
  
          SIDestinationAddress address = null;
  
          // Synchronize on the close object, we don't want the connection closing
          // while we try to add the temporary destination.
          synchronized (this)
          {
              // Check authority to create destination
              // If security is disabled then we'll bypass the check
              checkTempDestinationCreation((destinationPrefix == null ? "" : destinationPrefix), distribution);
  
              // Synchronize on the temporaryDestinations list object so that we can't collide
              // on creations. This will also ensure list integrity.
              synchronized (_temporaryDestinations)
              {
                  //pass this on to the destination manager
                  try
                  {
                      address =
                                      _destinationManager.createTemporaryDestination(distribution, destinationPrefix);
                  } catch (SIMPDestinationAlreadyExistsException e)
                  {
                      // FFDC
                      FFDCFilter.processException(
                                                  e,
                                                  "com.ibm.ws.sib.processor.impl.ConnectionImpl.createTemporaryDestination",
                                                  "1:3712:1.347.1.25",
                                                  this);
  
                      SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                                  new Object[] {
                                                "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                                "1:3718:1.347.1.25",
                                                e });
  
                      // This should never be thrown
                      if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
                          SibTr.exit(CoreSPIConnection.tc, "createTemporaryDestination", "SIErrorException");
                      throw new SIErrorException(
                                      nls.getFormattedMessage(
                                                              "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                                                              new Object[] {
                                                                            "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                                                            "1:3729:1.347.1.25",
                                                                            e },
                                                              null),
                                      e);
                  }
  
                  //add to list
                  _temporaryDestinations.add(address.getDestinationName());
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
              SibTr.exit(CoreSPIConnection.tc, "createTemporaryDestination", address);
  
          return address;
      }