code: @Override
      public ProducerSession createProducerSession(
                                                   final SIDestinationAddress destAddr,
                                                   final DestinationType destType,
                                                   final OrderingContext orderingContext, final String alternateUser)
                      throws SIConnectionDroppedException,
                      SIConnectionUnavailableException, SIConnectionLostException,
                      SILimitExceededException, SINotAuthorizedException,
                      SITemporaryDestinationNotFoundException, SIResourceException,
                      SIErrorException, SINotPossibleInCurrentConfigurationException,
                      SIIncorrectCallException {
  
          checkValid();
  
          final ProducerSession session = _delegateConnection
                          .createProducerSession(destAddr, destType, orderingContext,
                                                 alternateUser);
  
          return new SibRaProducerSession(this, session);
  
      }
docs: Creates a producer session. Checks that the connection is valid and then
  delegates. Wraps the <code>ProducerSession</code> returned from the
  delegate in a <code>SibRaProducerSession</code>.
  
  @param destAddr
  the address of the destination
  @param destType
  the destination type
  @param orderingContext
  indicates that the order of messages from multiple
  ProducerSessions should be preserved
  @param alternateUser
  the name of the user under whose authority operations of the
  ProducerSession should be performed (may be null)
  @return the producer session
  @throws SIIncorrectCallException
  if the delegation fails
  @throws SINotPossibleInCurrentConfigurationException
  if the delegation fails
  @throws SIErrorException
  if the delegation fails
  @throws SIResourceException
  if the delegation fails
  @throws SITemporaryDestinationNotFoundException
  if the delegation fails
  @throws SINotAuthorizedException
  if the delegation fails
  @throws SILimitExceededException
  if the delegation fails
  @throws SIConnectionLostException
  if the delegation fails
  @throws SIConnectionUnavailableException
  if the connection is not valid
  @throws SIConnectionDroppedException
  if the delegation fails