donaldp 01/04/01 18:39:52 Modified: src/java/org/apache/phoenix/engine Main.java Log: Simplified a bit and removed a lot of uneeded functionality. Added in text chunk from Leos Startup class Revision Changes Path 1.6 +68 -75 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/Main.java Index: Main.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/Main.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Main.java 2001/03/28 03:17:23 1.5 +++ Main.java 2001/04/02 01:39:51 1.6 @@ -8,9 +8,6 @@ package org.apache.phoenix.engine; import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.InputStream; import java.net.URL; import java.security.AccessController; import java.security.PrivilegedActionException; @@ -21,9 +18,6 @@ import org.apache.avalon.Loggable; import org.apache.avalon.camelot.CamelotUtil; import org.apache.avalon.camelot.Deployer; -import org.apache.avalon.configuration.ConfigurationException; -import org.apache.avalon.util.StringUtil; -import org.apache.avalon.util.cli.AbstractMain; import org.apache.avalon.util.cli.CLArgsParser; import org.apache.avalon.util.cli.CLOption; import org.apache.avalon.util.cli.CLOptionDescriptor; @@ -41,7 +35,6 @@ * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a> */ public class Main - extends AbstractMain { private static final String PHOENIX_HOME = System.getProperty( "phoenix.home", ".." ); @@ -50,61 +43,85 @@ private static final String DEFAULT_APPS_PATH = PHOENIX_HOME + "/apps"; private static final String DEFAULT_KERNEL_CLASS = - "org.apache.phoenix.engine.DefaultServerKernel"; + System.getProperty( "phoenix.kernel", "org.apache.phoenix.engine.DefaultServerKernel" ); private static final int DEBUG_LOG_OPT = 'd'; private static final int HELP_OPT = 'h'; - private static final int KERNEL_CLASS_OPT = 'k'; private static final int LOG_FILE_OPT = 'l'; private static final int APPS_PATH_OPT = 'a'; - //HACK: force resolution of .jar libraries before security manager is installed. - //TODO: Is this still needed ???? - private static final Class AWARE_DEPEND = - org.apache.avalon.Component.class; - private static final Class PARSER_DEPEND = - org.xml.sax.SAXException.class; - private static final Class CLIENT_DEPEND = - org.apache.phoenix.Block.class; - - protected String m_kernelClass = DEFAULT_KERNEL_CLASS; protected String m_appsPath = DEFAULT_APPS_PATH; protected String m_logFile = DEFAULT_LOG_FILE; protected Logger m_logger; + protected CLOptionDescriptor[] m_options; + /** + * Main entry point. + * + * @param args[] the command line arguments + */ + public void main( final String args[] ) + { + final Main main = new Main(); + + try { main.execute( args ); } + catch( final Throwable throwable ) + { + if( null != main.m_logger ) + { + main.m_logger.fatalError( "Unhandled exception", throwable ); + } + + System.out.println( "There was an uncaught exception:" ); + System.out.println( "---------------------------------------------------------" ); + throwable.printStackTrace( System.out ); + System.out.println( "---------------------------------------------------------" ); + System.out.println( "The log file may contain further details of error." ); + System.out.println( "Please check the configuration files and restart phoenix." ); + System.out.println( "If the problem persists, contact the Avalon project. See" ); + System.out.println( "http://jakarta.apache.org/avalon for more information." ); + System.exit( 1 ); + } + } + + /** + * Display usage report. + * + */ + protected void usage() + { + System.out.println( "java " + getClass().getName() + " [options]" ); + System.out.println( "\tAvailable options:"); + System.out.println( CLUtil.describeOptions( m_options ) ); + } + + /** * Initialise the options for command line parser. * */ protected CLOptionDescriptor[] createCLOptions() { //TODO: localise - final CLOptionDescriptor options[] = new CLOptionDescriptor[ 5 ]; + final CLOptionDescriptor options[] = new CLOptionDescriptor[ 4 ]; options[0] = new CLOptionDescriptor( "help", CLOptionDescriptor.ARGUMENT_DISALLOWED, HELP_OPT, "display this help" ); - options[1] = - new CLOptionDescriptor( "kernel-class", - CLOptionDescriptor.ARGUMENT_REQUIRED, - KERNEL_CLASS_OPT, - "the classname of the kernel." ); - - options[2] = new CLOptionDescriptor( "log-file", CLOptionDescriptor.ARGUMENT_REQUIRED, LOG_FILE_OPT, "the name of log file." ); - options[3] = + options[2] = new CLOptionDescriptor( "apps-path", CLOptionDescriptor.ARGUMENT_REQUIRED, APPS_PATH_OPT, "the path to apps/ directory that contains .sars" ); - options[4] = + options[3] = new CLOptionDescriptor( "debug-init", CLOptionDescriptor.ARGUMENT_DISALLOWED, DEBUG_LOG_OPT, @@ -114,37 +131,24 @@ } /** - * Main entry point. - * - * @param args[] the command line arguments - */ - public void main( final String args[] ) - { - final Main main = new Main(); - - try { main.execute( args ); } - catch( final Throwable throwable ) - { - if( null != main.m_logger ) - { - main.m_logger.error( "Unhandled exception", throwable ); - } - - System.err.println( "Error: " + - StringUtil.printStackTrace( throwable, 8, true ) ); - System.exit( 1 ); - } - } - - /** * Setup properties, classloader, policy, logger etc. * * @param clOptions the command line options * @exception Exception if an error occurs */ - protected void execute( final List clOptions ) + protected void execute( final String[] args ) throws Exception { + m_options = createCLOptions(); + final CLArgsParser parser = new CLArgsParser( args, m_options ); + + if( null != parser.getErrorString() ) + { + System.err.println( "Error: " + parser.getErrorString() ); + return; + } + + final List clOptions = parser.getArguments(); final int size = clOptions.size(); boolean debugLog = false; @@ -161,7 +165,6 @@ usage(); return; - case KERNEL_CLASS_OPT: m_kernelClass = option.getArgument(); break; case DEBUG_LOG_OPT: debugLog = true; break; case LOG_FILE_OPT: m_logFile = option.getArgument(); break; case APPS_PATH_OPT: m_appsPath = option.getArgument(); break; @@ -173,13 +176,13 @@ try { final PrivilegedExceptionAction action = new PrivilegedExceptionAction() - { - public Object run() throws Exception - { - execute(); - return null; - } - }; + { + public Object run() throws Exception + { + execute(); + return null; + } + }; AccessController.doPrivileged( action ); } @@ -216,18 +219,19 @@ try { Thread.currentThread().setContextClassLoader( getClass().getClassLoader() ); - kernel = (ServerKernel)Class.forName( m_kernelClass ).newInstance(); + kernel = (ServerKernel)Class.forName( DEFAULT_KERNEL_CLASS ).newInstance(); } catch( final Exception e ) { - throw new ConfigurationException( "Failed to create kernel", e ); + m_logger.fatalError( "Failed to create kernel instance", e ); + throw e; } kernel.setLogger( m_logger ); kernel.init();//ialize(); final File directory = new File( m_appsPath ); - final Deployer deployer = createDeployer(); + final Deployer deployer = new DefaultSarDeployer(); setupDeployer( kernel, deployer ); CamelotUtil.deployFromDirectory( deployer, directory, ".sar" ); @@ -262,16 +266,5 @@ componentManager.put( "org.apache.avalon.camelot.Container", kernel ); ((Composer)deployer).compose( componentManager ); } - } - - /** - * Create a deployer for Sar objects. - * Overide this in sub-classes if necessary. - * - * @return the created deployer - */ - protected Deployer createDeployer() - { - return new DefaultSarDeployer(); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]