docs: @Override
      public ProducerSession createProducerSession(
                                                   SIDestinationAddress destAddr,
                                                   String discriminator,
                                                   DestinationType destType,
                                                   OrderingContext extendedMessageOrderingContext,
                                                   String alternateUser,
                                                   boolean fixedQueuePoint,
                                                   boolean preferLocal,
                                                   boolean clearPubSubFingerprints)
                      throws SIConnectionDroppedException,
                      SIConnectionUnavailableException,
                      SITemporaryDestinationNotFoundException,
                      SIErrorException,
                      SIIncorrectCallException,
                      SIResourceException,
                      SINotPossibleInCurrentConfigurationException
      {
          if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
              SibTr.entry(CoreSPIConnection.tc, "createProducerSession",
                          new Object[] { destAddr,
                                        discriminator,
                                        destType,
                                        extendedMessageOrderingContext,
                                        alternateUser,
                                        Boolean.valueOf(fixedQueuePoint),
                                        Boolean.valueOf(preferLocal),
                                        Boolean.valueOf(clearPubSubFingerprints),
                                        this });
  
          // See if this connection has been closed
          checkNotClosed();
  
          checkProducerSessionNullParameters(destAddr);
  
          SecurityContext secContext = null;
  
          // If security is enabled then we need to set up a security context
          if (_isBusSecure)
          {
              // Feature 219101: Add the alternate user string to the security context
              secContext = new SecurityContext(this._subject,
                              alternateUser,
                              discriminator,
                              _messageProcessor.getAuthorisationUtils());
          }
          boolean keepSecurityUserid = false;
          ProducerSession session = internalCreateProducerSession(destAddr,
                                                                  destType,
                                                                  false,
                                                                  secContext,
                                                                  keepSecurityUserid,
                                                                  fixedQueuePoint,
                                                                  preferLocal,
                                                                  clearPubSubFingerprints,
                                                                  discriminator);
  
          // Set the style of discriminator access for the producer session
          if (discriminator != null && session != null)
              ((ProducerSessionImpl) session).disableDiscriminatorAccessCheckAtSend(discriminator);
  
          if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
              SibTr.exit(CoreSPIConnection.tc, "createProducerSession", session);
          return session;
      }