docs: @Override
      public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable environment) throws Exception {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "getObjectInstance", new Object[] { obj, name, nameCtx, environment });
          Object ret = null;
  
          if (obj instanceof Reference) {
              Reference ref = (Reference) obj;
              String clsName = ref.getClassName();
  
              if (clsName.equals(ConnectionFactory.class.getName())) {
                  ret = this.createConnectionFactory();
                  ((JmsConnectionFactory) ret).setReference(ref);
              }
  
              else if (clsName.equals(QueueConnectionFactory.class.getName())) {
                  ret = this.createQueueConnectionFactory();
                  ((JmsQueueConnectionFactory) ret).setReference(ref);
              }
  
              else if (clsName.equals(TopicConnectionFactory.class.getName())) {
                  ret = this.createTopicConnectionFactory();
                  ((JmsTopicConnectionFactory) ret).setReference(ref);
              }
  
              else if (clsName.equals(JmsQueueImpl.class.getName())) {
                  ret = new JmsQueueImpl(ref);
              }
  
              else if (clsName.equals(JmsTopicImpl.class.getName())) {
                  ret = new JmsTopicImpl(ref);
              }
  
              else {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(tc, "class name is " + clsName);
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, "getObjectInstance", ret);
          return ret;
      }