docs: static void validateEjbClass(Class<?> ejbClass,
                                   String beanName,
                                   int beanType)
                      throws EJBConfigurationException
      {
          int modifiers = ejbClass.getModifiers();
  
          if (!Modifier.isPublic(modifiers))
          {
              // Log the error and throw meaningful exception.              d457128.2
              Tr.error(tc, "JIT_NON_PUBLIC_CLASS_CNTR5003E",
                       new Object[] { beanName,
                                     ejbClass.getName() });
              throw new EJBConfigurationException("EJB class " + ejbClass.getName() +
                                                  " must be defined as public : " + beanName);
          }
  
          if (Modifier.isFinal(modifiers))
          {
              // Log the error and throw meaningful exception.              d457128.2
              Tr.error(tc, "JIT_INVALID_FINAL_CLASS_CNTR5004E",
                       new Object[] { beanName,
                                     ejbClass.getName() });
              throw new EJBConfigurationException("EJB class " + ejbClass.getName() +
                                                  " must not be defined as final : " + beanName);
          }
  
          // CMP 2.x beans must be abstract, whereas CMP 1.x beans must NOT be
          // abstract, so just skipping CMP beans entirely.
          if (beanType != InternalConstants.TYPE_CONTAINER_MANAGED_ENTITY)
          {
              if (Modifier.isAbstract(modifiers))
              {
                  // Log the error and throw meaningful exception.           d457128.2
                  Tr.error(tc, "JIT_INVALID_ABSTRACT_CLASS_CNTR5005E",
                           new Object[] { beanName,
                                         ejbClass.getName() });
                  throw new EJBConfigurationException("EJB class " + ejbClass.getName() +
                                                      " must not be defined as abstract : " + beanName);
              }
          }
  
          if (ejbClass.getEnclosingClass() != null)
          {
              // Log the error and throw meaningful exception.              d457128.2
              Tr.error(tc, "JIT_NOT_TOP_LEVEL_CLASS_CNTR5006E",
                       new Object[] { beanName,
                                     ejbClass.getName() });
              throw new EJBConfigurationException("EJB class " + ejbClass.getName() +
                                                  " must be a top level class : " + beanName);
          }
  
          try
          {
              ejbClass.getConstructor(NO_PARAMS);
          } catch (Throwable ex)
          {
              // FFDC is not needed, as a meaningful exception is being thrown.
              // FFDCFilter.processException(ejbex, CLASS_NAME + ".validateEjbClass", "653");
              // Log the error and throw meaningful exception.              d457128.2
              Tr.error(tc, "JIT_NO_DEFAULT_CTOR_CNTR5007E",
                       new Object[] { beanName,
                                     ejbClass.getName() });
              throw new EJBConfigurationException("EJB class " + ejbClass.getName() +
                                                  " must have a public constructor that takes no parameters : " +
                                                  beanName, ex);
          }
  
          try
          {
              ejbClass.getDeclaredMethod("finalize", NO_PARAMS);
  
              // Log the error and throw meaningful exception.              d457128.2
              Tr.error(tc, "JIT_INVALID_FINALIZE_MTHD_CNTR5008E",
                       new Object[] { beanName,
                                     ejbClass.getName() });
              throw new EJBConfigurationException("EJB class " + ejbClass.getName() +
                                                  " must not define the finalize() method : " +
                                                  beanName);
          } catch (Throwable ex)
          {
              // FFDC is not needed... finalize method should NOT be found.
              // FFDCFilter.processException(ejbex, CLASS_NAME + ".validateEjbClass", "667");
          }
  
          if (beanType == InternalConstants.TYPE_BEAN_MANAGED_ENTITY ||
              beanType == InternalConstants.TYPE_CONTAINER_MANAGED_ENTITY)
          {
              if (!(EntityBean.class).isAssignableFrom(ejbClass))
              {
                  // Log the error and throw meaningful exception.           d457128.2
                  Tr.error(tc, "JIT_MISSING_ENTITYBEAN_CNTR5009E",
                           new Object[] { beanName,
                                         ejbClass.getName() });
                  throw new EJBConfigurationException("EJB Entity class " + ejbClass.getName() +
                                                      " must implement javax.ejb.EntityBean : " + beanName);
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
              Tr.debug(tc, "validateEjbClass : successful : " +
                           ejbClass.getName());
      }