package org.jai.oozie;
import org.apache.oozie.client.rest.RestConstants;
import org.apache.oozie.local.LocalOozie;
import org.apache.oozie.service.CallbackService;
import org.apache.oozie.service.Services;
import org.apache.oozie.service.XLogService;
import org.apache.oozie.servlet.CallbackServlet;
import org.apache.oozie.servlet.V0JobServlet;
import org.apache.oozie.servlet.V1JobServlet;
import org.apache.oozie.servlet.V1JobsServlet;
import org.apache.oozie.servlet.V2JobServlet;
import org.apache.oozie.servlet.VersionServlet;
import org.apache.oozie.test.EmbeddedServletContainer;
import org.apache.oozie.util.XLog;
public class JaiLocalOozie extends LocalOozie {
private static EmbeddedServletContainer container;
private static boolean localOozieActive = false;
public synchronized static void start() throws Exception {
if (localOozieActive) {
throw new IllegalStateException("LocalOozie is already initialized");
}
String log4jFile = System.getProperty(XLogService.LOG4J_FILE, null);
String oozieLocalLog = System.getProperty("oozielocal.log", null);
if (log4jFile == null) {
System.setProperty(XLogService.LOG4J_FILE,
"localoozie-log4j.properties");
}
if (oozieLocalLog == null) {
System.setProperty("oozielocal.log", "./oozielocal.log");
}
localOozieActive = true;
new Services().init();
if (log4jFile != null) {
System.setProperty(XLogService.LOG4J_FILE, log4jFile);
} else {
System.getProperties().remove(XLogService.LOG4J_FILE);
}
if (oozieLocalLog != null) {
System.setProperty("oozielocal.log", oozieLocalLog);
} else {
System.getProperties().remove("oozielocal.log");
}
container = new EmbeddedServletContainer("oozie");
container.addServletEndpoint("/callback", CallbackServlet.class);
container.addServletEndpoint("/" + RestConstants.VERSIONS,
VersionServlet.class);
container.addServletEndpoint("/v0/job/*", V0JobServlet.class);
container.addServletEndpoint("/v1/job/*", V1JobServlet.class);
container.addServletEndpoint("/v2/job/*", V2JobServlet.class);
container.addServletEndpoint("/v1/jobs", V1JobsServlet.class);
container.addServletEndpoint("/v2/jobs", V1JobsServlet.class);
// container.addServletEndpoint("/" + RestConstants.JOBS,
// VersionServlet.class);
// container.addServletEndpoint("/" + RestConstants.JOBS,
// VersionServlet.class);
// container.
container.start();
String callbackUrl = container.getServletURL("/callback");
Services.get().getConf()
.set(CallbackService.CONF_BASE_URL, callbackUrl);
XLog.getLog(LocalOozie.class).info(
"LocalOozie started callback set to [{0}]", callbackUrl);
}
public synchronized static void stop() {
RuntimeException thrown = null;
try {
if (container != null) {
container.stop();
}
} catch (RuntimeException ex) {
thrown = ex;
}
container = null;
XLog.getLog(LocalOozie.class).info("LocalOozie stopped");
try {
Services.get().destroy();
} catch (RuntimeException ex) {
if (thrown != null) {
thrown = ex;
}
}
localOozieActive = false;
if (thrown != null) {
throw thrown;
}
}
}