docs: static void validateInterfaceBasics(Class<?> homeInterface,
                                          Class<?> componentInterface,
                                          EJBWrapperType wrapperType,
                                          String beanName,
                                          int beanType)
                      throws EJBConfigurationException
      {
          // All home interfaces must be 'interfaces'!
          if (!Modifier.isInterface(homeInterface.getModifiers()))
          {
              // Log the error and throw meaningful exception.              d457128.2
              Tr.error(tc, "JIT_INTERFACE_NOT_INTERFACE_CNTR5011E",
                       new Object[] { beanName,
                                     homeInterface.getName() });
              throw new EJBConfigurationException("EJB home interface " + homeInterface.getName() +
                                                  " must be an interface : " + beanName);
          }
  
          // This may appear to be a good place to use a 'switch', but using
          // 'switch' with 'enum's performs very poorly, as it involves inner
          // classes, and repeated validation of the types.
  
          if (wrapperType == EJBWrapperType.LOCAL_HOME)
          {
              if (!(EJBLocalHome.class).isAssignableFrom(homeInterface))
              {
                  // Log the error and throw meaningful exception.           d457128.2
                  Tr.error(tc, "JIT_MUST_EXTEND_EJBLOCALHOME_CNTR5016E",
                           new Object[] { beanName,
                                         homeInterface.getName() });
                  throw new EJBConfigurationException("EJB local home interface " + homeInterface.getName() +
                                                      " must extend javax.ejb.EJBLocalHome : " + beanName);
              }
          }
          else if (wrapperType == EJBWrapperType.REMOTE_HOME)
          {
              if (!(EJBHome.class).isAssignableFrom(homeInterface))
              {
                  // Log the error and throw meaningful exception.           d457128.2
                  Tr.error(tc, "JIT_MUST_EXTEND_EJBHOME_CNTR5017E",
                           new Object[] { beanName,
                                         homeInterface.getName() });
                  throw new EJBConfigurationException("EJB remote home interface " + homeInterface.getName() +
                                                      " must extend javax.ejb.EJBHome : " + beanName);
              }
          }
  
          // For Session beans, at least one create method must be defined,
          // and it must return the component interface type.
          // Entity beans have no required home methods, though support
          // 'create', 'find' and 'home' methods, which will be validated
          // when the wrapper is actually generated.                         d461100
          if (beanType == InternalConstants.TYPE_STATELESS_SESSION ||
              beanType == InternalConstants.TYPE_STATEFUL_SESSION)
          {
              Class<?> returnType = null;
              Method[] methods = homeInterface.getMethods();
              for (Method method : methods)
              {
                  if (method.getName().startsWith("create"))
                  {
                      returnType = method.getReturnType();
  
                      if (returnType != componentInterface)
                      {
                          // Log the error and throw meaningful exception.     d457128.2
                          Tr.error(tc, "JIT_WRONG_CREATE_RETURN_CNTR5020E",
                                   new Object[] { beanName,
                                                 homeInterface.getName(),
                                                 method.getName(),
                                                 componentInterface.getName() });
                          throw new EJBConfigurationException("EJB home interface " + homeInterface.getName() +
                                                              " 'create' method must return the component interface : " +
                                                              method + " does not return " + componentInterface.getName() +
                                                              " : " + beanName);
                      }
  
                      boolean throwsCreateException = false;
                      Class<?>[] exceptions = method.getExceptionTypes();
  
                      for (Class<?> exception : exceptions)
                      {
                          if (CreateException.class == exception)
                          {
                              throwsCreateException = true;
                              break;
                          }
                      }
  
                      if (!throwsCreateException)
                      {
                          // Log the error and throw meaningful exception.     d457128.2
                          Tr.error(tc, "JIT_MISSING_CREATE_EX_CNTR5021E",
                                   new Object[] { beanName,
                                                 homeInterface.getName(),
                                                 method.getName() });
                          throw new EJBConfigurationException("EJB home method " + method +
                                                              " must throw javax.ejb.CreateException : " + beanName);
                      }
                  } // end startswith "create"
              }
  
              if (returnType == null)
              {
                  // Log the error and throw meaningful exception.           d457128.2
                  Tr.error(tc, "JIT_NO_CREATE_METHOD_CNTR5019E",
                           new Object[] { beanName,
                                         homeInterface.getName() });
                  throw new EJBConfigurationException("EJB home interface " + homeInterface.getName() +
                                                      " must define a 'create' method : " + beanName);
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
              Tr.debug(tc, "validateInterfaceBasics : successful : " +
                           homeInterface.getName());
      }