You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2006/01/27 10:11:52 UTC
svn commit: r372793 -
/directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/
Author: akarasulu
Date: Fri Jan 27 01:11:48 2006
New Revision: 372793
URL: http://svn.apache.org/viewcvs?rev=372793&view=rev
Log:
refactored daemon code so dynamics are clear
Added:
directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/BootstrappedApplication.java
directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ExitCodes.java
directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/JsvcBootstrapper.java
directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/MainBootstrapper.java
- copied, changed from r372723, directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/Bootstrapper.java
directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ProcrunBootstrapper.java
Removed:
directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/Bootstrapper.java
Added: directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/BootstrappedApplication.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/BootstrappedApplication.java?rev=372793&view=auto
==============================================================================
--- directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/BootstrappedApplication.java (added)
+++ directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/BootstrappedApplication.java Fri Jan 27 01:11:48 2006
@@ -0,0 +1,296 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.directory.server.standalone.daemon;
+
+
+import java.io.FileInputStream;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.Properties;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The bootstrapped application is managed by this class.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class BootstrappedApplication
+{
+ private static Logger log = LoggerFactory.getLogger( BootstrappedApplication.class );
+ private static final String BOOTSTRAP_START_CLASS_PROP = "bootstrap.start.class";
+ private static final String BOOTSTRAP_STOP_CLASS_PROP = "bootstrap.stop.class";
+
+ private Object startObject;
+ private Object stopObject;
+ private String startClassName;
+ private String stopClassName;
+ private final ClassLoader application;
+ private final InstallationLayout layout;
+
+
+ public BootstrappedApplication( String installationBase, ClassLoader parent )
+ {
+ layout = new InstallationLayout( installationBase );
+
+ // -------------------------------------------------------------------
+ // Verify correct installation layout
+ // -------------------------------------------------------------------
+
+ try
+ {
+ if ( log.isDebugEnabled() )
+ {
+ log.debug( "Verifying installation layout:\n" + installationBase );
+ }
+ layout.verifyInstallation();
+ }
+ catch( Throwable t )
+ {
+ log.error( "Installation verification failure!", t );
+ System.exit( ExitCodes.VERIFICATION );
+ }
+
+ // -------------------------------------------------------------------
+ // Load the properties from the bootstrap configuration file
+ // -------------------------------------------------------------------
+
+ try
+ {
+ if ( log.isDebugEnabled() )
+ {
+ log.debug( "Loading bootstrap configuration:\n" + layout.getBootstrapperConfigurationFile() );
+ }
+ Properties props = new Properties();
+ props.load( new FileInputStream( layout.getBootstrapperConfigurationFile() ) );
+
+ startClassName = props.getProperty( BOOTSTRAP_START_CLASS_PROP );
+ if ( startClassName == null )
+ {
+ log.error( "Start class not found in " + layout.getBootstrapperConfigurationFile() );
+ System.exit( ExitCodes.PROPLOAD );
+ }
+ else if ( log.isDebugEnabled() )
+ {
+ log.debug( "Start class set to: " + startClassName );
+ }
+
+ stopClassName = props.getProperty( BOOTSTRAP_STOP_CLASS_PROP );
+ if ( stopClassName == null )
+ {
+ log.error( "Stop class not found in " + layout.getBootstrapperConfigurationFile() );
+ System.exit( ExitCodes.PROPLOAD );
+ }
+ else if ( log.isDebugEnabled() )
+ {
+ log.debug( "Stop class set to: " + stopClassName );
+ }
+ }
+ catch ( Exception e )
+ {
+ log.error( "Failed while loading: " + layout.getBootstrapperConfigurationFile(), e );
+ System.exit( ExitCodes.PROPLOAD );
+ }
+
+ // -------------------------------------------------------------------
+ // Setup the application ClassLoader using the dependencies in layout
+ // -------------------------------------------------------------------
+
+ URL[] jars = layout.getAllJars();
+ this.application = new URLClassLoader( jars, parent );
+ if ( log.isDebugEnabled() )
+ {
+ StringBuffer buf = new StringBuffer();
+ buf.append( "Depenencies in application ClassLoader: \n" );
+ for ( int ii = 0; ii < jars.length; ii++ )
+ {
+ buf.append( "\t" ).append( jars[ii] ).append( "\n" );
+ }
+ log.debug( buf.toString() );
+ }
+ }
+
+
+ /**
+ * Invokes the init(InstallationLayout) method of the start class via reflection
+ * using the application ClassLoader. The application ClassLoader is set as the
+ * context ClassLoader then the method is invoked.
+ */
+ public void callInit()
+ {
+ Class clazz = null;
+ Method op = null;
+
+ Thread.currentThread().setContextClassLoader( application );
+ try
+ {
+ clazz = application.loadClass( startClassName );
+ }
+ catch ( ClassNotFoundException e )
+ {
+ log.error( "Could not find " + startClassName, e );
+ System.exit( ExitCodes.CLASS_LOOKUP );
+ }
+
+ try
+ {
+ startObject = clazz.newInstance();
+ }
+ catch ( Exception e )
+ {
+ log.error( "Could not instantiate " + startClassName, e );
+ System.exit( ExitCodes.INSTANTIATION );
+ }
+
+ try
+ {
+ op = clazz.getMethod( "init", new Class[] { InstallationLayout.class } );
+ }
+ catch ( Exception e )
+ {
+ log.error( "Could not find init(InstallationLayout) method for " + startClassName, e );
+ System.exit( ExitCodes.METHOD_LOOKUP );
+ }
+
+ try
+ {
+ op.invoke( startObject, new Object[] { layout } );
+ }
+ catch ( Exception e )
+ {
+ log.error( "Failed on " + startClassName + ".init(InstallationLayout)", e );
+ System.exit( ExitCodes.INITIALIZATION );
+ }
+ }
+
+
+ public void callStart()
+ {
+ Thread.currentThread().setContextClassLoader( application );
+ Class clazz = startObject.getClass();
+ Method op = null;
+
+ try
+ {
+ op = clazz.getMethod( "start", null );
+ }
+ catch ( Exception e )
+ {
+ log.error( "Could not find start() method for " + clazz.getName(), e );
+ System.exit( ExitCodes.METHOD_LOOKUP );
+ }
+
+ try
+ {
+ op.invoke( startObject, null );
+ }
+ catch ( Exception e )
+ {
+ log.error( "Failed on " + clazz.getName() + ".start()", e );
+ System.exit( ExitCodes.START );
+ }
+ }
+
+
+ public void callStop()
+ {
+ Thread.currentThread().setContextClassLoader( application );
+ Class clazz = null;
+ Method op = null;
+
+ // Reuse the startObject if it is the same class
+ if ( ! startClassName.equals( stopClassName ) )
+ {
+ try
+ {
+ clazz = application.loadClass( stopClassName );
+ }
+ catch ( ClassNotFoundException e )
+ {
+ log.error( "Could not find " + stopClassName, e );
+ System.exit( ExitCodes.CLASS_LOOKUP );
+ }
+
+ try
+ {
+ stopObject = clazz.newInstance();
+ }
+ catch ( Exception e )
+ {
+ log.error( "Could not instantiate " + stopClassName, e );
+ System.exit( ExitCodes.INSTANTIATION );
+ }
+ }
+ else
+ {
+ stopObject = startObject;
+ clazz = startObject.getClass();
+ }
+
+ try
+ {
+ op = clazz.getMethod( "stop", null );
+ }
+ catch ( Exception e )
+ {
+ log.error( "Could not find stop() method for " + stopClassName, e );
+ System.exit( ExitCodes.METHOD_LOOKUP );
+ }
+
+ try
+ {
+ op.invoke( stopObject, null );
+ }
+ catch ( Exception e )
+ {
+ log.error( "Failed on " + stopClassName + ".stop()", e );
+ System.exit( ExitCodes.STOP );
+ }
+ }
+
+
+ public void callDestroy()
+ {
+ Thread.currentThread().setContextClassLoader( application );
+ Class clazz = stopObject.getClass();
+ Method op = null;
+
+ try
+ {
+ op = clazz.getMethod( "destroy", null );
+ }
+ catch ( Exception e )
+ {
+ log.error( "Could not find destroy() method for " + clazz.getName(), e );
+ System.exit( ExitCodes.METHOD_LOOKUP );
+ }
+
+ try
+ {
+ op.invoke( stopObject, null );
+ }
+ catch ( Exception e )
+ {
+ log.error( "Failed on " + clazz.getName() + ".destroy()", e );
+ System.exit( ExitCodes.DESTROY );
+ }
+ }
+}
Added: directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ExitCodes.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ExitCodes.java?rev=372793&view=auto
==============================================================================
--- directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ExitCodes.java (added)
+++ directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ExitCodes.java Fri Jan 27 01:11:48 2006
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.directory.server.standalone.daemon;
+
+
+/**
+ * Exit codes for the bootstrappers.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public interface ExitCodes
+{
+ int CLASS_LOOKUP = 1;
+ int INSTANTIATION = 2;
+ int METHOD_LOOKUP = 3;
+ int INITIALIZATION = 4;
+ int START = 5;
+ int STOP = 6;
+ int PROPLOAD = 7;
+ int VERIFICATION = 8;
+ int DESTROY = 9;
+ int BAD_ARGUMENTS = 10;
+ int BAD_COMMAND = 11;
+ int UNKNOWN = 12;
+}
Added: directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/JsvcBootstrapper.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/JsvcBootstrapper.java?rev=372793&view=auto
==============================================================================
--- directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/JsvcBootstrapper.java (added)
+++ directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/JsvcBootstrapper.java Fri Jan 27 01:11:48 2006
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.directory.server.standalone.daemon;
+
+
+import org.apache.commons.daemon.Daemon;
+import org.apache.commons.daemon.DaemonContext;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The bootstrapper used by the
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class JsvcBootstrapper implements Daemon
+{
+ private final static Logger log = LoggerFactory.getLogger( JsvcBootstrapper.class );
+ private BootstrappedApplication application;
+
+
+ public void init( DaemonContext arg ) throws Exception
+ {
+ if ( log.isDebugEnabled() )
+ {
+ StringBuffer buf = new StringBuffer();
+ buf.append( "init(DaemonContext) called with args: \n" );
+ for ( int ii = 0; ii < arg.getArguments().length; ii++ )
+ {
+ buf.append( "\t" ).append( arg.getArguments()[ii] ).append( "\n" );
+ }
+ log.debug( buf.toString() );
+ }
+
+ if ( application == null )
+ {
+ application = new BootstrappedApplication( arg.getArguments()[0],
+ Thread.currentThread().getContextClassLoader() );
+ }
+
+ application.callInit();
+ }
+
+
+ public void init( String[] args )
+ {
+ if ( log.isDebugEnabled() )
+ {
+ StringBuffer buf = new StringBuffer();
+ buf.append( "init(String[]) called with args: \n" );
+ for ( int ii = 0; ii < args.length; ii++ )
+ {
+ buf.append( "\t" ).append( args[ii] ).append( "\n" );
+ }
+ log.debug( buf.toString() );
+ }
+
+ if ( application == null )
+ {
+ application = new BootstrappedApplication( args[0], Thread.currentThread().getContextClassLoader() );
+ }
+
+ application.callInit();
+ }
+
+
+ public void start()
+ {
+ log.debug( "start() called" );
+ application.callStart();
+ }
+
+
+ public void stop() throws Exception
+ {
+ log.debug( "stop() called" );
+ application.callStop();
+ }
+
+
+ public void destroy()
+ {
+ log.debug( "destroy() called" );
+ application.callDestroy();
+ }
+}
Copied: directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/MainBootstrapper.java (from r372723, directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/Bootstrapper.java)
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/MainBootstrapper.java?p2=directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/MainBootstrapper.java&p1=directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/Bootstrapper.java&r1=372723&r2=372793&rev=372793&view=diff
==============================================================================
--- directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/Bootstrapper.java (original)
+++ directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/MainBootstrapper.java Fri Jan 27 01:11:48 2006
@@ -17,304 +17,20 @@
package org.apache.directory.server.standalone.daemon;
-import java.io.FileInputStream;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.Properties;
-
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
/**
+ * The main() based application bootstrapper used as the entry point for the
+ * executable bootstrapper.jar so it can be launched as a simple java application.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class Bootstrapper
+public class MainBootstrapper
{
- private static final Logger log = LoggerFactory.getLogger( Bootstrapper.class );
- private static final int CLASS_LOOKUP_FAILURE_EXITCODE = -1;
- private static final int INSTANTIATION_FAILURE_EXITCODE = -2;
- private static final int METHOD_LOOKUP_FAILURE_EXITCODE = -3;
- private static final int INITIALIZATION_FAILURE_EXITCODE = -4;
- private static final int START_FAILURE_EXITCODE = -5;
- private static final int STOP_FAILURE_EXITCODE = -6;
- private static final int BOOTSTRAP_PROPLOAD_FAILURE_EXITCODE = -7;
- private static final String BOOTSTRAP_START_CLASS_PROP = "bootstrap.start.class";
- private static final String BOOTSTRAP_STOP_CLASS_PROP = "bootstrap.stop.class";
-
- private static Bootstrapper instance;
-
- private final Properties bootstrapProperties = new Properties();
- private InstallationLayout install;
- private ClassLoader appLoader;
- private ClassLoader parentLoader;
- private Object bootstrapped;
-
-
- public void setInstallationLayout( String installationBase )
- {
- log.debug( "Setting layout in Bootstrapper using base: " + installationBase );
- install = new InstallationLayout( installationBase );
-
- try
- {
- install.verifyInstallation();
- }
- catch( Throwable t )
- {
- log.error( "Installation verification failure!", t );
- }
-
- try
- {
- bootstrapProperties.load( new FileInputStream( install.getBootstrapperConfigurationFile() ) );
- }
- catch ( Exception e )
- {
- log.error( "Failed while loading: " + install.getBootstrapperConfigurationFile(), e );
- System.exit( BOOTSTRAP_PROPLOAD_FAILURE_EXITCODE );
- }
- }
-
-
- public void setParentLoader( ClassLoader parentLoader )
- {
- this.parentLoader = parentLoader;
- URL[] jars = install.getAllJars();
- this.appLoader = new URLClassLoader( jars, parentLoader );
-
- if ( log.isDebugEnabled() )
- {
- StringBuffer buf = new StringBuffer();
- buf.append( "urls in app loader: \n" );
- for ( int ii = 0; ii < jars.length; ii++ )
- {
- buf.append( "\t" ).append( jars[ii] ).append( "\n" );
- }
- log.debug( buf.toString() );
- }
- }
-
-
- public void callInit( String className )
- {
- Class clazz = null;
- Method op = null;
-
- Thread.currentThread().setContextClassLoader( appLoader );
- try
- {
- clazz = appLoader.loadClass( className );
- }
- catch ( ClassNotFoundException e )
- {
- log.error( "Could not find " + className, e );
- System.exit( CLASS_LOOKUP_FAILURE_EXITCODE );
- }
-
- try
- {
- bootstrapped = clazz.newInstance();
- }
- catch ( Exception e )
- {
- log.error( "Could not instantiate " + className, e );
- System.exit( INSTANTIATION_FAILURE_EXITCODE );
- }
-
- try
- {
- op = clazz.getMethod( "init", new Class[] { InstallationLayout.class } );
- }
- catch ( Exception e )
- {
- log.error( "Could not find init(InstallationLayout) method for " + className, e );
- System.exit( METHOD_LOOKUP_FAILURE_EXITCODE );
- }
-
- try
- {
- op.invoke( bootstrapped, new Object[] { this.install } );
- }
- catch ( Exception e )
- {
- log.error( "Failed on " + className + ".init(InstallationLayout)", e );
- System.exit( INITIALIZATION_FAILURE_EXITCODE );
- }
- }
-
-
- public void callStart()
- {
- Class clazz = bootstrapped.getClass();
- Method op = null;
-
- try
- {
- op = clazz.getMethod( "start", null );
- }
- catch ( Exception e )
- {
- log.error( "Could not find start() method for " + clazz.getName(), e );
- System.exit( METHOD_LOOKUP_FAILURE_EXITCODE );
- }
-
- try
- {
- op.invoke( bootstrapped, null );
- }
- catch ( Exception e )
- {
- log.error( "Failed on " + clazz.getName() + ".start()", e );
- System.exit( START_FAILURE_EXITCODE );
- }
- }
-
-
- public void callStop( String className )
- {
- Class clazz = null;
- Method op = null;
-
- try
- {
- clazz = appLoader.loadClass( className );
- }
- catch ( ClassNotFoundException e )
- {
- log.error( "Could not find " + className, e );
- System.exit( CLASS_LOOKUP_FAILURE_EXITCODE );
- }
-
- try
- {
- bootstrapped = clazz.newInstance();
- }
- catch ( Exception e )
- {
- log.error( "Could not instantiate " + className, e );
- System.exit( INSTANTIATION_FAILURE_EXITCODE );
- }
-
- try
- {
- op = clazz.getMethod( "stop", null );
- }
- catch ( Exception e )
- {
- log.error( "Could not find stop() method for " + className, e );
- System.exit( METHOD_LOOKUP_FAILURE_EXITCODE );
- }
-
- try
- {
- op.invoke( bootstrapped, null );
- }
- catch ( Exception e )
- {
- log.error( "Failed on " + className + ".stop()", e );
- System.exit( STOP_FAILURE_EXITCODE );
- }
- }
-
-
- // -----------------------------------------------------------------------
-
-
- public void init( String[] args )
- {
- if ( log.isDebugEnabled() )
- {
- StringBuffer buf = new StringBuffer();
- buf.append( "init(String[]) called with args: \n" );
- for ( int ii = 0; ii < args.length; ii++ )
- {
- buf.append( "\t" ).append( args[ii] ).append( "\n" );
- }
- log.debug( buf.toString() );
- }
-
- if ( install == null )
- {
- log.debug( "install was null: initializing it using first argument" );
- setInstallationLayout( args[0] );
- log.debug( "install initialized" );
- }
- else
- {
- log.debug( "install was not null" );
- }
-
- if ( parentLoader == null )
- {
- log.info( "Trying to get handle on system classloader as the parent" );
- setParentLoader( Thread.currentThread().getContextClassLoader() );
- log.info( "parentLoader = " + parentLoader );
- }
-
- callInit( bootstrapProperties.getProperty( BOOTSTRAP_START_CLASS_PROP, null ) );
-
- // This is only needed for procrun but does not harm jsvc or runs
- // Leads me to think that we need to differentiate somehow between
- // different daemon frameworks. We can do this via command line args,
- // system properties or by making them call different methods to start
- // the process. However not every framework may support calling
- // different methods which may also be somewhat error prone.
-
- while( true )
- {
- try
- {
- Thread.sleep( 2000 );
- }
- catch ( InterruptedException e )
- {
- e.printStackTrace();
- }
- }
- }
-
-
- public void stop() throws Exception
- {
- log.debug( "stop() called" );
- callStop( bootstrapProperties.getProperty( BOOTSTRAP_STOP_CLASS_PROP, null ) );
- }
-
-
- public void destroy()
- {
- log.debug( "destroy() called" );
- }
-
-
- public void start()
- {
- log.debug( "start() called" );
- Thread.currentThread().setContextClassLoader( parentLoader );
- callStart();
- }
-
-
- public void start( String[] args )
- {
- log.debug( "start(String[]) called" );
- Thread.currentThread().setContextClassLoader( this.parentLoader );
-
- if ( install == null && args.length > 0 )
- {
- setInstallationLayout( args[0] );
- setParentLoader( Thread.currentThread().getContextClassLoader() );
- }
- }
-
-
- // ------------------------------------------------------------------------
- // The main()
- // ------------------------------------------------------------------------
+ private static final Logger log = LoggerFactory.getLogger( MainBootstrapper.class );
public static void main( String[] args )
@@ -327,7 +43,7 @@
System.err.println( "Arguements are null - how come?" );
log.error( "main() args were null shutting down!" );
printHelp();
- System.exit( 1 );
+ System.exit( ExitCodes.BAD_ARGUMENTS );
}
if ( log.isDebugEnabled() )
@@ -335,20 +51,15 @@
log.debug( "main() recieved args:" );
for ( int ii = 0; ii < args.length; ii++ )
{
- log.debug( "args[" + ii + "] = " + args[ii] );
+ log.debug( "\targs[" + ii + "] = " + args[ii] );
}
}
+ BootstrappedApplication application = null;
if ( args.length > 1 )
{
- if ( instance == null )
- {
- log.debug( "main(String[]) initializing Bootstrapper ... )" );
- instance = new Bootstrapper();
- instance.setInstallationLayout( args[0] );
- instance.setParentLoader( Bootstrapper.class.getClassLoader() );
- log.debug( "Bootstrapper initialized" );
- }
+ log.debug( "main(String[]) creating BootstrappedApplication ... )" );
+ application = new BootstrappedApplication( args[0], Thread.currentThread().getContextClassLoader() );
}
else
{
@@ -364,36 +75,36 @@
{
if ( command.equalsIgnoreCase( "start" ) )
{
- log.debug( "calling init(String[]) from main(String[])" );
- instance.init( args );
+ log.debug( "calling application.callInit(String[]) from main(String[])" );
+ application.callInit();
- log.debug( "calling start(String[]) from main(String[])" );
- instance.start( args );
+ log.debug( "calling application.callStart(String[]) from main(String[])" );
+ application.callStart();
}
else if ( command.equalsIgnoreCase( "stop" ) )
{
- log.debug( "calling stop() from main(String[])" );
- instance.stop();
- instance.destroy();
+ log.debug( "calling application.callStop() from main(String[])" );
+ application.callStop();
+ log.debug( "calling application.callDestroy() from main(String[])" );
+ application.callDestroy();
}
else
{
log.error( "Unrecognized command " + command );
printHelp();
- System.exit( 3 );
+ System.exit( ExitCodes.BAD_COMMAND );
}
}
catch ( Throwable t )
{
- log.error( "Encountered error while processing command: " + command );
- t.printStackTrace();
- System.exit( 4 );
+ log.error( "Encountered error while processing command: " + command, t );
+ System.exit( ExitCodes.UNKNOWN );
}
}
private static void printHelp()
{
- System.err.println("java -jar bootstrap.jar <app.home> <command.name>");
+ System.err.println("java -jar bootstrapper.jar <install.home> [start|stop]");
}
}
Added: directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ProcrunBootstrapper.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ProcrunBootstrapper.java?rev=372793&view=auto
==============================================================================
--- directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ProcrunBootstrapper.java (added)
+++ directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ProcrunBootstrapper.java Fri Jan 27 01:11:48 2006
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.directory.server.standalone.daemon;
+
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The bootstrapper used for procrun services on windows platforms. This
+ * class contains static methods invoked by the prunsrv service manager.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class ProcrunBootstrapper
+{
+ private final static Logger log = LoggerFactory.getLogger( ProcrunBootstrapper.class );
+
+
+ public static void prunsrvStart( String[] args )
+ {
+ if ( log.isDebugEnabled() )
+ {
+ StringBuffer buf = new StringBuffer();
+ buf.append( "ENTERING ==> prunsrvStart(String[]):\n" );
+ for ( int ii = 0; ii < args.length; ii++ )
+ {
+ buf.append( "\targs[" ).append( ii ).append( "] = " ).append( args[ii] ).append( "\n" );
+ }
+ }
+
+ if ( args == null || args.length < 1 )
+ {
+ log.error( "Args were null or less than 1: need home directory. Shutting down!" );
+ System.exit( ExitCodes.BAD_ARGUMENTS );
+ }
+
+ log.debug( "prunsrvStart(String[]) creating BootstrappedApplication ... )" );
+ BootstrappedApplication application = new BootstrappedApplication( args[0],
+ Thread.currentThread().getContextClassLoader() );
+
+ log.debug( "prunsrvStart(String[]) invoking application.callInit())" );
+ application.callInit();
+ log.debug( "prunsrvStart(String[]) invoking bootstrapper.callStart())" );
+ application.callStart();
+
+ while( true )
+ {
+ try
+ {
+ Thread.sleep( 2000 );
+ }
+ catch ( InterruptedException e )
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ public static void prunsrvStop( String[] args )
+ {
+ if ( log.isDebugEnabled() )
+ {
+ StringBuffer buf = new StringBuffer();
+ buf.append( "ENTERING ==> prunsrvStop(String[]):\n" );
+ for ( int ii = 0; ii < args.length; ii++ )
+ {
+ buf.append( "\targs[" ).append( ii ).append( "] = " ).append( args[ii] ).append( "\n" );
+ }
+ }
+
+ if ( args == null || args.length < 1 )
+ {
+ log.error( "Args were null or less than 1: need home directory. Shutting down!" );
+ System.exit( ExitCodes.BAD_ARGUMENTS );
+ }
+
+ log.debug( "prunsrvStop(String[]) creating BootstrappedApplication ... )" );
+ BootstrappedApplication application = new BootstrappedApplication( args[0],
+ Thread.currentThread().getContextClassLoader() );
+
+ log.debug( "prunsrvStop(String[]) invoking application.callStop())" );
+ application.callStop();
+ log.debug( "prunsrvStop(String[]) invoking application.callDestroy())" );
+ application.callDestroy();
+ }
+}