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

cvs commit: jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer DefaultDeployer.java Resources.properties

proyal      2002/06/27 22:13:28

  Modified:    src/java/org/apache/avalon/phoenix/components/deployer
                        DefaultDeployer.java Resources.properties
  Log:
  * Store schemas upon application load
   * Remove schemas upon application unload
   * Check configuration feasibility when checking application validity
  
  Revision  Changes    Path
  1.40      +69 -4     jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer/DefaultDeployer.java
  
  Index: DefaultDeployer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer/DefaultDeployer.java,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- DefaultDeployer.java	4 Jun 2002 07:51:07 -0000	1.39
  +++ DefaultDeployer.java	28 Jun 2002 05:13:28 -0000	1.40
  @@ -38,6 +38,7 @@
   import org.apache.avalon.phoenix.interfaces.DeploymentException;
   import org.apache.avalon.phoenix.interfaces.Kernel;
   import org.apache.avalon.phoenix.interfaces.LogManager;
  +import org.apache.avalon.phoenix.interfaces.ConfigurationValidator;
   import org.apache.avalon.phoenix.metadata.BlockListenerMetaData;
   import org.apache.avalon.phoenix.metadata.BlockMetaData;
   import org.apache.avalon.phoenix.metadata.SarMetaData;
  @@ -45,6 +46,7 @@
   import org.apache.avalon.phoenix.tools.assembler.AssemblyException;
   import org.apache.avalon.phoenix.tools.configuration.ConfigurationBuilder;
   import org.apache.avalon.phoenix.tools.verifier.SarVerifier;
  +import org.apache.avalon.phoenix.metainfo.BlockInfo;
   import org.apache.log.Hierarchy;
   import org.apache.excalibur.containerkit.verifier.VerifyException;
   
  @@ -69,6 +71,7 @@
       private Kernel m_kernel;
       private ConfigurationRepository m_repository;
       private ClassLoaderManager m_classLoaderManager;
  +    private ConfigurationValidator m_validator;
   
       /**
        * The directory which is used as the base for
  @@ -136,6 +139,7 @@
           m_classLoaderManager = (ClassLoaderManager)serviceManager.
               lookup( ClassLoaderManager.ROLE );
           m_logManager = (LogManager)serviceManager.lookup( LogManager.ROLE );
  +        m_validator = (ConfigurationValidator) serviceManager.lookup( ConfigurationValidator.ROLE );
       }
   
       public void initialize()
  @@ -203,8 +207,9 @@
   
               for( int i = 0; i < blocks.length; i++ )
               {
  -                //remove configuration from repository
  +                //remove configuration and schema from repository and validator
                   m_repository.storeConfiguration( name, blocks[ i ], null );
  +                m_validator.storeSchema( name, blocks[ i ], null );
               }
   
               m_installer.uninstall( installation );
  @@ -346,6 +351,55 @@
           throws VerifyException
       {
           m_verifier.verifySar( metaData, classLoader );
  +
  +        storeConfigurationSchemas( metaData );
  +    }
  +
  +    /**
  +     * Store the configuration schemas for this application
  +     *
  +     * @param metaData the application metaData
  +     * @throws VerifyException upon invalid schema
  +     */
  +    private void storeConfigurationSchemas( final SarMetaData metaData ) throws VerifyException
  +    {
  +        final BlockMetaData[] blocks = metaData.getBlocks();
  +        int i = 0;
  +
  +        try
  +        {
  +            for( i = 0; i < blocks.length; i++ )
  +            {
  +                m_validator.storeSchema( metaData.getName(),
  +                                         blocks[i].getName(),
  +                                         blocks[i].getBlockInfo().getConfigurationSchema()
  +                );
  +            }
  +        }
  +        catch( ConfigurationException e ) //uh-oh, bad schema bad bad!
  +        {
  +            while( --i >= 0 ) //back out any schemas that we have already stored for this app
  +            {
  +                try
  +                {
  +                    m_validator.storeSchema( metaData.getName(),
  +                                             blocks[i].getName(),
  +                                             blocks[i].getBlockInfo().getConfigurationSchema()
  +                    );
  +                }
  +                catch( ConfigurationException e1 ) // we *really* don't expect any errors here.. but you never know!
  +                {
  +                    final String message = REZ.getString( "deploy.error.config.schema.backoutfail",
  +                                                          blocks[i].getName() );
  +
  +                    getLogger().error( message, e1 );
  +                }
  +            }
  +
  +            final String message = REZ.getString( "deploy.error.config.schema.invalid", blocks[i].getName() );
  +
  +            throw new VerifyException( message, e );
  +        }
       }
   
       /**
  @@ -381,6 +435,8 @@
                                        final Configuration[] configurations )
           throws DeploymentException
       {
  +        final String application = metaData.getName();
  +
           for( int i = 0; i < configurations.length; i++ )
           {
               final Configuration configuration = configurations[ i ];
  @@ -397,9 +453,18 @@
   
               try
               {
  -                m_repository.storeConfiguration( metaData.getName(),
  -                                                 name,
  -                                                 configuration );
  +                if( m_validator.isFeasiblyValid( application, name, configuration ) )
  +                {
  +                    m_repository.storeConfiguration( application,
  +                                                     name,
  +                                                     configuration );
  +                }
  +                else
  +                {
  +                    final String message = REZ.getString( "deploy.error.config.invalid", name );
  +
  +                    throw new DeploymentException( message );
  +                }
               }
               catch( final ConfigurationException ce )
               {
  
  
  
  1.15      +4 -1      jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer/Resources.properties
  
  Index: Resources.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer/Resources.properties,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- Resources.properties	13 May 2002 21:29:28 -0000	1.14
  +++ Resources.properties	28 Jun 2002 05:13:28 -0000	1.15
  @@ -9,4 +9,7 @@
   deploy.workdir-notadir.error=Work directory {0} is not a directory.
   deploy.create-dir.notice=Work directory does not exist, attempting to create directory {0}.
   deploy.undeploy-indispose.error=Error undeploying application "{0}" when disposing Deployer. (Reason: {1})
  -deploy.already-deployed.error=Can not deploy application "{0}" as there is already an applicaiton deployed using that name.
  \ No newline at end of file
  +deploy.already-deployed.error=Can not deploy application "{0}" as there is already an applicaiton deployed using that name.
  +deploy.error.config.schema.invalid=Invalid schema for block {0}
  +deploy.error.config.schema.backoutfail=Unable to backout schema for {0}
  +deploy.error.config.invalid=Invalid configuration for block {0}
  \ No newline at end of file
  
  
  

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