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>