docs: public void validateMergedMetaData(BeanMetaData bmd) throws EJBConfigurationException {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
  
          if (isTraceOn && tc.isEntryEnabled()) {
              Tr.entry(tc, "validateMergedMetaData for bean: " + bmd.enterpriseBeanName + " ");
          }
  
          // Validation #1:
          // Beans must be configured with at least one of the valid interface types or they can never
          // be called to do anything useful.  Also, some interface types are not allowed on some bean types.
          // Note that some of these errors may actually get caught by our xml parser, or be stopped
          // because the current wccm model does not allow certain error situations to occur.   However, the code
          // still covers the complete picture of allowed / disallowed interfaces and should be left this way
          // in case we change parsers or configuration data sources in the future.
  
          // Load up all the possible bean and home interfaces  Note that several of the validation sections below
          // share bits of this data.
          String localHomeInterface = bmd.ivInitData.ivLocalHomeInterfaceName;
          String localComponentInterface = bmd.ivInitData.ivLocalInterfaceName;
          String remoteHomeInterface = bmd.ivInitData.ivRemoteHomeInterfaceName;
          String remoteComponentInterface = bmd.ivInitData.ivRemoteInterfaceName;
          String[] localBusinessInterfaces = bmd.ivInitData.ivLocalBusinessInterfaceNames;
          String[] remoteBusinessInterfaces = bmd.ivInitData.ivRemoteBusinessInterfaceNames;
          String messageListenerInterface = bmd.ivInitData.ivMessageListenerInterfaceName;
  
          if (bmd.type == InternalConstants.TYPE_SINGLETON_SESSION) {
              // F743-20281.1 - Component views are not supported for singletons.
              if (remoteHomeInterface != null || localHomeInterface != null) {
                  Tr.error(tc, "INVALID_SINGLETON_COMPONENT_INTERFACE_SPECIFIED_CNTR0320E",
                           new Object[] { bmd.enterpriseBeanName, bmd._moduleMetaData.ivName });
                  throw new EJBConfigurationException("The " + bmd.enterpriseBeanName + " singleton session bean in the " +
                                                      bmd._moduleMetaData.ivName + " module has an interface configured for a component view.");
              }
  
              if (localHomeInterface == null &&
                  remoteHomeInterface == null &&
                  localBusinessInterfaces == null &&
                  remoteBusinessInterfaces == null &&
                  bmd.ivHasWebServiceEndpoint == false && // F743-1756CodRv
                  bmd.ivLocalBean == false) {
  
                  Tr.error(tc, "REQUIRED_INTERFACE_MISSING_CNTR0131E",
                           new Object[] { bmd.enterpriseBeanName, bmd._moduleMetaData.ivName });
  
                  // F743-561 - Unconditionally throw, since a singleton did not exist prior to EJB 3.1.
                  throw new EJBConfigurationException("The " + bmd.enterpriseBeanName + " bean in the " +
                                                      bmd._moduleMetaData.ivName + " module does not have" +
                                                      " any configured productive interfaces.");
              }
  
          }
  
          // Statlesss and Singleton session beans must have a component, business, or webservice endpoint interface, but
          // Stateless session beans may not have a message listener interfaces.      // F743-508
          if (bmd.type == InternalConstants.TYPE_SINGLETON_SESSION ||
              bmd.type == InternalConstants.TYPE_STATELESS_SESSION) {
              // Since a SLSB at EJB 3.0 or above will always have ivHasWebServiceEndpoint==true,
              // don't need to check for lack of valid interface types.
  
              if (messageListenerInterface != null) {
                  Tr.error(tc, "INVALID_SESSION_BEAN_INTERFACE_SPECIFIED_CNTR0132E",
                           new Object[] { bmd.enterpriseBeanName, bmd._moduleMetaData.ivName });
                  if (bmd.ivModuleVersion >= BeanMetaData.J2EE_EJB_VERSION_3_0) {
                      throw new EJBConfigurationException("The " + bmd.enterpriseBeanName + " session bean in the " + bmd._moduleMetaData.ivName
                                                          + " module has an interface configured for a message listener.");
                  }
              }
          }
  
          // Stateful session beans must have a component, or business interfaces, but may not have
          // webservice endpoint or message listener interfaces.
          else if (bmd.type == InternalConstants.TYPE_STATEFUL_SESSION) {
              if (localHomeInterface == null &&
                  remoteHomeInterface == null &&
                  localBusinessInterfaces == null &&
                  remoteBusinessInterfaces == null &&
                  bmd.ivLocalBean == false) {
                  Tr.error(tc, "REQUIRED_INTERFACE_MISSING_CNTR0131E",
                           new Object[] { bmd.enterpriseBeanName, bmd._moduleMetaData.ivName });
                  if (bmd.ivModuleVersion >= BeanMetaData.J2EE_EJB_VERSION_3_0) {
                      throw new EJBConfigurationException("The " + bmd.enterpriseBeanName + " bean in the " + bmd._moduleMetaData.ivName
                                                          + " module does not have any configured productive interfaces.");
                  }
              }
  
              if (messageListenerInterface != null ||
                  bmd.ivHasWebServiceEndpoint == true) {
                  Tr.error(tc, "INVALID_SESSION_BEAN_INTERFACE_SPECIFIED_CNTR0132E",
                           new Object[] { bmd.enterpriseBeanName, bmd._moduleMetaData.ivName });
                  if (bmd.ivModuleVersion >= BeanMetaData.J2EE_EJB_VERSION_3_0) {
                      throw new EJBConfigurationException("The " + bmd.enterpriseBeanName + " session bean in the " + bmd._moduleMetaData.ivName
                                                          + " module has an interface configured for a message listener or Web service endpoint.");
                  }
              }
          }
  
          // Entity beans must have a component interfaces, but may not have any of the other
          // interface types
          else if (bmd.type == InternalConstants.TYPE_BEAN_MANAGED_ENTITY ||
                   bmd.type == InternalConstants.TYPE_CONTAINER_MANAGED_ENTITY) {
              if ((localHomeInterface == null) && (remoteHomeInterface == null)) {
                  Tr.error(tc, "REQUIRED_INTERFACE_MISSING_CNTR0131E",
                           new Object[] { bmd.enterpriseBeanName, bmd._moduleMetaData.ivName });
                  if (bmd.ivModuleVersion >= BeanMetaData.J2EE_EJB_VERSION_3_0) {
                      throw new EJBConfigurationException("The " + bmd.enterpriseBeanName + " bean in the " + bmd._moduleMetaData.ivName
                                                          + " module does not have any configured productive interfaces.");
                  }
              }
  
              if (localBusinessInterfaces != null ||
                  remoteBusinessInterfaces != null ||
                  messageListenerInterface != null ||
                  bmd.ivHasWebServiceEndpoint == true || // F743-1756CodRv
                  bmd.ivLocalBean == true) {
                  Tr.error(tc, "INVALID_ENTITY_BEAN_INTERFACE_SPECIFIED_CNTR0133E",
                           new Object[] { bmd.enterpriseBeanName, bmd._moduleMetaData.ivName });
                  if (bmd.ivModuleVersion >= BeanMetaData.J2EE_EJB_VERSION_3_0) {
                      throw new EJBConfigurationException("The " + bmd.enterpriseBeanName + " entity bean in the " + bmd._moduleMetaData.ivName
                                                          + " module has an interface configured for a business, message listener, or Web service endpoint.");
                  }
              }
          }
  
          // Managed beans may only have a name an no-interface view      F743-34301
          else if (bmd.type == InternalConstants.TYPE_MANAGED_BEAN) {
              // No merge metadata to validate... no xml representation
          }
  
          // Otherwise, this must be an MDB.  MDBs must have a message listener interface, but may
          // not have any of the other interface types, or a home.
          else {
              //d460602 - for pre-EJB3 modules we always default the message listener interface if none is provided.
              // Therefore,the following check is only needed for EJB3 or newer modules.
              if (messageListenerInterface == null &&
                  bmd.ivModuleVersion >= BeanMetaData.J2EE_EJB_VERSION_3_0) {
                  Tr.error(tc, "NO_MESSAGE_LISTENER_INTERFACE_CNTR0126E", // d659661.1
                           new Object[] { bmd.enterpriseBeanName });
                  throw new EJBConfigurationException("The " + bmd.enterpriseBeanName +
                                                      " message-driven bean (MDB) class does not define a" +
                                                      " message listener interface.");
              }
  
              if (localComponentInterface != null ||
                  remoteComponentInterface != null ||
                  localBusinessInterfaces != null ||
                  remoteBusinessInterfaces != null ||
                  bmd.ivHasWebServiceEndpoint == true || // F743-1756CodRv
                  localHomeInterface != null ||
                  remoteHomeInterface != null ||
                  bmd.ivLocalBean == true) {
                  Tr.error(tc, "INVALID_MDB_INTERFACE_SPECIFIED_CNTR0134E",
                           new Object[] { bmd.enterpriseBeanName, bmd._moduleMetaData.ivName });
                  if (bmd.ivModuleVersion >= BeanMetaData.J2EE_EJB_VERSION_3_0) {
                      throw new EJBConfigurationException("The " + bmd.enterpriseBeanName + " message driven bean in the " + bmd._moduleMetaData.ivName
                                                          + " module has an interface configured for a component, business, " +
                                                          "Web service endpoint, or home.");
                  }
              }
          }
  
          if (isTraceOn && tc.isEntryEnabled()) {
              Tr.exit(tc, "validateMergedMetaData");
          }
  
      }