You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2002/08/06 08:24:17 UTC

cvs commit: jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/meta/verifier ComponentVerifier.java Resources.properties

mcconnell    2002/08/05 23:24:16

  Modified:    assembly/src/etc kernel.xml
               assembly/src/java/org/apache/excalibur/merlin/model/verifier
                        MetaDataVerifier.java Resources.properties
               assembly/src/java/org/apache/excalibur/meta/verifier
                        ComponentVerifier.java Resources.properties
  Log:
  Addition of lifecycle stage verification of a type.
  
  Revision  Changes    Path
  1.25      +4 -0      jakarta-avalon-excalibur/assembly/src/etc/kernel.xml
  
  Index: kernel.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/etc/kernel.xml,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- kernel.xml	5 Aug 2002 12:39:37 -0000	1.24
  +++ kernel.xml	6 Aug 2002 06:24:16 -0000	1.25
  @@ -123,6 +123,10 @@
   
        <container name="sub" class="org.apache.excalibur.playground.CustomContainer">
   
  +       <categories priority="INFO">
  +         <category priority="WARN"  name="loader" />
  +       </categories>
  +
          <container name="demo">
   
            <categories priority="INFO">
  
  
  
  1.4       +45 -2     jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/model/verifier/MetaDataVerifier.java
  
  Index: MetaDataVerifier.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/model/verifier/MetaDataVerifier.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- MetaDataVerifier.java	29 Jul 2002 06:14:33 -0000	1.3
  +++ MetaDataVerifier.java	6 Aug 2002 06:24:16 -0000	1.4
  @@ -19,6 +19,7 @@
   import org.apache.excalibur.meta.info.ContextDescriptor;
   import org.apache.excalibur.meta.info.ServiceDescriptor;
   import org.apache.excalibur.meta.info.ReferenceDescriptor;
  +import org.apache.excalibur.meta.info.PhaseDescriptor;
   import org.apache.excalibur.meta.verifier.VerifyException;
   import org.apache.excalibur.meta.verifier.ComponentVerifier;
   
  @@ -111,8 +112,12 @@
               getServiceClasses( name,
                                  component.getType().getServices(),
                                  clazz.getClassLoader() );
  +        final Class[] phases =
  +            getPhaseClasses( name,
  +                               component.getType().getPhases(),
  +                               clazz.getClassLoader() );
   
  -        m_verifier.verifyComponent( name, clazz, interfaces );
  +        m_verifier.verifyType( name, clazz, interfaces, phases );
   
           verifyDependencyPresence( component, clazz );
           verifyContextPresence( component, clazz );
  @@ -208,6 +213,44 @@
               {
                   final String message =
                       REZ.getString( "metadata.bad-service-class.error",
  +                                   name,
  +                                   classname,
  +                                   t.toString() );
  +                throw new VerifyException( message, t );
  +            }
  +        }
  +
  +        return classes;
  +    }
  +
  +    /**
  +     * Retrieve an array of Classes for all the phases that a Component
  +     * is depenent on. 
  +     *
  +     * @param name the name of component
  +     * @param services the services the component offers
  +     * @param classLoader the classLoader
  +     * @return an array of Classes for all the services
  +     * @throws VerifyException if an error occurs
  +     */
  +    protected Class[] getPhaseClasses( final String name,
  +                                         final PhaseDescriptor[] phases,
  +                                         final ClassLoader classLoader )
  +        throws VerifyException
  +    {
  +        final Class[] classes = new Class[ phases.length ];
  +        for( int i = 0; i < phases.length; i++ )
  +        {
  +            final ReferenceDescriptor service = phases[ i ].getReference();
  +            final String classname = service.getClassname();
  +            try
  +            {
  +                classes[ i ] = classLoader.loadClass( classname );
  +            }
  +            catch( final Throwable t )
  +            {
  +                final String message =
  +                    REZ.getString( "metadata.bad-phase-class.error",
                                      name,
                                      classname,
                                      t.toString() );
  
  
  
  1.2       +1 -0      jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/model/verifier/Resources.properties
  
  Index: Resources.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/model/verifier/Resources.properties,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Resources.properties	12 Jul 2002 12:04:56 -0000	1.1
  +++ Resources.properties	6 Aug 2002 06:24:16 -0000	1.2
  @@ -18,6 +18,7 @@
   
   #MetaData Verifier
   metadata.bad-service-class.error=Unable to load service class "{1}" for Component named "{0}". (Reason: {2}).
  +metadata.bad-phase-class.error=Unable to load phase class "{1}" for Component named "{0}". (Reason: {2}).
   metadata.nodeclare-deps.error=Component named "{0}" of type "{1}" is Composable or Serviceable but does not declare any dependencies.
   metadata.declare-uneeded-deps.error=Component named "{0}" of type "{1}" is not Composable or Serviceable but declares dependencies.
   metadata.declare-uneeded-entrys.error=Component named "{0}" of type "{1}" is not Contextualizable but declares Context Entrys.
  
  
  
  1.3       +51 -1     jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/meta/verifier/ComponentVerifier.java
  
  Index: ComponentVerifier.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/meta/verifier/ComponentVerifier.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ComponentVerifier.java	3 Aug 2002 09:29:06 -0000	1.2
  +++ ComponentVerifier.java	6 Aug 2002 06:24:16 -0000	1.3
  @@ -62,6 +62,25 @@
           Suspendable.class,
           Disposable.class
       };
  +    /**
  +     * Verify that the supplied implementation class
  +     * and service classes are valid for a component.
  +     *
  +     * @param name the name of component
  +     * @param implementation the implementation class of component
  +     * @param services the classes representing services
  +     * @throws VerifyException if error thrown on failure and
  +     *         component fails check
  +     */
  +    public void verifyType( final String name,
  +                                 final Class implementation,
  +                                 final Class[] services, 
  +                                 final Class[] phases )
  +        throws VerifyException
  +    {
  +        verifyComponent( name, implementation, services );
  +        verifyImplementsPhases( name, implementation, phases );
  +    }
   
       /**
        * Verify that the supplied implementation class
  @@ -83,6 +102,37 @@
           verifyServices( name, services );
           verifyImplementsServices( name, implementation, services );
       }
  +
  +    /**
  +     * Verify that the supplied implementation implements the specified
  +     * phase interfaces.
  +     *
  +     * @param name the name of component
  +     * @param implementation the class representing the component
  +     * @param phases the phase interfaces that the implementation must provide
  +     * @throws VerifyException if error thrown on failure and
  +     *         component fails check
  +     */
  +    public void verifyImplementsPhases( final String name,
  +                                          final Class implementation,
  +                                          final Class[] phases )
  +        throws VerifyException
  +    {
  +        for( int i = 0; i < phases.length; i++ )
  +        {
  +            if( !phases[ i ].isAssignableFrom( implementation ) )
  +            {
  +                final String message =
  +                    REZ.getString( "verifier.noimpl-phase.error",
  +                                   name,
  +                                   implementation.getName(),
  +                                   phases[ i ].getName() );
  +                throw new VerifyException( message );
  +            }
  +        }
  +    }
  +
  +
   
       /**
        * Verify that the supplied implementation implements the specified
  
  
  
  1.4       +1 -0      jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/meta/verifier/Resources.properties
  
  Index: Resources.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/meta/verifier/Resources.properties,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Resources.properties	12 Jul 2002 15:11:58 -0000	1.3
  +++ Resources.properties	6 Aug 2002 06:24:16 -0000	1.4
  @@ -11,3 +11,4 @@
   verifier.incompat-serviceable.error=The implementation class {1} for component named "{0}" is both Serviceable and Composable (incompatible lifecycle interfaces).
   verifier.incompat-config.error=The implementation class {1} for component named "{0}" is both Configurable and Parameterizable (incompatible lifecycle interfaces).
   verifier.noimpl-service.error=The implementation class {1} for component named "{0}" does not implement the service interface {2} which it declares it supports.
  +verifier.noimpl-phase.error=The implementation class {1} for component named "{0}" does not implement the phase interface {2} which it declares it supports.
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>