CLASS:
AsyncJobInfo---t_scs_asyncjob表
private int ID;
private int ORDER_ID;
private int INSTANCE_INFO_ID;
private int APPLY_ID;
private StringOPERATION;
private StringPARAMETER;
private int JOBSTATE;
private int JOBID;
private int RESID = 0;
private DateCREATE_DT;
private StringCOMMON;
private int HOSTID;
private String APPID;
多线程处理任务
同步加锁:
if (jobInfo.getOPERATION().equals(TaskContext.OperateType.MCCREATEREQ.getCode()) && jobInfo.getRESID() == 0) {
resultId = createServer(jobInfo);
operation = TaskContext.OperateType.MCCREATEREQ.getCode();
continue;
}
// 删除小机
if (jobInfo.getOPERATION().equals(TaskContext.OperateType.MCREMOVEREQ.getCode()) && jobInfo.getRESID() == 0) {
resultId = removeServer(jobInfo);
operation = TaskContext.OperateType.MCREMOVEREQ.getCode();
continue;
}
// 小机修改
if (jobInfo.getOPERATION().equals(TaskContext.OperateType.MCUPDATEREQ.getCode()) && jobInfo.getRESID() == 0) {
resultId = updateServer(jobInfo);
continue;
}
// 模板创建
if (jobInfo.getOPERATION().equals(TaskContext.OperateType.CREATETEMPLATE.getCode()) && jobInfo.getRESID() == 0) {
resultId = this.createTemplate(jobInfo, result);
if (resultId[1] == 0) {// 任务没有执行完成,后续任务退出,等待下次轮训
break;
}
continue;
}
// 模板删除
if (jobInfo.getOPERATION().equals(TaskContext.OperateType.DELETETEMPLATE.getCode()) && jobInfo.getRESID() == 0) {
resultId = this.deleteTemplate(jobInfo, result);
if (resultId[1] == 0) {// 任务没有执行完成,后续任务退出,等待下次轮训
break;
}
continue;
}
TaskQueue extendsBaseObjectà单例模式:logger
BaseTaskOperate:
1、getJobResult(AsyncJobInfo jobInfo)
Input: AsyncJobInfo jobInfo
查询小型机任务执行状态更新至t_scs_asyncjob表中的RESID
PENDING(0, "等待运行"), SUCCESS(1, "运行成功"), FAILURE(2, "运行失败"), RUNNING(3, "正在运行");
private MCAsyncJob getJobResult(AsyncJobInfo jobInfo) {
try {
ClientResponse response;
MCAsyncJob mcasynJob = new MCAsyncJob();
init(REST_WEBSERVICE_QUEYURL + "/" + jobInfo.getJOBID());
logger.debug(" Requests the URL address:" + REST_WEBSERVICE_QUEYURL + "/" + jobInfo.getJOBID());
response = service.type(MediaType.APPLICATION_JSON).get(ClientResponse.class);
JSONObject resultJosn = response.getEntity(JSONObject.class);
logger.debug("Call the small machine status query returns the JSON string:" + resultJosn.toString());
mcasynJob = (MCAsyncJob) JsonUtil.getObject4JsonString(fromJsonToKeyValue(resultJosn.toString(), "job"), MCAsyncJob.class);
if (mcasynJob.getStatus() == TaskContext.STATUS_ASYNCJOB.SUCCESS.getCode()) {
jobInfo.setRESID(Integer.valueOf(mcasynJob.getResult()));
this.updateJobResId(jobInfo, mcasynJob.getResult());
// break;
} else if (mcasynJob.getStatus() == TaskContext.STATUS_ASYNCJOB.FAILURE.getCode()) {
logger.error("Query Job get fail of result. The Job is end.");
jobInfo.setRESID(-1);
updateJobInfoResIdAndStautsFail(jobInfo);
saveJobErrorInfo(mcasynJob, jobInfo.getID());
// 更新实例失败后的状态
updateInstanceStateFail(jobInfo);
throw new RuntimeException("Query Job get fail of result. The Job is end.");
} else {
logger.info("Job is runing....please wait moment." + jobInfo.getID());
}
return mcasynJob;
} catch (Exception e) {
logger.error("Execute [BaseTaskOperate] method: getJobResult Exception", e);
throw new RuntimeException("Execute [BaseTaskOperate] method: getJobResult Exception:" + e.getMessage());
}
}
2、createServer(AsyncJobInfo jobInfo)
创建过程:
init(REST_WEBSERVICE_CREATEURL);
if (JSONObject.fromObject(jobInfo.getPARAMETER()).containsKey("mccreateReq")) {
logger.debug("createServer Requests the URL address:" + REST_WEBSERVICE_CREATEURL);
init(REST_WEBSERVICE_CREATEURL);
MCCreateReq request = fromJsonToMcphyServer(jobInfo.getPARAMETER(), jobInfo.getOPERATION());
response = service.entity(request, MediaType.APPLICATION_JSON).post(ClientResponse.class);
} else if (JSONObject.fromObject(jobInfo.getPARAMETER()).containsKey("IBMLparCreateReq")) {
String ibmUrl = RestUtils.getMCApiUrl() + "/ibm";
logger.debug("createIBMServer Requests the URL address:" + ibmUrl);
WebResource resource = RestClient.getClient().resource(ibmUrl + "/lpar/create");
JSONObject jsonObj = JSONObject.fromObject(jobInfo.getPARAMETER());
JSONObject ibmreq = jsonObj.getJSONObject("IBMLparCreateReq");
IBMLparCreateReq req = new IBMLparCreateReq();
req.setTemplateId(ibmreq.getInt("templateId"));
req.setUserId(ibmreq.getString("userId"));
req.setVmName(ibmreq.getString("vmName"));
response = resource.entity(req, MediaType.APPLICATION_JSON).post(ClientResponse.class);
}
JSONObject resultJosn = response.getEntity(JSONObject.class);
logger.info("createServer get json:" + resultJosn.toString());
String resultJobId = this.fromJsonToKeyValue(resultJosn.toString(), "jobId");
if (StringUtils.isBlank(resultJobId)) {
logger.error("Get JobId Exception:JobId is Null");
throw new RuntimeException("Get JobId Exception: JobId is Null");
}
jobInfo.setJOBID(Integer.valueOf(resultJobId));
updateJobJobId(jobInfo, resultJobId);// 更新JOBId
}
jobInfo.setCOMMON(String.valueOf(InstanceState.CREATEFAIL.getValue()));
getJobResult(jobInfo);
return getResultAssignIntanceInfoArray(jobInfo);
} catch (Exception e) {
logger.error("Execute [BaseTaskOperate] method : createServer Exception", e);
throw new RuntimeException("Execute [BaseTaskOperate] method : createServer Exception" + e.getMessage());
} finally {
TaskConstants.ASYNCJOBINFO_MAP.remove(jobInfo.getID());// 从内存中删除该消息的任务
}
SUN的和IBM的小型机
其中下面的代码是把创建的操作更新到数据库
jobInfo.setJOBID(Integer.valueOf(resultJobId));
updateJobJobId(jobInfo, resultJobId);// 更新JOBId
2、removeServer(AsyncJobInfo jobInfo)
删除小型机:
protected int[] removeServer(AsyncJobInfo jobInfo) {
try {
if (jobInfo.getJOBID() == 0) {
ClientResponse response = null;
if (JSONObject.fromObject(jobInfo.getPARAMETER()).containsKey("mcremoveReq")) {
logger.debug("removeServer Requests the URL address:" + REST_WEBSERVICE_RMURL);
init(REST_WEBSERVICE_RMURL);//swf --buzhidao
MCOperateReq request = fromJsonToMCOperateReq(jobInfo.getPARAMETER(), jobInfo.getOPERATION());
response = service.entity(request, MediaType.APPLICATION_JSON).post(ClientResponse.class);
} else if (JSONObject.fromObject(jobInfo.getPARAMETER()).containsKey("IBMLparOperateReq")) {
String ibmUrl = RestUtils.getMCApiUrl() + "/ibm";
logger.debug("removeIBMServer Requests the URL address:" + ibmUrl);
WebResource resource = RestClient.getClient().resource(ibmUrl + "/lpar/remove");
JSONObject jsonObj = JSONObject.fromObject(jobInfo.getPARAMETER());
JSONObject ibmreq = jsonObj.getJSONObject("IBMLparOperateReq");
IBMLparOperateReq req = new IBMLparOperateReq();
req.setUserId(ibmreq.getString("userId"));
req.setVmId(ibmreq.getString("vmId"));
response = resource.entity(req, MediaType.APPLICATION_JSON).post(ClientResponse.class);
}
JSONObject resultJosn = response.getEntity(JSONObject.class);
logger.debug("removeServer get json :" + resultJosn.toString());
String resultJobId = this.fromJsonToKeyValue(resultJosn.toString(), "jobId");
if (StringUtils.isBlank(resultJobId)) {
logger.error("Get JobId Exception:JobId is Null");
throw new RuntimeException("Get JobId Exception:JobId is Null");
}
jobInfo.setJOBID(Integer.valueOf(resultJobId));
updateJobJobId(jobInfo, resultJobId);// 更新JOBId
}
jobInfo.setCOMMON(String.valueOf(InstanceState.AVAILABLE.getValue()));
getJobResult(jobInfo);
return getResultAssignIntanceInfoArray(jobInfo);
} catch (Exception e) {
logger.error("Execute [BaseTaskOperate] method: removeIBMServer Exception", e);
throw new RuntimeException("Execute [BaseTaskOperate] method: removeIBMServer Exception" + e.getMessage());
} finally {
TaskConstants.ASYNCJOBINFO_MAP.remove(jobInfo.getID());// 从内存中删除该消息的任务
}
}
与创建小型机的函数就差了一个参数templateID以及UIR不同
4、修改小型机
updateServer(AsyncJobInfo jobInfo)
protected int[] updateServer(AsyncJobInfo jobInfo) {
try {
if (jobInfo.getJOBID() == 0) {
ClientResponse response = null;
if (JSONObject.fromObject(jobInfo.getPARAMETER()).containsKey("mcupdateReq")) {
logger.debug("updateServer Requests the URL address:" + REST_WEBSERVICE_UPDATEURL);
init(REST_WEBSERVICE_UPDATEURL);
MCUpdateReq request = fromJsonToMcUpdateReq(jobInfo.getPARAMETER(), jobInfo.getOPERATION());
response = service.entity(request, MediaType.APPLICATION_JSON).post(ClientResponse.class);
}else if(JSONObject.fromObject(jobInfo.getPARAMETER()).containsKey("IBMmcupdateReq")){
String ibmUrl = RestUtils.getMCApiUrl() + "/ibm";
logger.debug("updateIBMServer Requests the URL address:" + ibmUrl);
WebResource resource = RestClient.getClient().resource(ibmUrl + "/lpar/update");
JSONObject jsonObj = JSONObject.fromObject(jobInfo.getPARAMETER());
JSONObject ibmreq = jsonObj.getJSONObject("IBMmcupdateReq");
IBMLparUpdateReq req = new IBMLparUpdateReq();
req.setTemplateId(ibmreq.getInt("templateId"));
req.setUserId(ibmreq.getString("userId"));
req.setVmId(ibmreq.getString("vmId"));
req.setVmName(ibmreq.getString("vmName"));
response = resource.entity(req, MediaType.APPLICATION_JSON).post(ClientResponse.class);
}
JSONObject resultJosn = response.getEntity(JSONObject.class);
logger.info("updateServer get json:" + resultJosn.toString());
String resultJobId = this.fromJsonToKeyValue(resultJosn.toString(), "jobId");
if (StringUtils.isBlank(resultJobId)) {
logger.error("Get JobId Exception:JobId is Null");
throw new RuntimeException("Get JobId Exception: JobId is Null");
}
jobInfo.setJOBID(Integer.valueOf(resultJobId));
updateJobJobId(jobInfo, resultJobId);// 更新JOBId
}
jobInfo.setCOMMON(String.valueOf(InstanceState.AVAILABLE.getValue()));
getJobResult(jobInfo);
return getResultAssignIntanceInfoArray(jobInfo);
} catch (Exception e) {
logger.error("Execute [BaseTaskOperate] method : updateServer Exception", e);
throw new RuntimeException("Execute [BaseTaskOperate] method : updateServer Exception" + e.getMessage());
} finally {
TaskConstants.ASYNCJOBINFO_MAP.remove(jobInfo.getID());// 从内存中删除该消息的任务
}
}
5、List<ListZones> ListZones()显示zonelist
Output:更新result之后的mcasynJob对象
查询小型机执行操作的状态
Basethread:获取小型机创建、更新、操作、删除对象JSON->object
请求的获取:
都是通过下面的操作获取请求
response = service.type(MediaType.APPLICATION_JSON).get(ClientResponse.class);
JSONObject resultJosn = response.getEntity(JSONObject.class);
综上所述:
可以得到以下结论
1、命令源自:
response 参数也在这里面获取,把JSON解析为对象
2、命令的执行通过
a)多线程
b)taskthread--->baseoperation--->basethread
3、代码重构:重复性很强可以用mybatis的方式进行改造