public void execute(JobExecutionContext context) throws JobExecutionException {
try {
Object[] params=null;
String[] types=null;
String objName = null;
String objMethod = null;
JobDataMap jobDataMap = context.getMergedJobDataMap();
String[] keys = jobDataMap.getKeys();
for (int i = 0; i < keys.length; i++) {
String value = jobDataMap.getString(keys[i]);
if ("JMX_OBJECTNAME".equalsIgnoreCase(keys[i])) {
objName = value;
} else if ("JMX_METHOD".equalsIgnoreCase(keys[i])) {
objMethod = value;
} else if("JMX_PARAMDEFS".equalsIgnoreCase(keys[i])) {
String[] paramdefs=split(value, ",");
params=new Object[paramdefs.length];
types=new String[paramdefs.length];
for(int k=0;k< paramdefs.length;k++) {
String parts[]= split(paramdefs[k], ":");
if (parts.length< 2) {
throw new Exception("Invalid parameter definition: required parts missing "+paramdefs[k]);
}
switch(parts[0].charAt(0)) {
case 'i":
params[k]=new Integer(jobDataMap.getString(parts[1]));
types[k]=Integer.TYPE.getName();
break;
case 'I":
params[k]=new Integer(jobDataMap.getString(parts[1]));
types[k]=Integer.class.getName();
break;
case 'l":
params[k]=new Long(jobDataMap.getString(parts[1]));
types[k]=Long.TYPE.getName();
break;
case 'L":
params[k]=new Long(jobDataMap.getString(parts[1]));
types[k]=Long.class.getName();
break;
case 'f":
params[k]=new Float(jobDataMap.getString(parts[1]));
types[k]=Float.TYPE.getName();
break;
case 'F":
params[k]=new Float(jobDataMap.getString(parts[1]));
types[k]=Float.class.getName();
break;
case 'd":
params[k]=new Double(jobDataMap.getString(parts[1]));
types[k]=Double.TYPE.getName();
break;
case 'D":
params[k]=new Double(jobDataMap.getString(parts[1]));
types[k]=Double.class.getName();
break;
case 's":
params[k]=new String(jobDataMap.getString(parts[1]));
types[k]=String.class.getName();
break;
case 'b":
params[k]=new Boolean(jobDataMap.getString(parts[1]));
types[k]=Boolean.TYPE.getName();
break;
case 'B":
params[k]=new Boolean(jobDataMap.getString(parts[1]));
types[k]=Boolean.class.getName();
break;
}
}
}
}
if (objName==null || objMethod==null) {
throw new Exception("Required parameters missing");
}
context.setResult(invoke(objName, objMethod, params, types));
} catch (Exception e) {
String m = "Caught a " + e.getClass().getName() + " exception : " + e.getMessage();
getLog().error(m, e);
throw new JobExecutionException(m, e, false);
}
}
|