docs: private ProducerSession internalCreateProducerSession(
                                                            SIDestinationAddress destAddress,
                                                            DestinationType destinationType,
                                                            boolean system,
                                                            SecurityContext secContext,
                                                            boolean keepSecurityUserid,
                                                            boolean fixedMessagePoint,
                                                            boolean preferLocal,
                                                            boolean clearPubSubFingerprints,
                                                            String discriminator)
                      throws SIConnectionUnavailableException, SIConnectionDroppedException,
                      SIErrorException,
                      SITemporaryDestinationNotFoundException, SIIncorrectCallException, SIResourceException, SINotPossibleInCurrentConfigurationException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(
                          tc,
                          "internalCreateProducerSession",
                          new Object[] { destAddress,
                                        destinationType,
                                        system,
                                        secContext,
                                        keepSecurityUserid,
                                        fixedMessagePoint,
                                        preferLocal,
                                        clearPubSubFingerprints });
  
          String destinationName = destAddress.getDestinationName();
          String busName = destAddress.getBusName();
          DestinationHandler destination =
                          _destinationManager.getDestination(destinationName, busName, false, true);
  
          // Check the destination type
          checkDestinationType(destinationType, destAddress, destination, system);
  
          // Check authority to produce to destination
          // If security is disabled then we'll bypass the check
          // Security changes for Liberty Messaging: Sharath Start
          // Remove the If condition, since the proxy class handles it
          checkDestinationAuthority(destination, MessagingSecurityConstants.OPERATION_TYPE_SEND, discriminator);
          // Security changes for Liberty Messaging: Sharath End
  
          ProducerSession producer = null;
  
          // Synchronize on the close object, we don't want the connection closing
          // while we try to add the producer.
          synchronized (this)
          {
              // See if this connection has been closed
              checkNotClosed();
  
              producer =
                              new ProducerSessionImpl(destAddress,
                                              destination,
                                              this,
                                              secContext,
                                              keepSecurityUserid,
                                              fixedMessagePoint,
                                              preferLocal,
                                              clearPubSubFingerprints);
  
              synchronized (_producers)
              {
                  //store a reference to that producer session so that we can close
                  //it again later if needed
                  _producers.add(producer);
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "internalCreateProducerSession", producer);
          return producer; //169892
      }