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 21:47:46 UTC
svn commit: r372980 - in /directory/trunks/apacheds/standalone:
daemon/src/main/java/org/apache/directory/server/standalone/daemon/
installers/plugin/src/main/resources/org/apache/directory/server/standalone/installers/
installers/plugin/src/main/resou...
Author: akarasulu
Date: Fri Jan 27 12:47:33 2006
New Revision: 372980
URL: http://svn.apache.org/viewcvs?rev=372980&view=rev
Log:
Refactored the daemon bootstrapper ...
o factored out invocation of lifecycle methods to LifecycleInvoker
o separated jsvc entry points, procrun entry points and main() entry point
from bootstrapper for clarity using the following classes respectively:
- JsvcBootstrapper
- ProcrunBootstrapper
- MainBootstrapper
o updated bootstrapper.jar pom to make MainBootstrapper the target for
executable jar file
o created new DaemonApplication interface used by LCInvoker which takes
different arguments for methods
o now arguments are passed to the DaemonApplication shifted with home
directory and command removed when calling the DaemonApplication
o updated simple/main to account for these refactorings
Added:
directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/DaemonApplication.java
directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/LifecycleInvoker.java
- copied, changed from r372795, directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ApplicationLifecycleInvoker.java
Removed:
directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ApplicationLifecycleInvoker.java
Modified:
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
directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ProcrunBootstrapper.java
directory/trunks/apacheds/standalone/installers/plugin/src/main/resources/org/apache/directory/server/standalone/installers/inno/install.iss
directory/trunks/apacheds/standalone/installers/plugin/src/main/resources/org/apache/directory/server/standalone/installers/template.init
directory/trunks/apacheds/standalone/simple/main/src/main/java/org/apache/ldap/server/DirectoryServer.java
directory/trunks/apacheds/standalone/simple/main/src/main/java/org/apache/ldap/server/ServerMain.java
Added: directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/DaemonApplication.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/DaemonApplication.java?rev=372980&view=auto
==============================================================================
--- directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/DaemonApplication.java (added)
+++ directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/DaemonApplication.java Fri Jan 27 12:47:33 2006
@@ -0,0 +1,58 @@
+/*
+ * 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;
+
+
+/**
+ * Interface used by DaemonApplications.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public interface DaemonApplication
+{
+ /**
+ * Threads should be created, along with sockets.
+ *
+ * @param layout the application's installation home layout
+ * @param args the shifted arguments after the installation home path and
+ * the command arguments are removed
+ */
+ void init( InstallationLayout layout, String[] args ) throws Exception;
+
+ /**
+ * Start threads and bind sockets here. If nowait is toggled this method
+ * should not return until the server is ready to be shutdown.
+ *
+ * @param nowait true if this method should return control immediately, false
+ * if it should block until it is ready to be shutdown
+ */
+ void start( boolean nowait );
+
+ /**
+ * Stop threads and close sockets opened in start() here.
+ *
+ * @param args shifted arguments without installation path or stop command
+ * @throws Exception
+ */
+ void stop( String[] args ) throws Exception;
+
+ /**
+ * The application should destroy resources created in init() here.
+ */
+ void destroy();
+}
Modified: 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=372980&r1=372979&r2=372980&view=diff
==============================================================================
--- directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ExitCodes.java (original)
+++ directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ExitCodes.java Fri Jan 27 12:47:33 2006
@@ -37,4 +37,5 @@
int BAD_ARGUMENTS = 10;
int BAD_COMMAND = 11;
int UNKNOWN = 12;
+ int INVOCATION = 13;
}
Modified: 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=372980&r1=372979&r2=372980&view=diff
==============================================================================
--- directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/JsvcBootstrapper.java (original)
+++ directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/JsvcBootstrapper.java Fri Jan 27 12:47:33 2006
@@ -33,7 +33,8 @@
public class JsvcBootstrapper implements Daemon
{
private final static Logger log = LoggerFactory.getLogger( JsvcBootstrapper.class );
- private ApplicationLifecycleInvoker application;
+ private static final String[] EMPTY_STRARRAY = new String[0];
+ private LifecycleInvoker invoker;
public void init( DaemonContext arg ) throws Exception
@@ -49,13 +50,22 @@
log.debug( buf.toString() );
}
- if ( application == null )
+ if ( invoker == null )
{
- application = new ApplicationLifecycleInvoker( arg.getArguments()[0],
+ invoker = new LifecycleInvoker( arg.getArguments()[0],
Thread.currentThread().getContextClassLoader() );
}
- application.callInit();
+ if ( arg.getArguments().length > 1 )
+ {
+ String[] shifted = new String[arg.getArguments().length-1];
+ System.arraycopy( arg.getArguments(), 1, shifted, 0, shifted.length );
+ invoker.callInit( shifted );
+ }
+ else
+ {
+ invoker.callInit( EMPTY_STRARRAY );
+ }
}
@@ -72,32 +82,41 @@
log.debug( buf.toString() );
}
- if ( application == null )
+ if ( invoker == null )
{
- application = new ApplicationLifecycleInvoker( args[0], Thread.currentThread().getContextClassLoader() );
+ invoker = new LifecycleInvoker( args[0], Thread.currentThread().getContextClassLoader() );
}
- application.callInit();
+ if ( args.length > 1 )
+ {
+ String[] shifted = new String[args.length-1];
+ System.arraycopy( args, 1, shifted, 0, shifted.length );
+ invoker.callInit( shifted );
+ }
+ else
+ {
+ invoker.callInit( EMPTY_STRARRAY );
+ }
}
public void start()
{
log.debug( "start() called" );
- application.callStart( true );
+ invoker.callStart( true );
}
public void stop() throws Exception
{
log.debug( "stop() called" );
- application.callStop();
+ invoker.callStop( EMPTY_STRARRAY );
}
public void destroy()
{
log.debug( "destroy() called" );
- application.callDestroy();
+ invoker.callDestroy();
}
}
Copied: directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/LifecycleInvoker.java (from r372795, directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ApplicationLifecycleInvoker.java)
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/LifecycleInvoker.java?p2=directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/LifecycleInvoker.java&p1=directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ApplicationLifecycleInvoker.java&r1=372795&r2=372980&rev=372980&view=diff
==============================================================================
--- directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ApplicationLifecycleInvoker.java (original)
+++ directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/LifecycleInvoker.java Fri Jan 27 12:47:33 2006
@@ -18,7 +18,6 @@
import java.io.FileInputStream;
-import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Properties;
@@ -33,21 +32,21 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class ApplicationLifecycleInvoker
+public class LifecycleInvoker
{
- private static Logger log = LoggerFactory.getLogger( ApplicationLifecycleInvoker.class );
+ private static Logger log = LoggerFactory.getLogger( LifecycleInvoker.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 DaemonApplication startObject;
+ private DaemonApplication stopObject;
private String startClassName;
private String stopClassName;
private final ClassLoader application;
private final InstallationLayout layout;
- public ApplicationLifecycleInvoker( String installationBase, ClassLoader parent )
+ public LifecycleInvoker( String installationBase, ClassLoader parent )
{
layout = new InstallationLayout( installationBase );
@@ -134,11 +133,9 @@
* using the application ClassLoader. The application ClassLoader is set as the
* context ClassLoader then the method is invoked.
*/
- public void callInit()
+ public void callInit( String[] args )
{
Class clazz = null;
- Method op = null;
-
Thread.currentThread().setContextClassLoader( application );
try
{
@@ -152,32 +149,22 @@
try
{
- startObject = clazz.newInstance();
+ startObject = ( DaemonApplication ) 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 } );
+ startObject.init( layout, args );
}
catch ( Exception e )
{
- log.error( "Failed on " + startClassName + ".init(InstallationLayout)", e );
- System.exit( ExitCodes.INITIALIZATION );
+ log.error( "Could not instantiate " + startClassName, e );
+ System.exit( ExitCodes.INVOCATION );
}
}
@@ -185,36 +172,14 @@
public void callStart( boolean nowait )
{
Thread.currentThread().setContextClassLoader( application );
- Class clazz = startObject.getClass();
- Method op = null;
-
- try
- {
- op = clazz.getMethod( "start", new Class[] { Boolean.class } );
- }
- catch ( Exception e )
- {
- log.error( "Could not find start() method for " + clazz.getName(), e );
- System.exit( ExitCodes.METHOD_LOOKUP );
- }
-
- try
- {
- op.invoke( startObject, new Object[] { new Boolean( nowait ) } );
- }
- catch ( Exception e )
- {
- log.error( "Failed on " + clazz.getName() + ".start()", e );
- System.exit( ExitCodes.START );
- }
+ startObject.start( nowait );
}
- public void callStop()
+ public void callStop( String[] args )
{
Thread.currentThread().setContextClassLoader( application );
Class clazz = null;
- Method op = null;
// Reuse the startObject if it is the same class
if ( ! startClassName.equals( stopClassName ) )
@@ -231,7 +196,7 @@
try
{
- stopObject = clazz.newInstance();
+ stopObject = ( DaemonApplication ) clazz.newInstance();
}
catch ( Exception e )
{
@@ -244,25 +209,15 @@
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 );
+ stopObject.stop( args );
}
catch ( Exception e )
{
- log.error( "Failed on " + stopClassName + ".stop()", e );
- System.exit( ExitCodes.STOP );
+ log.error( "Could not instantiate " + startClassName, e );
+ System.exit( ExitCodes.INVOCATION );
}
}
@@ -270,27 +225,6 @@
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 );
- }
+ stopObject.destroy();
}
}
Modified: directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/MainBootstrapper.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/MainBootstrapper.java?rev=372980&r1=372979&r2=372980&view=diff
==============================================================================
--- directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/MainBootstrapper.java (original)
+++ directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/MainBootstrapper.java Fri Jan 27 12:47:33 2006
@@ -31,6 +31,7 @@
public class MainBootstrapper
{
private static final Logger log = LoggerFactory.getLogger( MainBootstrapper.class );
+ private static final String[] EMPTY_STRARRAY = new String[0];
public static void main( String[] args )
@@ -55,11 +56,11 @@
}
}
- ApplicationLifecycleInvoker application = null;
+ LifecycleInvoker invoker = null;
if ( args.length > 1 )
{
- log.debug( "main(String[]) creating ApplicationLifecycleInvoker ... )" );
- application = new ApplicationLifecycleInvoker( args[0], Thread.currentThread().getContextClassLoader() );
+ log.debug( "main(String[]) creating LifecycleInvoker ... )" );
+ invoker = new LifecycleInvoker( args[0], Thread.currentThread().getContextClassLoader() );
}
else
{
@@ -76,17 +77,35 @@
if ( command.equalsIgnoreCase( "start" ) )
{
log.debug( "calling application.callInit(String[]) from main(String[])" );
- application.callInit();
+ if ( args.length > 2 )
+ {
+ String[] shifted = new String[args.length-2];
+ System.arraycopy( args, 2, shifted, 0, shifted.length );
+ invoker.callInit( shifted );
+ }
+ else
+ {
+ invoker.callInit( EMPTY_STRARRAY );
+ }
log.debug( "calling application.callStart(String[]) from main(String[])" );
- application.callStart( true );
+ invoker.callStart( true );
}
else if ( command.equalsIgnoreCase( "stop" ) )
{
- log.debug( "calling application.callStop() from main(String[])" );
- application.callStop();
+ log.debug( "calling application.callStop(String[]) from main(String[])" );
+ if ( args.length > 2 )
+ {
+ String[] shifted = new String[args.length-2];
+ System.arraycopy( args, 2, shifted, 0, shifted.length );
+ invoker.callStop( shifted );
+ }
+ else
+ {
+ invoker.callStop( EMPTY_STRARRAY );
+ }
log.debug( "calling application.callDestroy() from main(String[])" );
- application.callDestroy();
+ invoker.callDestroy();
}
else
{
@@ -105,6 +124,6 @@
private static void printHelp()
{
- System.err.println("java -jar bootstrapper.jar <install.home> [start|stop]");
+ System.err.println("java -jar bootstrapper.jar <install.home> [start|stop] [apparg0 apparg1 ... appargN]");
}
}
Modified: 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=372980&r1=372979&r2=372980&view=diff
==============================================================================
--- directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ProcrunBootstrapper.java (original)
+++ directory/trunks/apacheds/standalone/daemon/src/main/java/org/apache/directory/server/standalone/daemon/ProcrunBootstrapper.java Fri Jan 27 12:47:33 2006
@@ -31,6 +31,7 @@
public class ProcrunBootstrapper
{
private final static Logger log = LoggerFactory.getLogger( ProcrunBootstrapper.class );
+ private static final String[] EMPTY_STRARRAY = new String[0];
public static void prunsrvStart( String[] args )
@@ -51,14 +52,23 @@
System.exit( ExitCodes.BAD_ARGUMENTS );
}
- log.debug( "prunsrvStart(String[]) creating ApplicationLifecycleInvoker ... )" );
- ApplicationLifecycleInvoker application = new ApplicationLifecycleInvoker( args[0],
+ log.debug( "prunsrvStart(String[]) creating LifecycleInvoker ... )" );
+ LifecycleInvoker invoker = new LifecycleInvoker( args[0],
Thread.currentThread().getContextClassLoader() );
- log.debug( "prunsrvStart(String[]) invoking application.callInit())" );
- application.callInit();
+ log.debug( "prunsrvStart(String[]) invoking application.callInit(String[]))" );
+ if ( args.length > 1 )
+ {
+ String[] shifted = new String[args.length-1];
+ System.arraycopy( args, 1, shifted, 0, shifted.length );
+ invoker.callInit( shifted );
+ }
+ else
+ {
+ invoker.callInit( EMPTY_STRARRAY );
+ }
log.debug( "prunsrvStart(String[]) invoking bootstrapper.callStart())" );
- application.callStart( false ); // must block on start (let the app decide how)
+ invoker.callStart( false ); // must block on start (let the app decide how)
}
@@ -80,12 +90,21 @@
System.exit( ExitCodes.BAD_ARGUMENTS );
}
- log.debug( "prunsrvStop(String[]) creating ApplicationLifecycleInvoker ... )" );
- ApplicationLifecycleInvoker application = new ApplicationLifecycleInvoker( args[0],
+ log.debug( "prunsrvStop(String[]) creating LifecycleInvoker ... )" );
+ LifecycleInvoker application = new LifecycleInvoker( args[0],
Thread.currentThread().getContextClassLoader() );
- log.debug( "prunsrvStop(String[]) invoking application.callStop())" );
- application.callStop();
+ log.debug( "prunsrvStop(String[]) invoking application.callStop(String[]))" );
+ if ( args.length > 1 )
+ {
+ String[] shifted = new String[args.length-1];
+ System.arraycopy( args, 1, shifted, 0, shifted.length );
+ application.callStop( shifted );
+ }
+ else
+ {
+ application.callStop( EMPTY_STRARRAY );
+ }
log.debug( "prunsrvStop(String[]) invoking application.callDestroy())" );
application.callDestroy();
}
Modified: directory/trunks/apacheds/standalone/installers/plugin/src/main/resources/org/apache/directory/server/standalone/installers/inno/install.iss
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/standalone/installers/plugin/src/main/resources/org/apache/directory/server/standalone/installers/inno/install.iss?rev=372980&r1=372979&r2=372980&view=diff
==============================================================================
--- directory/trunks/apacheds/standalone/installers/plugin/src/main/resources/org/apache/directory/server/standalone/installers/inno/install.iss (original)
+++ directory/trunks/apacheds/standalone/installers/plugin/src/main/resources/org/apache/directory/server/standalone/installers/inno/install.iss Fri Jan 27 12:47:33 2006
@@ -69,7 +69,7 @@
Name: {group}\Test Service; Filename: {app}\bin\${app}.exe; IconIndex: 0
[Run]
-Filename: {app}\bin\${app}.exe; WorkingDir: {app}\bin; Tasks: ; Languages: ; Parameters: "//IS//${app.displayname} --Description=""${app.description} Service ${app.version} - ${app.url}"" --DisplayName=${app.displayname} --Install=""{app}\bin\${app}.exe"" --StartMode=jvm --StopMode=jvm --StartClass=org.apache.directory.server.standalone.daemon.Bootstrapper --StartParams=""{app}#start"" --StopClass=org.apache.directory.server.standalone.daemon.Bootstrapper --StopParams=""{app}#stop"" --Startup=manual --JvmOptions=""-D${app}.home={app}"" --Classpath=""{app}\bin\bootstrapper.jar;{app}\conf;{app}\bin\logger.jar;{app}\bin\daemon.jar"" --LogPath=""{app}\var\log"" --LogPrefix=${app}.log --LogLevel=debug --StdOutput=""{app}\var\log\${app}-stdout.log"" --StdError=""{app}\var\log\${app}-stderr.log"""; Flags: runhidden
+Filename: {app}\bin\${app}.exe; WorkingDir: {app}\bin; Tasks: ; Languages: ; Parameters: "//IS//${app.displayname} --Description=""${app.description} Service ${app.version} - ${app.url}"" --DisplayName=${app.displayname} --Install=""{app}\bin\${app}.exe"" --StartMode=jvm --StopMode=jvm --StartClass=org.apache.directory.server.standalone.daemon.ProcrunBootstrapper --StartMethod prunsrvStart --StartParams=""{app}"" --StopClass=org.apache.directory.server.standalone.daemon.ProcrunBootstrapper --StopMethod prunsrvStop --StopParams=""{app}"" --Startup=manual --JvmOptions=""-D${app}.home={app}"" --Classpath=""{app}\bin\bootstrapper.jar;{app}\conf;{app}\bin\logger.jar;{app}\bin\daemon.jar"" --LogPath=""{app}\var\log"" --LogPrefix=${app}.log --LogLevel=debug --StdOutput=""{app}\var\log\${app}-stdout.log"" --StdError=""{app}\var\log\${app}-stderr.log"""; Flags: runhidden
Filename: {app}\bin\${app}w.exe; Parameters: //ES//${app.displayname}; WorkingDir: {app}\bin; Flags: postinstall nowait; Description: Runs the configuration manager for the ${app} windows service
[Registry]
Modified: directory/trunks/apacheds/standalone/installers/plugin/src/main/resources/org/apache/directory/server/standalone/installers/template.init
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/standalone/installers/plugin/src/main/resources/org/apache/directory/server/standalone/installers/template.init?rev=372980&r1=372979&r2=372980&view=diff
==============================================================================
--- directory/trunks/apacheds/standalone/installers/plugin/src/main/resources/org/apache/directory/server/standalone/installers/template.init (original)
+++ directory/trunks/apacheds/standalone/installers/plugin/src/main/resources/org/apache/directory/server/standalone/installers/template.init Fri Jan 27 12:47:33 2006
@@ -142,8 +142,8 @@
-outfile $SERVER_HOME/var/log/${app}-stdout.log \
-errfile $SERVER_HOME/var/log/${app}-stderr.log \
-cp $CLASSPATH \
- org.apache.directory.server.standalone.daemon.Bootstrapper \
- $_${app.caps}_HOME start
+ org.apache.directory.server.standalone.daemon.JsvcBootstrapper \
+ $_${app.caps}_HOME
if [ `uname` = "Darwin" ] ; then
[ "$RETVAL" -eq 0 ] && echo successful ${app} server startup || \
@@ -174,7 +174,7 @@
-stop \
-pidfile $PID_FILE \
-Dlog4j.configuration=file://$SERVER_HOME/conf/log4j.properties\
- org.apache.directory.server.standalone.daemon.Bootstrapper
+ org.apache.directory.server.standalone.daemon.JsvcBootstrapper
if [ `uname` = "Darwin" ] ; then
[ "$RETVAL" -eq 0 ] && echo successful ${app} server shutdown || \
Modified: directory/trunks/apacheds/standalone/simple/main/src/main/java/org/apache/ldap/server/DirectoryServer.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/standalone/simple/main/src/main/java/org/apache/ldap/server/DirectoryServer.java?rev=372980&r1=372979&r2=372980&view=diff
==============================================================================
--- directory/trunks/apacheds/standalone/simple/main/src/main/java/org/apache/ldap/server/DirectoryServer.java (original)
+++ directory/trunks/apacheds/standalone/simple/main/src/main/java/org/apache/ldap/server/DirectoryServer.java Fri Jan 27 12:47:33 2006
@@ -22,8 +22,10 @@
import javax.naming.Context;
import javax.naming.directory.InitialDirContext;
+import org.apache.directory.server.standalone.daemon.DaemonApplication;
import org.apache.directory.server.standalone.daemon.InstallationLayout;
import org.apache.ldap.server.configuration.MutableServerStartupConfiguration;
+import org.apache.ldap.server.configuration.ShutdownConfiguration;
import org.apache.ldap.server.configuration.SyncConfiguration;
import org.apache.ldap.server.jndi.ServerContextFactory;
@@ -40,13 +42,18 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class DirectoryServer
+public class DirectoryServer implements DaemonApplication
{
private static final Logger log = LoggerFactory.getLogger( DirectoryServer.class );
private Properties env;
+ private Thread workerThread = null;
+ private SynchWorker worker = new SynchWorker();
+ private boolean startNoWait = false;
+ private boolean initialized = false;
+ private boolean started = false;
- public void init( InstallationLayout install ) throws Exception
+ public void init( InstallationLayout install, String[] args ) throws Exception
{
long startTime = System.currentTimeMillis();
MutableServerStartupConfiguration cfg;
@@ -72,6 +79,10 @@
env.putAll( cfg.toJndiEnvironment() );
new InitialDirContext( env );
+ workerThread = new Thread( worker, "SynchWorkerThread" );
+ initialized = true;
+
+
if (log.isInfoEnabled())
{
log.info( "server: started in {} milliseconds", ( System.currentTimeMillis() - startTime ) + "");
@@ -86,12 +97,83 @@
}
- public void stop() throws Exception
+ public void start( boolean nowait )
{
+ startNoWait = nowait;
+
+ if ( nowait )
+ {
+ workerThread.start();
+ started = true;
+ return;
+ }
+
+ started = true;
+ worker.run(); // - blocks here
}
- public void start() throws Exception
+ public void stop( String[] args ) throws Exception
+ {
+ if ( ! initialized || ! started )
+ {
+ log.warn( "stop(String[]) called without calling init() and start()" );
+ log.info( "Might be a procrun invocation as opposed to jsvc so we'll initiate external shutdown procedure" );
+ }
+
+ worker.stop = true;
+ synchronized ( worker.lock )
+ {
+ worker.lock.notify();
+ }
+
+ while ( startNoWait && workerThread.isAlive() )
+ {
+ log.info( "Waiting for SynchWorkerThread to die." );
+ workerThread.join( 500 );
+ }
+
+ env.putAll( new ShutdownConfiguration().toJndiEnvironment() );
+ new InitialDirContext( env );
+ }
+
+
+ public void destroy()
{
+ }
+
+
+ class SynchWorker implements Runnable
+ {
+ Object lock = new Object();
+ boolean stop = false;
+
+ public void run()
+ {
+ while ( ! stop )
+ {
+ synchronized( lock )
+ {
+ try
+ {
+ lock.wait( 20000 );
+ log.debug( "[Delete me] Woke up! Time = " + System.currentTimeMillis() );
+ }
+ catch ( InterruptedException e )
+ {
+ log.error( "SynchWorker failed to wait on lock.", e );
+ }
+ }
+
+ try
+ {
+ synch();
+ }
+ catch ( Exception e )
+ {
+ log.error( "SynchWorker failed to synch directory.", e );
+ }
+ }
+ }
}
}
Modified: directory/trunks/apacheds/standalone/simple/main/src/main/java/org/apache/ldap/server/ServerMain.java
URL: http://svn.apache.org/viewcvs/directory/trunks/apacheds/standalone/simple/main/src/main/java/org/apache/ldap/server/ServerMain.java?rev=372980&r1=372979&r2=372980&view=diff
==============================================================================
--- directory/trunks/apacheds/standalone/simple/main/src/main/java/org/apache/ldap/server/ServerMain.java (original)
+++ directory/trunks/apacheds/standalone/simple/main/src/main/java/org/apache/ldap/server/ServerMain.java Fri Jan 27 12:47:33 2006
@@ -41,17 +41,13 @@
if ( args.length > 0 )
{
- server.init( new InstallationLayout( args[0] ) );
+ server.init( new InstallationLayout( args[0] ), null );
+ server.start( false );
}
else
{
- server.init( null );
- }
-
- while ( true )
- {
- Thread.sleep( 20000 );
- server.synch();
+ server.init( null, null );
+ server.start( false );
}
}
}