docs: public static void getXMLCMCLockAccessTimeout(long[] accessTimeouts, Method[] ejbMethods, Session sessionBean)
                      throws EJBConfigurationException
      {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "getXMLCMCLockAccessTimeout: " + sessionBean.getEjbClassName()
                           + " methods = " + Arrays.toString(ejbMethods)); //F743-7027.1
  
          // Create an array of ints that will hold the highest priority
          // style of <access-timeout> stanza configured for each method.  The priority
          // from lowest to highest is as follows:
          //
          //  1 - style one is the case where method name is "*" which indicates
          //      a access timeout value configured for all methods of the singleton SB.
          //  2 - style two is the case where method name is specified, but not the
          //      method parameters. This must override any style 1 configuration.
          //  3 - style three is the case where both method name and parameters are specified.
          //      This style is required by spec to override any style 1 or 2 configured for the bean.
  
          int numberOfEjbMethods = ejbMethods.length; //F743-7027CodRev
          int[] highestStyleOnMethod = new int[numberOfEjbMethods]; //F743-7027CodRev
  
          // Get the list of WCCM ConcurrentMethod objects configured for this
          // singleton session bean and its enterprise bean name. There is one ConcurrentMethod
          // object created for each <lock> stanza that exists in DD.
          String enterpriseBeanName = sessionBean.getName();
  
          //F00743.9717
          List<ConcurrentMethod> cmcMethodList = sessionBean.getConcurrentMethods();
  
          // For each of WCCM ConcurrentMethod objects, determine which EJB methods this
          // ConcurrentMethod object applies to and set the access timeout in the array
          // passed to this method by the caller.
          int numberOfCmcMethods = cmcMethodList.size(); //F743-7027CodRev
          for (int i = 0; i < numberOfCmcMethods; i++) //F743-7027CodRev
          {
              // Get the WCCM AccessTimeout, NamedMethod, and MethodParams objects
              // from the WCCM ConcurrentMethod object being processed in this iteration.
              //F00743.9717
              ConcurrentMethod cmcMethod = cmcMethodList.get(i);
              com.ibm.ws.javaee.dd.ejb.AccessTimeout accessTimeout = cmcMethod.getAccessTimeout();
              NamedMethod namedMethod = cmcMethod.getMethod();
              List<String> parms = namedMethod.getMethodParamList();
  
              // If access timeout configured via xml, then process it.
              if (accessTimeout != null)
              {
                  long timeout;
                  long value = accessTimeout.getTimeout();
                  String cmcMethodName = namedMethod.getMethodName().trim();
                  if (isTraceOn && tc.isDebugEnabled()) //F743-7027.1
                      Tr.debug(tc, cmcMethodName + " AccessTimeout value = " + value); //F743-7027.1
  
                  // Validate configured value and process it.
                  if (value < -1 || value == Long.MAX_VALUE)
                  {
                      // CNTR0192E: The access timeout value {0} is not valid for the enterprise
                      // bean {1} method of the {2} class. The value must be -1 or greater and
                      // less than java.lang.Long.MAX_VALUE (9223372036854775807).
                      String className = sessionBean.getEjbClassName();
                      Tr.error(tc, "SINGLETON_INVALID_ACCESS_TIMEOUT_CNTR0192E"
                               , new Object[] { value, cmcMethodName, className });
  
                      throw new EJBConfigurationException("CNTR0192E: The access timeout value " + value +
                                                          " is not valid for the enterprise bean " + cmcMethodName +
                                                          " method of the " + className +
                                                          " class. The value must be -1 or greater and less" +
                                                          " than java.lang.Long.MAX_VALUE (9223372036854775807).");
                  }
                  else if (value > 0)
                  {
                      //F00743.9717
                      // Map the access timeout unit into a milli-second unit.
                      TimeUnit tu = accessTimeout.getUnitValue();
                      timeout = TimeUnit.MILLISECONDS.convert(value, tu); // F743-6605.1
  
                      // begin F743-6605.1
                      if (timeout == Long.MAX_VALUE || timeout == Long.MIN_VALUE) {
                          // CNTR0196E: The conversion of access timeout value {0} from {1} time
                          // unit to milliseconds time unit resulted in an overflow.
                          Tr.error(tc, "SINGLETON_ACCESS_TIMEOUT_OVERFLOW_CNTR0196E", new Object[] { value, tu });
  
                          if (isTraceOn && tc.isEntryEnabled()) {
                              Tr.exit(tc, "convertToMilliSeconds: " + value + tu + " overflow");
                          }
  
                          throw new EJBConfigurationException("Conversion of access timeout value of " + value + " " + tu
                                                              + " to milliseconds resulted in overflow.");
                      }
                      // end F743-6605.1
                  }
                  else
                  {
                      timeout = value; // special value -1 or 0        F743-21028.5
                  }
  
                  // Determine if ConcurrentMethod is a style 1, 2, or 3 configuration and update
                  // access timeout array with the method access timeout value specified.
                  // The EJB spec is silent on whether more than one style 1 can be specified
                  // for the singleton session bean.  Our assumption is the last style 1 is used.
                  if (cmcMethodName.equals("*"))
                  {
                      // style type 1 -- update all entries in access timeout array that was not
                      // previously set by either a style 2 or 3 configuration.
                      for (int j = 0; j < numberOfEjbMethods; ++j) //F743-7027CodRev
                      {
                          Method m = ejbMethods[j];
                          if (highestStyleOnMethod[j] <= 1)
                          {
                              if (isTraceOn && tc.isDebugEnabled())
                                  trace(m, enterpriseBeanName,
                                        "Style 1 - replacing access timeout value of " + accessTimeouts[j] + " with " + timeout);
  
                              accessTimeouts[j] = timeout;
                              highestStyleOnMethod[j] = 1;
                          }
                      }
                  }
                  else if (parms == null)
                  {
                      // style type 2 -- update all entries in access timeout array for a method
                      // with matching method name that was not previously set by a style 3 configuration.
                      // The EJB spec is silent on whether more than one style 2 can be specified
                      // for the same method name.  Our assumption is the last style 2 is used.
                      for (int j = 0; j < numberOfEjbMethods; ++j) //F743-7027CodRev
                      {
                          if (highestStyleOnMethod[j] <= 2)
                          {
                              Method m = ejbMethods[j];
                              String methodName = m.getName(); //F743-7027.1
                              if (cmcMethodName.equals(methodName)) //F743-7027.1
                              {
                                  if (isTraceOn && tc.isDebugEnabled())
                                      trace(m, enterpriseBeanName,
                                            "Style 2 - replacing access timeout value of " + accessTimeouts[j] + " with " + timeout);
  
                                  accessTimeouts[j] = timeout;
                                  highestStyleOnMethod[j] = 2;
                              }
                          }
                      }
                  }
                  else
                  {
                      // style type 3 -- update only the access timeout array entry with a
                      // matching method signature. style 3 always overrides style 1 and 2.
                      // The EJB spec is silent on whether more than one style 3 can be specified
                      // for the same method.  Our assumption is the last style 3 is used.
                      Method style3Method = DDUtil.findMethod(namedMethod, ejbMethods);
                      if (style3Method != null) //F743-7027.1
                      {
                          for (int j = 0; j < numberOfEjbMethods; ++j) //F743-7027CodRev
                          {
                              Method m = ejbMethods[j];
                              if (style3Method.equals(m))
                              {
                                  if (isTraceOn && tc.isDebugEnabled())
                                      trace(m, enterpriseBeanName,
                                            "Style 3 - replacing access timeout value of " + accessTimeouts[j] + " with " + timeout);
  
                                  accessTimeouts[j] = timeout;
                                  highestStyleOnMethod[j] = 3;
  
                                  // break out of for loop since there can only be 1 EJB method that
                                  // matches the signature.
                                  break;
                              }
                          }
                      }
                  }
  
              } // end if ( accessTimeout != null )
          } // end for
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "getXMLCMCLockAccessTimeout: " + sessionBean.getEjbClassName(), Arrays.toString(accessTimeouts));
      }