docs: @Override
      public ProducerSession createProducerSession(SIDestinationAddress destAddr,
                                                   DestinationType destinationType,
                                                   OrderingContext extendedMessageOrderingContext,
                                                   String alternateUser)
  
                      throws SIConnectionDroppedException,
                      SIConnectionUnavailableException,
                      SITemporaryDestinationNotFoundException,
                      SIErrorException,
                      SIIncorrectCallException,
                      SIResourceException,
                      SINotPossibleInCurrentConfigurationException
      {
          if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
              SibTr.entry(CoreSPIConnection.tc, "createProducerSession",
                          new Object[] { destAddr,
                                        destinationType,
                                        extendedMessageOrderingContext,
                                        alternateUser,
                                        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(_subject,
                              alternateUser,
                              null,
                              _messageProcessor.getAuthorisationUtils());
          }
  
          boolean keepSecurityUserid = false;
  
          ProducerSession producer =
                          internalCreateProducerSession(destAddr,
                                                        destinationType,
                                                        false,
                                                        secContext,
                                                        keepSecurityUserid,
                                                        false,
                                                        true,
                                                        true,
                                                        null);
  
          if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
              SibTr.exit(CoreSPIConnection.tc, "createProducerSession", producer);
          //Destination is on the local bus
          return producer;
      }