Author: reinhard Date: Fri Mar 25 06:04:47 2005 New Revision: 159015 URL: http://svn.apache.org/viewcvs?view=rev&rev=159015 Log: Introduce ConsoleLogger, remove Castor mapping for deployment configuration as the objects can be generated out of the schema file; work on the Launcher (for command line interface); modify ApplicationServer22Locator as the way of how the wiring is generated has changed
Added: cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/logging/ - copied from r126205, cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/logging/ cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/logging/ConsoleLogger.java - copied, changed from r159011, cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/logging/ConsoleLogger.java Removed: cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/configuration/DeploymentConfigurationDTO10-mapping.xml Modified: cocoon/whiteboard/block-deployer/src/client/org/apache/cocoon/blockdeployer/cli/Launcher.java cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/DeploymentService.java cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java Modified: cocoon/whiteboard/block-deployer/src/client/org/apache/cocoon/blockdeployer/cli/Launcher.java URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/client/org/apache/cocoon/blockdeployer/cli/Launcher.java?view=diff&r1=159014&r2=159015 ============================================================================== --- cocoon/whiteboard/block-deployer/src/client/org/apache/cocoon/blockdeployer/cli/Launcher.java (original) +++ cocoon/whiteboard/block-deployer/src/client/org/apache/cocoon/blockdeployer/cli/Launcher.java Fri Mar 25 06:04:47 2005 @@ -16,7 +16,12 @@ package org.apache.cocoon.blockdeployer.cli; import java.io.File; +import java.io.FileReader; +import org.apache.cocoon.blockdeployer.DeploymentService; +import org.apache.cocoon.blockdeployer.cli.deploy10.Deploy; +import org.apache.cocoon.blockdeployer.logging.ConsoleLogger; +import org.apache.cocoon.blockdeployer.logging.LoggerFacade; import org.apache.commons.cli.BasicParser; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; @@ -24,18 +29,30 @@ import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionBuilder; import org.apache.commons.cli.Options; +import org.apache.commons.cli.ParseException; /** + * <p>The main purpose of this class is reading options entered at command line and using these values + * to initialize the @link DeploymentService that takes care of the actual deployment. This class is + * meant to remain as small as possible:</p> + * <ul> + * <li>only setting up a logger</li> + * <li>reading values from command line</li> + * <li>create an object that configures the deployment process</li> + * </ul> + * <p>Another reason for keeping it small is that unit testing of a main method isn't easy.</p> + * * @since 0.1 */ public class Launcher { private static final String OPT_HELP = "help"; + private static final String OPT_HELP1 = "?"; private static final String OPT_FILE = "file"; private static final String OPT_QUIET = "quiet"; private static final String OPT_VERBOSE = "verbose"; private static final String OPT_LOGFILE = "logfile"; - private static final String OPT_DEVMODE = "devmode"; + private static final String DEFAULT_DEPLOYMENT_DESCRIPTOR_FILE = "deploy.xml"; /** @@ -44,27 +61,36 @@ * @param args */ public static void main(String[] args) { + // setup the logger + LoggerFacade logger = new ConsoleLogger(LoggerFacade.LOG_ERROR); + // create the parser CommandLineParser parser = new BasicParser(); Options options = createOptions(); CommandLine line = null; - boolean devmode = false; + try { + line = parser.parse( options, args ); + } catch (ParseException ex) { + ex.printStackTrace(); + } String configuration = null; - try { if(line.hasOption(OPT_QUIET) && line.hasOption(OPT_VERBOSE)) { - System.err.println("Output can't be extra quiet and verbose at the same time."); + logger.error("Output can't be extra quiet and verbose at the same time."); printHelpAndExit(options); } + if(line.hasOption(OPT_QUIET)) { + logger.setLoglevel(LoggerFacade.LOG_WARN); + } + if(line.hasOption(OPT_VERBOSE)) { + logger.setLoglevel(LoggerFacade.LOG_DEBUG); + } // parse the command line arguments line = parser.parse(options, args); - if(line.hasOption(OPT_HELP)) { + if(line.hasOption(OPT_HELP) || line.hasOption(OPT_HELP1)) { printHelpAndExit(options); } - if(line.hasOption(OPT_DEVMODE)) { - devmode = true; - } if(line.hasOption(OPT_FILE)) { configuration = line.getOptionValue(OPT_FILE); } else { @@ -72,20 +98,29 @@ } } catch (org.apache.commons.cli.ParseException exp) { - System.err.println(exp.getMessage()); + logger.error(exp.getMessage()); printHelpAndExit(options); - } - - File basedir = new File(""); - - System.out.println("file configuring deployment: " + configuration); - + } + + // check whether deployment configuration file exists and is a file + File confFile = new File(configuration); + if(!confFile.exists() || !confFile.isFile()) { + logger.error("Deployment configuration file '" + confFile.getName() + "' does not exist!"); + printHelpAndExit(options); + } + // parse deployment configuration and setup the configuration object - - // setup logging - - // call the deployment service, either full deploy (block is physically installed) - // or devDeploy (nothing is copied) + Deploy deploy = null; + try { + deploy = (Deploy) Deploy.unmarshal(new FileReader(confFile)); + } catch (Exception ex) { + logger.error(Launcher.class, confFile.getName() + " caused problems: " + ex.getMessage()); + printHelpAndExit(options); + } + + // call the deployment service that deploys the application server and the blocks + logger.debug(Launcher.class, "Deplyoment is configured by " + confFile.getName() + "."); + DeploymentService.deploy(deploy, logger); } @@ -97,22 +132,27 @@ public static Options createOptions() { Option help = new Option(OPT_HELP, "print this message"); + Option help1 = new Option(OPT_HELP1, "print this message"); Option file = OptionBuilder.withArgName(OPT_FILE) .hasArg() .withDescription("the COB deployment descriptor (default is \"deploy.xml\")") .create(OPT_FILE); + Option logfile = OptionBuilder.withArgName(OPT_LOGFILE) + .hasArg() + .withDescription("log file") + .create(OPT_FILE); Option quiet = new Option(OPT_QUIET, "be extra quiet"); Option verbose = new Option(OPT_VERBOSE, "be extra verbose"); - - Option devmode = new Option(OPT_DEVMODE, "deploy block in development mode (block content is referenced)"); - + Options options = new Options(); - options.addOption(file); + options.addOption(file); + options.addOption(logfile); options.addOption(help); + options.addOption(help1); options.addOption(verbose); options.addOption(quiet); return options; } - + } Modified: cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/DeploymentService.java URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/DeploymentService.java?view=diff&r1=159014&r2=159015 ============================================================================== --- cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/DeploymentService.java (original) +++ cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/DeploymentService.java Fri Mar 25 06:04:47 2005 @@ -15,8 +15,7 @@ */ package org.apache.cocoon.blockdeployer; -import org.apache.cocoon.blockdeployer.configuration.DeploymentConfigurationDTO10; -import org.apache.cocoon.blockdeployer.configuration.DeploymentConfigurationException; +import org.apache.cocoon.blockdeployer.cli.deploy10.Deploy; import org.apache.cocoon.blockdeployer.logging.LoggerFacade; /** @@ -25,20 +24,30 @@ public class DeploymentService { /** - * Deploy blocks using the information in the [EMAIL PROTECTED] DeploymentConfigurationDTO10}. + * Deploy blocks * @param conf * @param logger */ - public static void deploy(DeploymentConfigurationDTO10 conf, LoggerFacade logger) throws DeploymentConfigurationException { + public static void deploy(Deploy conf, LoggerFacade logger) { if(logger == null) { throw new NullPointerException("The logger mustn't be null."); } - checkDeploymentConfiguration(conf, logger); + logger.debug(DeploymentService.class, "deploy service called (" + conf.getClass().getName() + ")"); + + // check for Cocoon Application Server (only Cocoon 2.2 is supported) + String casVersion = conf.getInstall().getCocoon().getVersion(); + logger.info("Cocoon Application server: version=" + casVersion); + + // initialize the repository with all its locators (a locator is created by the LocatorFactory) + + // get the blocks from the repository + + // deploy the blocks to the Cocoon server + + // deploy the blocks to locators that have the attribute 'add-unavailable-blocks' set + + } - protected static void checkDeploymentConfiguration(DeploymentConfigurationDTO10 conf, LoggerFacade logger) - throws DeploymentConfigurationException { - - } } Copied: cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/logging/ConsoleLogger.java (from r159011, cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/logging/ConsoleLogger.java) URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/logging/ConsoleLogger.java?view=diff&rev=159015&p1=cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/logging/ConsoleLogger.java&r1=159011&p2=cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/logging/ConsoleLogger.java&r2=159015 ============================================================================== --- cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/logging/ConsoleLogger.java (original) +++ cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/logging/ConsoleLogger.java Fri Mar 25 06:04:47 2005 @@ -19,9 +19,32 @@ * @since 0.1 */ public class ConsoleLogger implements LoggerFacade { + + public final static int LOGLEVEL_DEBUG = 1; + public final static int LOGLEVEL_INFO = 2; + public final static int LOGLEVEL_WARN = 3; + public final static int LOGLEVEL_ERROR = 4; + + int loglevel = -1; + + public ConsoleLogger(String level) { + this.setLoglevel(level); + } + + public void setLoglevel(String level) { + if(LoggerFacade.LOG_ERROR.equals(level)) loglevel = LOGLEVEL_ERROR; + if(LoggerFacade.LOG_WARN.equals(level)) loglevel = LOGLEVEL_WARN; + if(LoggerFacade.LOG_INFO.equals(level)) loglevel = LOGLEVEL_INFO; + if(LoggerFacade.LOG_DEBUG.equals(level)) loglevel = LOGLEVEL_DEBUG; + + if( loglevel < 1 ) { + throw new IllegalArgumentException( + "The loglevel has to be either ERROR, WARN, INFO or DEBUG"); + } + } public void debug(String msg) { - System.out.println(" DEBUG: " + msg); + if(isDebugEnabled()) System.out.println(" DEBUG: " + msg); } public void debug(Class clazz, String msg) { @@ -29,11 +52,11 @@ } public boolean isDebugEnabled() { - return true; + return loglevel == 1 ? true : false; } public void info(String msg) { - System.out.println(" INFO: " + msg); + if(isInfoEnabled()) System.out.println(msg); } public void info(Class clazz, String msg) { @@ -41,11 +64,11 @@ } public boolean isInfoEnabled() { - return true; - } + return loglevel <= 2 ? true : false; + } public void warn(String msg) { - System.out.println(" WARN: " + msg); + if(isWarnEnabled()) System.out.println(" WARN: " + msg); } public void warn(Class clazz, String msg) { @@ -53,11 +76,11 @@ } public boolean isWarnEnabled() { - return true; + return loglevel <= 3 ? true : false; } public void error(String msg) { - System.out.println(" ERROR: " + msg); + if(isWarnEnabled()) System.out.println(" ERROR: " + msg); } public void error(Class clazz, String msg) { @@ -74,7 +97,7 @@ } public boolean isErrorEnabled() { - return true; + return loglevel <= 4 ? true : false; } } Modified: cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java?view=diff&r1=159014&r2=159015 ============================================================================== --- cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java (original) +++ cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java Fri Mar 25 06:04:47 2005 @@ -25,17 +25,12 @@ import java.util.zip.ZipInputStream; import org.apache.cocoon.blockdeployer.block.RemoteBlock; -import org.apache.cocoon.blockdeployer.block.descriptor.BlockDescriptor; import org.apache.cocoon.blockdeployer.locking.Lock; import org.apache.cocoon.blockdeployer.locking.LockingException; import org.apache.cocoon.blockdeployer.logging.LoggerFacade; -import org.apache.cocoon.blockdeployer.repository.Deployable; -import org.apache.cocoon.blockdeployer.repository.Locator; -import org.apache.cocoon.blockdeployer.repository.Lockable; import org.apache.cocoon.blockdeployer.utils.CommonsTransactionLogger; import org.apache.cocoon.blockdeployer.utils.LocatorUtils; -import org.apache.cocoon.blockdeployer.wiring.WiredBlockDescriptor10; -import org.apache.cocoon.blockdeployer.wiring.Wiring; +import org.apache.cocoon.blockdeployer.wiring.wiring10.Wiring; import org.apache.commons.transaction.file.FileResourceManager; import org.apache.commons.transaction.file.ResourceManagerException; import org.apache.commons.transaction.file.ResourceManagerSystemException; @@ -50,7 +45,6 @@ public class ApplicationServer22Locator implements Locator, Deployable, Lockable { private File basedir; - private Wiring wiring; private LoggerFacade logger; /** @@ -62,17 +56,12 @@ * @param wiring * is the [EMAIL PROTECTED] Wiring} (representing wiring.xml) of a Cocoon server */ - public ApplicationServer22Locator(File basedir, Wiring wiring, LoggerFacade logger ) { + public ApplicationServer22Locator(File basedir, LoggerFacade logger ) { if(logger == null) { throw new NullPointerException("You have to set a logger!"); } LocatorUtils.checkBasedir(basedir, logger, ApplicationServer22Locator.class); - // FIXME shouldn't be the wiring encapsulated by this locator? currently its a mix ... :-/ - if(wiring == null) { - throw new NullPointerException("The wiring mustn't be null!"); - } this.basedir = basedir; - this.wiring = wiring; this.logger = logger; } @@ -205,19 +194,6 @@ } } - /** - * Create a wiring descriptor out of the block descriptor - * - * @param Block - * @return returns a WiredBlockDescriptor10 object containing - */ - protected static WiredBlockDescriptor10 createBlockWiringDescriptor( - RemoteBlock block) { - WiredBlockDescriptor10 wrbd = new WiredBlockDescriptor10(); - BlockDescriptor rbd = block.getBlockDescriptor(); - wrbd.setId(rbd.getBlockId()); - return wrbd; - } public void setLock(Lock lock) throws LockingException {