docs: protected boolean enlist(BeanO beanO)
                      throws TransactionRolledbackException
      {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled(); // d532639.2
  
          if (isTraceOn && tc.isEntryEnabled()) // d144064
              Tr.entry(tc, "enlist"
                       , new Object[] { Boolean.valueOf(globalTransaction), this, beanO }
                              ); //123293
  
          ensureActive();
  
          if (ivBeanOsEnlistedInTx == false) // d532639.2
          {
              initialize_beanO_vectors(); // d111555
          }
  
          boolean wasEnlisted = false;//d132828 avoid multiple returns
  
          //synchronized (beanOs) {  //d173022.2
  
          BeanO oldBeanO = beanOs.put(beanO.beanId, beanO);
  
          //d115597 begins
  
          if (oldBeanO == null) {
  
              // d140003.22 -- If CMP 2.0 bean, add bean to CMP 2.0 list for later use
              // Except, don't add ReadOnly/Interval beans to CMP 2.0 list; they
              // never need to be included in pre-find flush.               LI3408
              BeanMetaData bmd = beanO.home.beanMetaData;
              if (bmd.cmpVersion == InternalConstants.CMP_VERSION_2_X &&
                  bmd.ivCacheReloadType == BeanMetaData.CACHE_RELOAD_NONE)
              {
                  ArrayList<BeanO> bundle = homesForPMManagedBeans.get(beanO.home);
  
                  if (bundle == null) { // here, value of null indicates no bundle in map
                      bundle = new ArrayList<BeanO>();
                      homesForPMManagedBeans.put(beanO.home, bundle);
                  }
  
                  bundle.add(beanO);
                  if (isTraceOn && tc.isDebugEnabled())
                      Tr.debug(tc, "Added this BeanO to CMP20 structure");
              }
  
              afterList.add(beanO);//d115597 if new BeanO add to afterList
              if (origLock == false) {
                  beanOList.add(beanO);//d115597 have not started beforeCompletion
  
              } else {
                  setupTempLists();//d132828
                  if (isTraceOn && tc.isDebugEnabled())
                      Tr.debug(tc, "sec enlist new : " + beanO);
  
                  currentBeanOs.put(beanO.beanId, beanO);//d115597 new bean added once beforeCompletion called
                  tempList.add(beanO); //d115597 add to the tempList
              }
  
              wasEnlisted = true;//d132828 avoid multiple returns
  
          }//new beanO
          else {
              // d115597 this bean is already in the tran, need to determine if this is a reenlistment
              if (origLock == true) {
                  // d115597 this path is that beforeCompletion has started
                  setupTempLists(); //d132828
  
                  if (isTraceOn && tc.isDebugEnabled())
                      Tr.debug(tc, "enlist in beforeCompletion: putting in list");
  
                  BeanO obO = currentBeanOs.put(beanO.beanId, beanO);
  
                  if (obO == null) {
                      if (isTraceOn && tc.isDebugEnabled())
                          Tr.debug(tc, "Secondary enlist old : " + beanO);
  
                      // d115597 is this in the current list if not add?
                      tempList.add(beanO);
                  }// d115597 not in current tran list
  
                  // d115597 should return false
              }// d115597 not in original list of beanos (2nd or greater run through
  
          }// old beanO
           //d115597 end
           //}//synch end
  
          if (isTraceOn && tc.isEntryEnabled()) // d144064
              Tr.exit(tc, "enlist : " + wasEnlisted); // d144064
  
          return wasEnlisted;// d132828 avoid multiple returns
      }