You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by mi...@apache.org on 2001/11/01 23:48:57 UTC
cvs commit: jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer DefaultDeploymentRecorder.java Resources.properties
mirceatoma 01/11/01 14:48:57
Modified: src/java/org/apache/avalon/phoenix/components/deployer
DefaultDeploymentRecorder.java Resources.properties
Log:
Implement Installation persistence & re-creation.
Revision Changes Path
1.2 +139 -11 jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer/DefaultDeploymentRecorder.java
Index: DefaultDeploymentRecorder.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer/DefaultDeploymentRecorder.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DefaultDeploymentRecorder.java 2001/10/31 21:59:57 1.1
+++ DefaultDeploymentRecorder.java 2001/11/01 22:48:57 1.2
@@ -7,11 +7,22 @@
*/
package org.apache.avalon.phoenix.components.deployer;
-import java.util.HashMap;
+import java.io.File;
import org.apache.avalon.framework.logger.AbstractLoggable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.DefaultConfiguration;
+import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
+import org.apache.avalon.framework.configuration.DefaultConfigurationSerializer;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.avalon.framework.parameters.Parameterizable;
+import org.apache.avalon.framework.parameters.ParameterException;
+import org.apache.avalon.excalibur.i18n.ResourceManager;
+import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.avalon.phoenix.interfaces.DeploymentRecorder;
import org.apache.avalon.phoenix.interfaces.DeploymentException;
import org.apache.avalon.phoenix.tools.installer.Installation;
+import org.apache.avalon.phoenix.tools.installer.FileDigest;
/**
* Recorder for application deployment specific information (To avoid
@@ -22,26 +33,143 @@
*/
public class DefaultDeploymentRecorder
extends AbstractLoggable
- implements DeploymentRecorder {
-
- private final HashMap m_installations = new HashMap();
+ implements DeploymentRecorder, Parameterizable {
+ private static final Resources REZ =
+ ResourceManager.getPackageResources( DefaultDeploymentRecorder.class );
+
+ private final static String PHOENIX_HOME = System.getProperty( "phoenix.home", ".." );
+ private final static String DEFAULT_APPS_PATH = PHOENIX_HOME + File.separator + "apps";
+ private final static String DIGEST_FILE = "install.log";
+
+ private final static String SOURCE = "source";
+ private final static String DIRECTORY = "directory";
+ private final static String CONFIG = "config";
+ private final static String ASSEMBLY = "assembly";
+ private final static String SERVER = "server";
+ private final static String CLASSPATH = "classpath";
+ private final static String PATH = "path";
+ private final static String URL = "url";
+ private final static String DIGESTS = "digests";
+ private final static String DIGEST = "digest";
+ private final static String TIMESTAMP = "timestamp";
+ private final static String FILE = "file";
+ private final static String CHECKSUM = "checksum";
+
+ private File m_appsDirectory;
+ private final DefaultConfigurationBuilder m_builder = new DefaultConfigurationBuilder();
+ private final DefaultConfigurationSerializer m_serializer = new DefaultConfigurationSerializer();
+
+ public void parameterize(Parameters parameters)
+ throws ParameterException
+ {
+ final String appsLocation =
+ parameters.getParameter( "applications-directory", DEFAULT_APPS_PATH );
+ m_appsDirectory = new File( appsLocation );
+ }
+
public synchronized void recordInstallation( final String name, final Installation installation )
throws DeploymentException
{
- if( null == installation )
- {
- m_installations.remove( name );
+ final File file = getDigestFile( name );
+
+ try
+ {
+ if ( null == installation )
+ {
+ //remove installation digest file
+ if( file.exists() ) file.delete();
+ return;
+ }
+
+ final DefaultConfiguration configuration = new DefaultConfiguration( "installation", null );
+ configuration.setAttribute( SOURCE, installation.getSource().getCanonicalPath() );
+ configuration.setAttribute( DIRECTORY, installation.getDirectory().getCanonicalPath() );
+ configuration.setAttribute( CONFIG, installation.getConfig() );
+ configuration.setAttribute( ASSEMBLY, installation.getAssembly() );
+ configuration.setAttribute( SERVER, installation.getServer() );
+ configuration.setAttribute( TIMESTAMP, Long.toString( installation.getTimestamp() ) );
+
+ final DefaultConfiguration classpath = new DefaultConfiguration( CLASSPATH, null );
+ final String[] urls = installation.getClassPath();
+ for ( int i = 0; i < urls.length; i++ )
+ {
+ final DefaultConfiguration path = new DefaultConfiguration( PATH, null );
+ path.setAttribute( URL, urls[i] );
+ classpath.addChild( path );
+ }
+ configuration.addChild( classpath );
+
+ final DefaultConfiguration digests = new DefaultConfiguration( DIGESTS, null );
+ final FileDigest[] fileDigests = installation.getFileDigests();
+ for ( int i = 0; i < fileDigests.length; i++ )
+ {
+ final DefaultConfiguration digest = new DefaultConfiguration( DIGEST, null );
+ digest.setAttribute( FILE, fileDigests[i].getFile().getCanonicalPath() );
+ digest.setAttribute( CHECKSUM, String.valueOf( fileDigests[i].getChecksum() ) );
+ digests.addChild( digest );
+ }
+ configuration.addChild( digests );
+
+ m_serializer.serializeToFile( file, configuration );
}
- else
- {
- m_installations.put( name, installation );
+ catch ( Exception e )
+ {
+ final String message = REZ.getString( "recorder.warn.persist.failed", name );
+ getLogger().warn( message, e );
+
+ //delete traces
+ file.delete();
}
}
public synchronized Installation fetchInstallation( final String name )
throws DeploymentException
{
- return (Installation)m_installations.get( name );
+ final File file = getDigestFile( name );
+ if( !file.exists() ) return null;
+
+ try
+ {
+ final Configuration configuration = m_builder.buildFromFile( file );
+
+ final File source = new File( configuration.getAttribute( SOURCE ) );
+ final File directory = new File( configuration.getAttribute( DIRECTORY ) );
+ final String config = configuration.getAttribute( CONFIG );
+ final String assembly = configuration.getAttribute( ASSEMBLY );
+ final String server = configuration.getAttribute( SERVER );
+ final long timestamp = configuration.getAttributeAsLong( TIMESTAMP );
+
+ final Configuration[] paths = configuration.getChild( CLASSPATH, true).getChildren( PATH );
+ final String[] classPath = new String[ paths.length ];
+ for ( int i = 0; i < paths.length; i++ )
+ {
+ classPath[i] = paths[i].getAttribute( URL );
+ }
+
+ final Configuration[] digests = configuration.getChild( DIGESTS, true).getChildren( DIGEST );
+ final FileDigest[] fileDigests = new FileDigest[digests.length];
+ for ( int i = 0; i < digests.length; i++ )
+ {
+ final File installedFile = new File( digests[i].getAttribute( FILE ) );
+ final long checksum = digests[i].getAttributeAsLong( CHECKSUM );
+ final FileDigest digest = new FileDigest( installedFile, checksum );
+ }
+
+ return new Installation( source, directory, config, assembly, server, classPath, fileDigests, timestamp );
+ }
+ catch ( Exception e )
+ {
+ final String message = REZ.getString( "recorder.warn.rebuild.failed", name );
+ getLogger().warn( message, e );
+
+ //force re-installation
+ return null;
+ }
}
+
+ private File getDigestFile( final String name )
+ {
+ return new File( m_appsDirectory, name + File.separator + DIGEST_FILE );
+ }
}
1.9 +2 -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.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- Resources.properties 2001/10/24 16:18:55 1.8
+++ Resources.properties 2001/11/01 22:48:57 1.9
@@ -1,6 +1,7 @@
deploy.notice.sar.add=Adding SarEntry named "{0}" to Kernel with ClassPath = {1}.
-
deploy.error.config.create=Error building configuration from {0}.
+recorder.warn.persist.failed=Cannot persist installation digest for {0}.
+recorder.warn.rebuild.failed=Cannot rebuild installation digest for {0}.
deploy.error.sar.add=Error adding component entry ({0}) to container.
deploy.error.deploy.failed=Failed to deploy {0} from {1}.
deploy.error.extra.config=There is no coresponding Block or Listener for configuration data in element "{0}".
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>