docs: public void send(SIBusMessage msg, SITransaction tran) 
        throws SISessionUnavailableException, SISessionDroppedException,
               SIConnectionUnavailableException, SIConnectionDroppedException,
               SIResourceException, SIConnectionLostException, SILimitExceededException, 
               SIErrorException,
               SINotAuthorizedException,
               SIIncorrectCallException,
               SINotPossibleInCurrentConfigurationException 
     {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "send", new Object[] {msg, tran});
        
        try
        {
           closeLock.readLock().lockInterruptibly();
           
           try
           {            
              checkAlreadyClosed();
              
              // XCT Instrumentation for SIBus
              //lohith liberty change
             /* if(XctSettings.isAnyEnabled())
              {
                 Xct xct = Xct.current();
                 if(xct.annotationsEnabled())
                 {
                    Annotation annotation= new Annotation(XctJmsConstants.XCT_SIBUS).add(XctJmsConstants.XCT_PROXY_SEND); 
                    annotation.associate(XctJmsConstants.XCT_DEST_NAME,getDestinationAddress().getDestinationName());
                    annotation.add(new Annotation(XctJmsConstants.XCT_DEST_TYPE).add(destType.toString()));
                    String transacted = XctJmsConstants.XCT_TRANSACTED_FALSE;
                    if (tran !=null)
                       transacted = XctJmsConstants.XCT_TRANSACTED_TRUE;
                    annotation.add(new Annotation(XctJmsConstants.XCT_TRANSACTED).add(transacted));
                    annotation.add(new Annotation(XctJmsConstants.XCT_RELIABILITY).add(msg.getReliability().toString()));
                  
                    xct.begin(annotation);
                 }
                 else
                    xct.begin();
                     
                 String xctCorrelationIDString = Xct.current().toString();
                 msg.setXctCorrelationID(xctCorrelationIDString);
              }*/
              // Now we need to synchronise on the transaction object if there is one.
              if (tran != null)
              {
                 synchronized (tran)
                 {
                    // Check transaction is in a valid state.
                    // Enlisted for an XA UOW and not rolledback or
                    // completed for a local transaction.
                    if (!((Transaction) tran).isValid())
                    {
                       throw new SIIncorrectCallException(
                          nls.getFormattedMessage("TRANSACTION_COMPLETE_SICO1022", null, null)
                       );
                    }
                          
                    _send(msg, tran);
                 }
              }
              else
              {
                 _send(msg, null);
              }
              
              //lohith liberty change
              /*if(XctSettings.isAnyEnabled())
              {
                 Xct xct = Xct.current();
                 if(xct.annotationsEnabled())
                 {
                    Annotation annotation= new Annotation(XctJmsConstants.XCT_SIBUS).add(XctJmsConstants.XCT_PROXY_SEND);                          
                    xct.end(annotation);          
                 }
                 else 
                    xct.end();            
              }*/
           }
           finally
           {
              closeLock.readLock().unlock();
           }
        }
        catch (InterruptedException e)
        {
           // No FFDC code needed
        }
        
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "send");
     }