/*
* Copyright 2014 LinkedIn, Inc
*
* 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 azkaban.executor;
import java.io.File;
import java.util.List;
import java.util.StringTokenizer;
import org.apache.log4j.Logger;
import azkaban.jobExecutor.JavaProcessJob;
import azkaban.utils.Props;
public class JavaJob extends JavaProcessJob {
public static final String RUN_METHOD_PARAM = "method.run";
public static final String CANCEL_METHOD_PARAM = "method.cancel";
public static final String PROGRESS_METHOD_PARAM = "method.progress";
public static final String JOB_CLASS = "job.class";
public static final String DEFAULT_CANCEL_METHOD = "cancel";
public static final String DEFAULT_RUN_METHOD = "run";
public static final String DEFAULT_PROGRESS_METHOD = "getProgress";
private String _runMethod;
private String _cancelMethod;
private String _progressMethod;
private Object _javaObject = null;
private String props;
public JavaJob(String jobid, Props sysProps, Props jobProps, Logger log) {
super(jobid, sysProps, new Props(sysProps, jobProps), log);
}
@Override
protected List<String> getClassPaths() {
List<String> classPath = super.getClassPaths();
classPath.add(getSourcePathFromClass(JavaJobRunnerMain.class));
classPath.add(getSourcePathFromClass(Props.class));
String loggerPath = getSourcePathFromClass(org.apache.log4j.Logger.class);
if (!classPath.contains(loggerPath)) {
classPath.add(loggerPath);
}
// Add hadoop home to classpath
String hadoopHome = System.getenv("HADOOP_HOME");
if (hadoopHome == null) {
info("HADOOP_HOME not set, using default hadoop config.");
} else {
info("Using hadoop config found in " + hadoopHome);
classPath.add(new File(hadoopHome, "conf").getPath());
}
return classPath;
}
private static String getSourcePathFromClass(Class<?> containedClass) {
File file =
new File(containedClass.getProtectionDomain().getCodeSource()
.getLocation().getPath());
if (!file.isDirectory() && file.getName().endsWith(".class")) {
String name = containedClass.getName();
StringTokenizer tokenizer = new StringTokenizer(name, ".");
while (tokenizer.hasMoreTokens()) {
tokenizer.nextElement();
file = file.getParentFile();
}
return file.getPath();
} else {
return containedClass.getProtectionDomain().getCodeSource().getLocation()
.getPath();
}
}
@Override
protected String getJavaClass() {
return JavaJobRunnerMain.class.getName();
}
@Override
public String toString() {
return "JavaJob{" + "_runMethod='" + _runMethod + '\''
+ ", _cancelMethod='" + _cancelMethod + '\'' + ", _progressMethod='"
+ _progressMethod + '\'' + ", _javaObject=" + _javaObject + ", props="
+ props + '}';
}
}