docs: @Override
      public Object prepareOutboundConnection(Object ep) throws FrameworkException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "prepareOutboundConnection", ep);
  
          final CFEndPoint originalEndPoint = (CFEndPoint) ep;
  
          //Attempt to clone the original end point to prevent us affecting other users.
          final CFEndPoint endPoint = cloneEndpoint(originalEndPoint);
  
          // If the endpoint relates to an SSL transport chain - then we need to add
          // our own SSL properties for things like local keystore and truststore
          // files.
          Map sslProps = null; // D232743 
          if (endPoint.isSSLEnabled())
          {
              // begin D223333
              // Obtain the class of the SSL Channel Factory.  This is used
              // to identify SSL channel instances by the subsequent code.
              Class sslChannelFactory = null;
              try
              {
                  sslChannelFactory =
                                  Class.forName(JFapChannelConstants.CLASS_SSL_CHANNEL_FACTORY);
              } catch (ClassNotFoundException cnfe)
              {
                  FFDCFilter.processException(cnfe, CLASS_NAME + ".prepareEndPoint",
                                              JFapChannelConstants.RICHCLIENTFRAMEWORK_PREPAREEP_01, this);
  
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled())
                      SibTr.exception(this, tc, cnfe);
                  throw new SIErrorException(
                                  nls.getFormattedMessage("CONNDATAGROUP_INTERNAL_SICJ0062",
                                                          null,
                                                          "CONNDATAGROUP_INTERNAL_SICJ0062"),
                                  cnfe);
              }
  
              if (RuntimeInfo.isClientContainer() || RuntimeInfo.isThinClient() || RuntimeInfo.isFatClient())
              {
                  // In the client environment, we take our SSL configuration
                  // from the sib.client.ssl.properties file.                  
                  sslProps = ChannelFrameworkReference.loadSSLProperties();
              }
              else
              {
                  // In the server environment, we obtain the SSL configuration
                  // from a chain with the same name.  E.g. if the endpoint relates
                  // to a remote chain called "SecureMessaging", we look for a locally
                  // defined chain called "SecureMessaging" to obtain our configuration.
                  // Of course, there is no guarentee that this chain will be defined.
                  String chainName = endPoint.getName();
                  ChainData chainData = framework.getChain(chainName);
  
                  if (chainData == null)
                  {
                      // This application server does not have a suitably named
                      // chain.  Warn the user.
                      // Inserts are chain name and hostname
                      SibTr.warning(tc, "CONNDATAGROUP_BADSLLCHAINNAME_SICJ0066",
                                    new Object[] { endPoint.getName(), endPoint.getAddress().getHostAddress() });
                  }
                  else
                  {
                      ChannelData sslChannel = null;
                      ChannelData[] channelArray = chainData.getChannelList();
                      for (int i = 0; (i < channelArray.length) && (sslChannel == null); ++i)
                      {
                          if (channelArray[i].getFactoryType().equals(sslChannelFactory))
                              sslChannel = channelArray[i];
                      }
  
                      if (sslChannel == null)
                      {
                          // Although we have located a suitably named chain, it does
                          // not contain an SSL channel instance from which we can obtain
                          // the properties we require.  Warn the user.
                          SibTr.warning(tc, "CONNDATAGROUP_NOTSSLCHAIN_SICJ0067",
                                        new Object[] { endPoint.getName(), endPoint.getAddress().getHostAddress() });
                      }
                      else
                      {
                          sslProps = sslChannel.getPropertyBag();
                      }
                  }
  
              }
  
              // If the endpoint contains an SSL channel - then modifiy its properties by adding a
              // map containing local SSL configuration information.
              if (sslProps != null)
              {
                  modifyEndpointChannelProperties(endPoint, sslChannelFactory, sslProps, true);
              }
          }
  
          // If the endpoint contains an TCP channel - then modifiy its properties by overriding
          // the threadpool it will use.
          Class<?> tcpChannelFactory = null;
          try
          {
              //Liberty COMMS todo
              // most of this class code may not be needed
              //final boolean targetThreadpoolExists = 
              //   ThreadPoolRepositoryManager.getThreadPoolRepository().getThreadPool(JFapChannelConstants.CLIENT_TCP_CHANNEL_THREADPOOL_NAME) != null;
              boolean targetThreadpoolExists = false;
              if (targetThreadpoolExists)
              {
                  tcpChannelFactory = Class.forName(JFapChannelConstants.CLASS_TCP_CHANNEL_FACTORY);
                  Map<String, String> tcpProps = new HashMap<String, String>();
                  tcpProps.put("threadPoolName", JFapChannelConstants.CLIENT_TCP_CHANNEL_THREADPOOL_NAME);
                  modifyEndpointChannelProperties(endPoint, tcpChannelFactory, tcpProps, false);
              }
              else
              {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(this, tc, "Cannot find threadpool: " + JFapChannelConstants.CLIENT_TCP_CHANNEL_THREADPOOL_NAME + " using default");
              }
          } catch (ClassNotFoundException e)
          {
              FFDCFilter.processException(e, CLASS_NAME + ".prepareEndPoint",
                                          JFapChannelConstants.RICHCLIENTFRAMEWORK_PREPAREEP_02, this);
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(this, tc, "Unable to load TCP Channel", e);
  
              throw new FrameworkException(e);
          }
  
          /* PM72835 - Start */
          final Iterator<CFEndPoint> itr = endPointsList.iterator();
          while (itr.hasNext()) {
              CFEndPoint tempEndPoint = itr.next();
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(this, tc, "Comparing the Endpoints from list , sent from trm ", new Object[] { tempEndPoint, endPoint });
              if (areEndPointsEqual(tempEndPoint, endPoint))
                  return tempEndPoint;
          }
          /* PM72835 - End */
  
          //Romil Liberty change: commenting out this .. for now .. as the flow is outbound
          //initially only in-bound is worked
          /*
           * try
           * {
           * 
           * framework.prepareEndPoint(endPoint);
           * }
           * catch (ChannelFrameworkException e)
           * {
           * FFDCFilter.processException(e, CLASS_NAME + ".prepareEndPoint",
           * JFapChannelConstants.RICHCLIENTFRAMEWORK_PREPAREEP_03,
           * new Object[] { this, endPoint });
           * 
           * if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Unable to prepare end point", e);
           * 
           * throw new FrameworkException(e);
           * }
           */
          endPointsList.add(endPoint); //PM72835
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, "prepareOutboundConnection", endPoint);
          return endPoint;
      }