docs: @Override
      public void reconstruct(RecoveryManager rm, RecoverableUnit log) throws SystemException
      {
          final boolean traceOn = TraceComponent.isAnyTracingEnabled();
  
          if (traceOn && tc.isEntryEnabled())
              Tr.entry(tc, "reconstruct", new Object[] { rm, log });
          RecoveryManager recoveryManager = rm;
  
          _retryCompletion = true;
  
          reconstructHeuristics(log);
  
          // Read in XAResources and Corba resources (subordinate coords) from the log
          // We save the sections and logUnit although they are never needed again..
  
  //        // Get section id for Corba Resources registered as part of transaction
  //        _logSection = log.lookupSection(TransactionImpl.CORBA_RESOURCE_SECTION);
  //        if (_logSection != null)   // We have some resources to recover
  //        {
  //            LogCursor logData = null;
  //            try
  //            {
  //                logData = _logSection.data();
  //                while (logData.hasNext())
  //                {
  //                    final byte[] data = (byte[])logData.next();
  //                    try
  //                    {
  //                        final CORBAResourceWrapper crw = new CORBAResourceWrapper(data);
  //                        crw.setResourceStatus(StatefulResource.PREPARED);
  //                        _resourceObjects.add(crw);
  //                    }
  //                    catch (Throwable exc)
  //                    {
  //                        FFDCFilter.processException(exc, "com.ibm.ws.tx.jta.RegisteredResources.reconstruct", "794", this);
  //                        Tr.error(tc, "WTRN0045_CANNOT_RECOVER_RESOURCE",
  //                             new Object[] {com.ibm.ejs.util.Util.toHexString(data), exc});
  //                        throw exc;
  //                    }
  //                }
  //                logData.close();
  //            }
  //            catch (Throwable exc)
  //            {
  //                FFDCFilter.processException(exc, "com.ibm.ws.tx.jta.RegisteredResources.reconstruct", "804", this);
  //                Tr.fatal(tc, "WTRN0000_ERR_INT_ERROR", new Object[]{"reconstruct", "com.ibm.ws.tx.jta.RegisteredResources", exc});
  //                if (logData != null) logData.close();
  //                if (traceOn && tc.isEventEnabled()) Tr.event(tc, "Exception raised reconstructing corba resource");
  //                if (traceOn && tc.isEntryEnabled()) Tr.exit(tc, "reconstruct");                
  //                throw (SystemException)new SystemException(exc.toString()).initCause(exc);
  //            }
  //
  //            // If we recovered at least one remote resource, then create a recovery coordinator
  //            // so that subordinates can perform replay_completion.  We only need to create one
  //            // per coordinator/transaction as it is keyed off the globalTID.  We also do not need
  //            // to save a reference as it will add itself to the Transaction's sync list and delete
  //            // itself at end of transaction.
  //            if (_resourceObjects.size() > 0)
  //            {
  //                new RecoveryCoordinatorImpl(recoveryManager.getFailureScopeController(), (TransactionImpl)_transaction).object();
  //            }
  //        }
  
          // Get section id for XAResources registered as part of transaction
          _xalogSection = log.lookupSection(TransactionImpl.XARESOURCE_SECTION);
          if (_xalogSection != null) // We have some resources to recover
          {
              final byte[] tid = _transaction.getXidImpl().toBytes();
  
              LogCursor logData = null;
              try
              {
                  logData = _xalogSection.data();
                  while (logData.hasNext())
                  {
                      final byte[] data = (byte[]) logData.next();
                      try
                      {
                          final JTAXAResourceImpl res = new JTAXAResourceImpl(recoveryManager.getPartnerLogTable(), tid, data);
                          res.setResourceStatus(StatefulResource.PREPARED);
                          _resourceObjects.add(res);
                          if (res.getPriority() != JTAResource.DEFAULT_COMMIT_PRIORITY)
                              _gotPriorityResourcesEnlisted = true;
                      } catch (Throwable exc)
                      {
                          FFDCFilter.processException(exc, "com.ibm.tx.jta.embeddable.impl.EmbeddableRegisteredResources.reconstruct", "843", this);
                          Tr.error(tc, "WTRN0045_CANNOT_RECOVER_RESOURCE",
                                   new Object[] { com.ibm.ejs.util.Util.toHexString(data), exc });
                          throw exc;
                      }
                  }
                  logData.close();
              } catch (Throwable exc)
              {
                  FFDCFilter.processException(exc, "com.ibm.tx.jta.embeddable.impl.EmbeddableRegisteredResources.reconstruct", "853", this);
                  Tr.fatal(tc, "WTRN0000_ERR_INT_ERROR", new Object[] { "reconstruct", "com.ibm.ws.tx.jta.RegisteredResources", exc });
                  if (logData != null)
                      logData.close();
                  if (traceOn && tc.isEventEnabled())
                      Tr.event(tc, "Exception raised reconstructing XA resource");
                  if (traceOn && tc.isEntryEnabled())
                      Tr.exit(tc, "reconstruct");
                  throw (SystemException) new SystemException(exc.toString()).initCause(exc);
              }
          }
  //
  //        _wscResourceSection = log.lookupSection(TransactionImpl.RESOURCE_WSC_SECTION);
  //        final int numResources = _resourceObjects.size();
  //
  //        if (_wscResourceSection != null)
  //        {
  //            final byte [] tid = _transaction.getXid().getGlobalTransactionId();
  //            LogCursor logData = null;
  //
  //            try
  //            {
  //                logData = _wscResourceSection.data();
  //                while (logData.hasNext())
  //                {
  //                    final byte[] data = (byte[])logData.next();
  //
  //                    try
  //                    {
  //                        final WSCoordinatorWrapper wscw = new WSCoordinatorWrapper(recoveryManager, tid, data);
  //                                wscw.setResourceStatus(StatefulResource.PREPARED);
  //                        _resourceObjects.add(wscw);
  //                    }
  //                    catch (Throwable exc)
  //                    {
  //                        FFDCFilter.processException(exc, "com.ibm.ws.tx.jta.RegisteredResources.reconstruct", "884", this);
  //                        Tr.error(tc, "WTRN0045_CANNOT_RECOVER_RESOURCE",
  //                             new Object[] {com.ibm.ejs.util.Util.toHexString(data), exc});
  //                        throw exc;
  //                    }
  //                }
  //                logData.close();
  //            }
  //            catch (Throwable exc)
  //            {
  //                FFDCFilter.processException(exc, "com.ibm.ws.tx.jta.RegisteredResources.reconstruct", "894", this);
  //                Tr.fatal(tc, "WTRN0000_ERR_INT_ERROR", new Object[]{"reconstruct", "com.ibm.ws.tx.jta.RegisteredResources", exc});
  //                if (logData != null) logData.close();
  //                if (traceOn && tc.isEntryEnabled()) Tr.exit(tc, "reconstruct");
  //                throw (SystemException)new SystemException(exc.toString()).initCause(exc);
  //            }
  //
  //            // If we recovered at least one remote resource, then create a recovery coordinator
  //            // so that subordinates can perform replay_completion.  We only need to create one
  //            // per coordinator/transaction as it is keyed off the globalTID.
  //            if (_resourceObjects.size() > numResources)
  //            {
  //                final WSCoordinatorImpl wsCoordinator = (WSCoordinatorImpl)recoveryManager.getFailureScopeController().getWSCoordinator();
  //                final TransactionWrapper transactionWrapper = wsCoordinator.lookupTransactionWrapper(tid);
  //                if (transactionWrapper == null)
  //                {
  //                    // We are either a superior or a downstream server imported via Corba
  //                    // and need to create a Wrapper for replay_completion
  //                    wsCoordinator.storeTransactionWrapper(tid, new TransactionWrapper((TransactionImpl)_transaction));
  //                }
  //            }
  //        }
  
          // Get section id for WSATAsyncResources registered as part of transaction
          _wsatAsyncSection = log.lookupSection(TransactionImpl.WSAT_ASYNC_RESOURCE_SECTION);
          if (_wsatAsyncSection != null) { // We have some resources to recover
  
              // Create wrapper
              new TransactionWrapper((EmbeddableTransactionImpl) _transaction);
  
              if (traceOn && tc.isDebugEnabled())
                  Tr.debug(tc, "reconstructing async resources");
              LogCursor logData = null;
              WSATParticipantWrapper wrapper = null;
              _asyncResourceObjects = new ArrayList<JTAAsyncResourceBase>();
              try {
                  logData = _wsatAsyncSection.data();
                  while (logData.hasNext()) {
                      final byte[] data = (byte[]) logData.next();
                      try {
                          wrapper = new WSATParticipantWrapper(data);
  
                          wrapper.setResourceStatus(StatefulResource.PREPARED);
                          _asyncResourceObjects.add(wrapper);
                      } catch (Throwable exc) {
                          FFDCFilter.processException(exc, "com.ibm.tx.jta.embeddable.impl.EmbeddableRegisteredResources.reconstruct", "943", this);
                          Tr.error(tc, "WTRN0045_CANNOT_RECOVER_RESOURCE", new java.lang.Object[] { data, exc });
                          throw exc;
                      }
                  }
                  logData.close();
              } catch (Throwable exc) {
                  FFDCFilter.processException(exc, "com.ibm.tx.jta.embeddable.impl.EmbeddableRegisteredResources.reconstruct", "952", this);
                  Tr.fatal(tc, "WTRN0000_ERR_INT_ERROR", new Object[] { "reconstruct", "com.ibm.ws.tx.jta.RegisteredResources", exc });
                  if (logData != null)
                      logData.close();
                  if (traceOn && tc.isEventEnabled())
                      Tr.event(tc, "Exception raised reconstructing WSAT Async resource");
                  throw (SystemException) new SystemException(exc.toString()).initCause(exc);
              }
          }
  
          _logUnit = log;
  
          if (traceOn && tc.isEntryEnabled())
              Tr.exit(tc, "reconstruct");
      }