package com.dgrid.handlers;
import java.lang.reflect.Method;
import com.dgrid.api.BaseJobletTypeHandler;
import com.dgrid.api.JobletTypeHandler;
import com.dgrid.gen.JOB_STATUS;
import com.dgrid.gen.Joblet;
import com.dgrid.gen.JobletResult;
import com.dgrid.service.DGridClient;
public class JavaAppJobletTypeHandler extends BaseJobletTypeHandler implements
JobletTypeHandler {
public static final String CLASS_NAME_PARAM = "class";
public static final String METHOD_NAME_PARAM = "method";
public static final String STATIC_PARAM = "static";
private static final Class[] defaultMethodArgClasses = new Class[] {};
private static final Class[] mainMethodArgClasses = new Class[] { String[].class };
private static final Object[] defaultMethodArgs = new Object[] {};
private static final Object[] mainMethodArgs = new Object[] { new String[] {} };
public JobletResult execute(Joblet joblet, DGridClient gridClient)
throws Exception {
log.trace("execute()");
long start = System.currentTimeMillis();
String className = joblet.getParameters().get(CLASS_NAME_PARAM);
String methodName = joblet.getParameters().get(METHOD_NAME_PARAM);
boolean isStatic = Boolean.parseBoolean(joblet.getParameters().get(
STATIC_PARAM));
Class[] methodArgClasses = null;
Object[] methodArgs = null;
if (("main".equals(methodName)) && (isStatic == true)) {
methodArgClasses = mainMethodArgClasses;
methodArgs = mainMethodArgs;
} else {
methodArgClasses = defaultMethodArgClasses;
methodArgs = defaultMethodArgs;
}
Class cls = Class.forName(className);
Method method = cls.getMethod(methodName, methodArgClasses);
Object instance = null;
if (!isStatic)
instance = cls.newInstance();
Object retval = method.invoke(instance, methodArgs);
JobletResult result = null;
String s = (retval != null) ? retval.toString() : "";
result = new JobletResult(0, 0l, 0,
(System.currentTimeMillis() - start), JOB_STATUS.COMPLETED, s,
joblet);
return result;
}
}