package org.exist.yajsw;
import org.exist.start.Classpath;
import org.rzo.yajsw.app.WrapperJVMMain;
import java.lang.reflect.Method;
import java.nio.file.Path;
import java.util.Observable;
import java.util.Observer;
/**
*
*/
public class Main implements Observer, Comparable {
public static final int WAIT_HINT_UPDATE = 10000;
public Main() {
}
public void start(String[] args) {
try {
// use the bootstrap loader to autodetect EXIST_HOME and
// construct a correct classpath
final org.exist.start.Main loader = new org.exist.start.Main(args[0]);
final Path homeDir = loader.detectHome();
final Classpath classpath = loader.constructClasspath(homeDir, args);
final ClassLoader cl = classpath.getClassLoader(null);
Thread.currentThread().setContextClassLoader(cl);
final Class<?> klazz = cl.loadClass("org.exist.jetty.JettyStart");
// find the run() method in the class
final Class<?>[] methodParamTypes = new Class[2];
methodParamTypes[0] = args.getClass();
methodParamTypes[1] = Observer.class;
final Method method = klazz.getDeclaredMethod("run", methodParamTypes);
// create a new instance and invoke the run() method
final Object app = klazz.newInstance();
final String[] myArgs = new String[args.length - 1];
for (int i = 1; i < args.length; i++)
myArgs[i - 1] = args[i];
final Object[] params = new Object[2];
params[0] = myArgs;
params[1] = this;
method.invoke(app, params);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void update(Observable o, Object arg) {
if ("shutdown".equals(arg)) {
WrapperJVMMain.WRAPPER_MANAGER.signalStopping(WAIT_HINT_UPDATE);
} else if ("started".equals(arg)) {
WrapperJVMMain.WRAPPER_MANAGER.reportServiceStartup();
}
}
public static void main(String[] args) {
final Main main = new Main();
main.start(args);
}
@Override
public int compareTo(Object o) {
return o == this ? 0 : -1;
}
}