docs: public static void validateAroundSignature(InterceptorMethodKind kind, Method m, J2EEName name)
                      throws EJBConfigurationException
      {
  
          // Get the modifers for the interceptor method and verify that the
          // method is neither final nor static as required by EJB specification.
          int mod = m.getModifiers();
          if (Modifier.isFinal(mod) || Modifier.isStatic(mod))
          {
              // CNTR0229E: The {0} interceptor method must not be declared as final or static.
              String method = m.toGenericString();
              Tr.error(tc, "INVALID_INTERCEPTOR_METHOD_MODIFIER_CNTR0229E", new Object[] { method });
              throw new EJBConfigurationException(kind.getXMLElementName() + " interceptor \"" + method
                                                  + "\" must not be declared as final or static.");
          }
  
          // Verify AroundInvoke has 1 parameter of type InvocationContext.
          Class<?>[] parmTypes = m.getParameterTypes();
          if ((parmTypes.length == 1) && (parmTypes[0].equals(InvocationContext.class)))
          {
              // Has correct signature of 1 parameter of type InvocationContext
          }
          else
          {
              String method = m.toGenericString();
              Tr.error(tc, "INVALID_AROUND_INVOKE_SIGNATURE_CNTR0230E", new Object[] { method, kind.getXMLElementName() }); // F743-17763.1
              throw new EJBConfigurationException(kind.getXMLElementName() + " interceptor \"" + method
                                                  + "\" must have a single parameter of type javax.interceptors.InvocationContext.");
          }
  
          // Verify return type.
          Class<?> returnType = m.getReturnType();
  
          // F743-17763.1 - The spec requires that around interceptor methods have
          // exactly Object as the return type.  The original AroundInvoke check
          // was not as strict, but we keep it for compatibility with previous
          // releases.
          if (returnType != Object.class)
          {
              boolean compatiblyValid = kind == InterceptorMethodKind.AROUND_INVOKE &&
                                        Object.class.isAssignableFrom(returnType); // d668039
              if (!compatiblyValid || isValidationLoggable())
              {
                  String method = m.toGenericString();
                  Tr.error(tc, "INVALID_AROUND_INVOKE_SIGNATURE_CNTR0230E", new Object[] { method, kind.getXMLElementName() }); // F743-17763.1
                  if (!compatiblyValid || isValidationFailable()) // d668039
                  {
                      throw new EJBConfigurationException(kind.getXMLElementName() + " interceptor \"" + method
                                                          + "\" must have a return value of type java.lang.Object.");
                  }
              }
          }
  
          // Per the EJB 3.2 spec, "Note: An around-invoke interceptor method may
          // be declared to throw any checked exceptions that the associated
          // target method allows within its throws clause. It may be declared to
          // throw the java.lang.Exception if it interposes on several methods
          // that can throw unrelated checked exceptions."
      }