docs: public boolean reconstruct(RecoverableUnit log, RecoveryLog tranLog) throws SystemException // 169107
      {
          if (tc.isEntryEnabled())
              Tr.entry(tc, "reconstruct", new Object[] { log, tranLog });
  
          boolean result = true;
  
          // Were we imported from an RA?
          final RecoverableUnitSection raSection = log.lookupSection(TransactionImpl.RESOURCE_ADAPTER_SECTION);
          if (raSection != null) {
              // We have a section so we must have been imported from an RA
              // We are therefore a subordinate
              _subordinate = true;
  
              final byte[] logData = raSection.lastData(); // @249308A
  
              // We have encoded the id for the JCA recovery data from the partner log and
              // maybe the original JCA imported Xid
              if (logData.length > 12 + 8) // We must have formatId and lengths encoded  @249308A
              { // @249308A
                  _JCAXid = createJCAXid(logData, 8);
              } // @249308A
              else // no logged Xid, so use our own interposed one                           @249308A
              { // @249308A
                  _JCAXid = _xid; // @249308A
              } // @249308A
                // Set the JCA recovery data
              final long recoveryId = Util.getLongFromBytes(logData, 0); // @249308C
              final PartnerLogData pld = _failureScopeController.getRecoveryManager().getPartnerLogTable().findEntry(recoveryId);
  
              if (pld instanceof JCARecoveryData) {
                  _JCARecoveryData = (JCARecoveryData) pld;
                  _JCARecoveryData.incrementCount();
                  addDestroyCallback(this); // to decrement the count when we're done
              } else {
                  final SystemException e = new SystemException();
                  FFDCFilter.processException(e, "com.ibm.tx.jta.TransactionImpl.reconstruct", "632", this);
                  Tr.fatal(tc, "WTRN0000_ERR_INT_ERROR", new Object[] { "reconstruct", this.getClass().getName(), e });
                  throw e;
              }
          }
  
          final RecoveryManager recoveryManager = _failureScopeController.getRecoveryManager();
  
          // Use the result of the TransactionState reconstruction to decide whether
          // to continue with recovery of this transaction.
          _status = createState(this);
          final int state = _status.reconstruct(log);
  
          if (state == TransactionState.STATE_NONE ||
              state == TransactionState.STATE_COMMITTED ||
              state == TransactionState.STATE_ROLLED_BACK) {
              //
              // If the transaction is completed, then
              // ensure that the log record is discarded.
              //
              result = false;
          } else {
              // Need to see if we are a subordinate or a root.  We may be a subordinate created
              // either by a standard Corba interop protocol, in which case the log will have a
              // reference to the superior recovery coordinator (IOR) logged, or we may
              // have been created by the WS JTA2 private interop protocol, in which case the log
              // will have a reference to the superior global WSCoordinator logged.  The latter is
              // logged as a pointer to a partner log entry and the partner log entry holds the IOR.
              reconstructCoordinators(log);
  
              // Now handle the participants
              getResources().reconstruct(recoveryManager, log);
  
              // If we are a subordinate and the state is heuristic - prolongFinish until we get a forget
              if (_subordinate && (state == TransactionState.STATE_HEURISTIC_ON_COMMIT ||
                                   state == TransactionState.STATE_HEURISTIC_ON_ROLLBACK)) {
                  prolongFinish();
              }
  
              // Now we have successfully built the TI, add it to the LocalTID table
              // and register with the FSC.
              _localTID = LocalTIDTable.getLocalTID(this);
  
              // Let the failure scope controller know about this transaction so that it can
              // examine all its associated transaction when its asked to shutdown (either at
              // server shutdown or peer recovery termination)
              _failureScopeController.registerTransaction(this, true);
  
              _inRecovery = true;
          }
  
          // Set up instance variables now all is complete.
          _logUnit = log;
          _tranLog = tranLog;
  
          if (tc.isEntryEnabled())
              Tr.exit(tc, "reconstruct", new Object[] { result, _subordinate });
          return result;
      }