code: protected void setXAResourceTransactionTimeout(JTAResource jtaRes, XARecoveryData recData, long expirationTime) {
          if (tc.isEntryEnabled())
              Tr.entry(tc, "setXAResourceTransactionTimeout", new Object[] { jtaRes, recData, new Date(expirationTime) });
  
          if (recData.propagateXAResourceTransactionTimeout()) {
              final int timeout = (int) Math.ceil(((double) (expirationTime - System.currentTimeMillis())) / (double) 1000);
              if (tc.isDebugEnabled())
                  Tr.debug(tc, "XAResource.setTransactionTimeout(" + timeout + ")");
  
              try {
                  final boolean result = jtaRes.XAResource().setTransactionTimeout(timeout);
                  if (tc.isEntryEnabled())
                      Tr.exit(tc, "setXAResourceTransactionTimeout", result);
              } catch (XAException e) {
                  FFDCFilter.processException(e, "com.ibm.tx.jta.RegisteredResources.setXAResourceTransactionTimeout", "710", this);
                  if (!recData.continuePropagatingXAResourceTimeout()) {
                      recData.disablePropagatingXAResourceTimeout();
                  }
              }
          } else {
              if (tc.isEntryEnabled())
                  Tr.exit(tc, "setXAResourceTransactionTimeout");
          }
      }
docs: If configured to do so, calculate the remaining time in the transaction from
  the given expiration time and send it to the XAResource via setTransactionTimeout().
  If this fails for any reason, we assume the RM does not support setTransactionTimeout()
  and we disable any further attempts (unless we've explicitly configured to continue)
  
  @param jtaRes
  @param recData