docs: private void initializeLifecycleInterceptorMethodMD(Method[] ejbMethods,
                                                          List<ContainerTransaction> transactionList,
                                                          List<ActivitySessionMethod> activitySessionList,
                                                          BeanMetaData bmd) throws EJBConfigurationException {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "initializeLifecycleInterceptorMethodMD", (Object[]) ejbMethods);
  
          final int numMethods = LifecycleInterceptorWrapper.NUM_METHODS;
          String[] methodNames = new String[numMethods];
          Class<?>[][] methodParamTypes = new Class<?>[numMethods][];
          String[] methodSignatures = new String[numMethods];
          TransactionAttribute[] transactionAttrs = new TransactionAttribute[numMethods];
          ActivitySessionAttribute[] activitySessionAttrs = new ActivitySessionAttribute[numMethods];
  
          for (int i = 0; i < numMethods; i++) {
              if (ejbMethods[i] == null) {
                  methodNames[i] = LifecycleInterceptorWrapper.METHOD_NAMES[i];
                  methodParamTypes[i] = LifecycleInterceptorWrapper.METHOD_PARAM_TYPES[i];
                  methodSignatures[i] = LifecycleInterceptorWrapper.METHOD_SIGNATURES[i];
                  // The spec states that in order to specify a transaction attribute
                  // for lifecycle interceptor methods, the method must be declared
                  // on the bean class.  Afterwards, it states that if a transaction
                  // attribute is not specified, then it must be REQUIRED.  This
                  // implies that if the bean class specifies a class-level
                  // transaction attribute of NOT_SUPPORT but does not specify a
                  // lifecycle interceptor method, we still use REQUIRED for the
                  // other lifecycle interceptors.
                  //
                  // By specifying the default transaction attribute here, we avoid
                  // NPE in getAnnotationCMTransactions by using null ejbMethods[i].
                  transactionAttrs[i] = bmd.type == InternalConstants.TYPE_STATEFUL_SESSION ? TransactionAttribute.TX_NOT_SUPPORTED : TransactionAttribute.TX_REQUIRED;
              } else {
                  methodNames[i] = ejbMethods[i].getName();
                  methodParamTypes[i] = ejbMethods[i].getParameterTypes();
                  methodSignatures[i] = MethodAttribUtils.methodSignatureOnly(ejbMethods[i]);
              }
          }
  
          initializeBeanMethodTransactionAttributes(false,
                                                    false,
                                                    MethodInterface.LIFECYCLE_INTERCEPTOR,
                                                    ejbMethods,
                                                    null,
                                                    null,
                                                    transactionList,
                                                    activitySessionList,
                                                    methodNames,
                                                    methodParamTypes,
                                                    methodSignatures,
                                                    transactionAttrs,
                                                    activitySessionAttrs,
                                                    bmd);
  
          EJBMethodInfoImpl[] methodInfos = new EJBMethodInfoImpl[numMethods];
  
          int slotSize = bmd.container.getEJBRuntime().getMetaDataSlotSize(MethodMetaData.class);
          for (int i = 0; i < numMethods; i++) {
              String methodSig = ejbMethods[i] == null ? methodNames[i] + MethodAttribUtils.METHOD_ARGLIST_SEP
                                                         + methodSignatures[i] : MethodAttribUtils.methodSignature(ejbMethods[i]);
              String jdiMethodSig = ejbMethods[i] == null ? LifecycleInterceptorWrapper.METHOD_JDI_SIGNATURES[i] : MethodAttribUtils.jdiMethodSignature(ejbMethods[i]);
  
              EJBMethodInfoImpl methodInfo = bmd.createEJBMethodInfoImpl(slotSize);
              methodInfo.initializeInstanceData(methodSig, methodNames[i], bmd, MethodInterface.LIFECYCLE_INTERCEPTOR, transactionAttrs[i], false);
              methodInfo.setMethodDescriptor(jdiMethodSig);
              methodInfo.setActivitySessionAttribute(activitySessionAttrs[i]);
              methodInfos[i] = methodInfo;
          }
  
          bmd.lifecycleInterceptorMethodInfos = methodInfos;
          bmd.lifecycleInterceptorMethodNames = methodNames;
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "initializeLifecycleInterceptorMethodMD");
      }