0 Replies Latest reply on Aug 16, 2017 2:34 PM by rcoe67

    Is there a reason that when Jboss AS creates a valve, it does not invoke the lifecycle hooks?

    rcoe67

      Given an implementation of a custom valve that extends PicketLinkAuthenticator, which (eventually) extends ValveBase, I would expect that the various lifecycle hooks should be called when the custom valve is loaded.  According to the Javadoc for WebValve:

      protected void initInternal() throws LifecycleException

      Description copied from class: LifecycleMBeanBase

      Sub-classes wishing to perform additional initialization should override this method, ensuring that super.initInternal() is the first call in the overriding method.

      Overrides:
      initInternal in class LifecycleMBeanBase
      Throws:
      LifecycleException

       

      And the implementation looking like:

      package org.apache.catalina.valves;

      ...

      @Override

          protected void initInternal() throws LifecycleException {

              super.initInternal();

             

              containerLog = getContainer().getLogger();

          }

         

         

          /**

           * Start this component and implement the requirements

           * of {@link LifecycleBase#startInternal()}.

           *

           * @exception LifecycleException if this component detects a fatal error

           *  that prevents this component from being used

           */

          @Override

          protected synchronized void startInternal() throws LifecycleException {

             

              setState(LifecycleState.STARTING);

          }

      I expect that I could override initInternal in my valve to hook into the initialization phase.  However, when a custom valve is invoked by reflection, the lifecycle hooks are not invoked:

      CustomAuthenticator.<init>() line: 31

      NativeConstructorAccessorImpl.newInstance0(Constructor<?>, Object[]) line: not available [native method]

      NativeConstructorAccessorImpl.newInstance(Object[]) line: 62

      DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 45

      Constructor<T>.newInstance(Object...) line: 423

      Class<T>.newInstance() line: 442

      WebValve.createValve(String, ModuleClassLoader) line: 36

      WebValveService.start(StartContext) line: 90

      Is this an oversight of the WebValveService implementation or by design?  In either case, is there an available init hook that AS will call, so I can add behaviours to my custom module?