You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by le...@apache.org on 2002/02/07 08:06:02 UTC
cvs commit: jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/launcher DaemonLauncher.java Main.java
leif 02/02/06 23:06:02
Modified: src/java/org/apache/avalon/phoenix/frontends CLIMain.java
src/java/org/apache/avalon/phoenix/launcher
DaemonLauncher.java Main.java
Log:
Added some code so that the Wrapper will shutdown Phoenix correctly
when the shutdown process initiated from within Phoenix.
Revision Changes Path
1.21 +15 -2 jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/frontends/CLIMain.java
Index: CLIMain.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/frontends/CLIMain.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- CLIMain.java 4 Feb 2002 09:57:55 -0000 1.20
+++ CLIMain.java 7 Feb 2002 07:06:02 -0000 1.21
@@ -22,6 +22,8 @@
import org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor;
import org.apache.avalon.phoenix.interfaces.Embeddor;
import java.util.Hashtable;
+import java.util.Observable;
+import java.util.Observer;
import java.io.File;
import org.apache.log.Hierarchy;
import org.apache.log.LogTarget;
@@ -35,6 +37,7 @@
* @author <a href="mailto:mail@leosimons.com">Leo Simons</a>
*/
public final class CLIMain
+ extends Observable
implements Runnable
{
private static final Resources REZ =
@@ -45,8 +48,6 @@
private final static String DEFAULT_FORMAT =
"%{time} [%7.7{priority}] (%{category}): %{message}\\n%{throwable}";
-
-
///The embeddor attached to frontend
private Embeddor m_embeddor;
@@ -112,6 +113,14 @@
m_hook = new ShutdownHook( this );
Runtime.getRuntime().addShutdownHook( m_hook );
}
+
+ // If an Observer is present in the data object, then add it as an observer for
+ // m_observable
+ Observer observer = (Observer)data.get( Observer.class.getName() );
+ if ( null != observer )
+ {
+ addObserver( observer );
+ }
if( blocking )
{
@@ -265,6 +274,10 @@
m_embeddor = null;
}
}
+
+ // Notify any observers that Phoenix is shutting down
+ setChanged();
+ notifyObservers( "shutdown" );
}
/**
1.7 +35 -7 jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/launcher/DaemonLauncher.java
Index: DaemonLauncher.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/launcher/DaemonLauncher.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- DaemonLauncher.java 2 Feb 2002 11:50:10 -0000 1.6
+++ DaemonLauncher.java 7 Feb 2002 07:06:02 -0000 1.7
@@ -18,12 +18,15 @@
* using the Java Service Wrapper at http://wrapper.sourceforge.net
*
* @author <a href="mailto:peter@apache.org">Peter Donald</a>
+ * @author <a href="mailto:leif@silveregg.co.jp">Leif Mortenson</a>
*/
public class DaemonLauncher
implements WrapperListener, Observer
{
public Integer start( final String[] args )
{
+ Integer exitCodeInteger = null;
+
// This startup could take a while, so tell the wrapper to be patient.
WrapperManager.signalStarting( 45000 );
@@ -35,21 +38,29 @@
System.out.println( "DaemonLauncher: Starting up Phoenix" );
}
- try { Main.startup( args, data ); }
- catch( final Exception e )
+ try
{
- e.printStackTrace();
- }
+ int exitCode = Main.startup( args, data, false );
+ if ( exitCode != 0 )
+ {
+ exitCodeInteger = new Integer( exitCode );
+ }
- if ( WrapperManager.isDebugEnabled() )
+ if ( WrapperManager.isDebugEnabled() )
+ {
+ System.out.println( "DaemonLauncher: Phoenix startup completed" );
+ }
+ }
+ catch( final Exception e )
{
- System.out.println( "DaemonLauncher: Phoenix startup completed" );
+ e.printStackTrace();
+ exitCodeInteger = new Integer( 1 );
}
// We are almost up now, so reset the wait time
WrapperManager.signalStarting( 2000 );
- return null;
+ return exitCodeInteger;
}
public int stop( final int exitCode )
@@ -107,6 +118,23 @@
{
//Should never get here???
System.out.println( "DaemonLauncher: restart completed." );
+ System.out.flush();
+ }
+ }
+ else if ( command.equals( "shutdown" ) )
+ {
+ if ( WrapperManager.isDebugEnabled() )
+ {
+ System.out.println( "DaemonLauncher: shutdown requested." );
+ System.out.flush();
+ }
+
+ WrapperManager.stop( 0 );
+
+ if ( WrapperManager.isDebugEnabled() )
+ {
+ //Should never get here???
+ System.out.println( "DaemonLauncher: shutdown completed." );
System.out.flush();
}
}
1.9 +15 -13 jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/launcher/Main.java
Index: Main.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/launcher/Main.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- Main.java 15 Dec 2001 22:51:34 -0000 1.8
+++ Main.java 7 Feb 2002 07:06:02 -0000 1.9
@@ -32,12 +32,6 @@
private static Object c_frontend;
- ///The code to return to system using exit code
- private static int c_exitCode;
-
- ///The code to return to system using exit code
- private static boolean c_blocking;
-
/**
* Main entry point for Phoenix.
*
@@ -47,9 +41,8 @@
public final static void main( final String[] args )
throws Exception
{
- c_blocking = true;
- startup( args, new Hashtable() );
- System.exit( c_exitCode );
+ int exitCode = startup( args, new Hashtable(), true );
+ System.exit( exitCode );
}
/**
@@ -59,11 +52,18 @@
*
* @param args the command line arg array
* @param data a set of extra parameters to pass to embeddor
+ * @param blocking false if the current thread is expected to return.
+ *
+ * @returns the exit code which should be used to exit the JVM
+ *
* @exception Exception if an error occurs
*/
- protected final static void startup( final String[] args, final Hashtable data )
+ protected final static int startup( final String[] args,
+ final Hashtable data,
+ final boolean blocking )
throws Exception
{
+ int exitCode;
try
{
//setup new Policy manager
@@ -85,14 +85,16 @@
c_frontend = clazz.newInstance();
//kick the tires and light the fires....
- final Integer integer =
- (Integer)method.invoke( c_frontend, new Object[] { args, data, new Boolean( c_blocking ) } );
- c_exitCode = integer.intValue();
+ final Integer integer = (Integer)method.invoke(
+ c_frontend, new Object[] { args, data, new Boolean( blocking ) } );
+ exitCode = integer.intValue();
}
catch( final Exception e )
{
e.printStackTrace();
+ exitCode = 1;
}
+ return exitCode;
}
/**
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>