JOB改造-小型机增删改查

本文介绍了一种基于多线程的任务处理系统,包括创建、更新、删除小型机等操作的具体实现流程,并详细解释了如何通过异步任务查询执行状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的方式进行改造


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值