package com.eactive.eai.batch.rule.dirInfo; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import com.eactive.eai.common.util.Logger; public class BatchJobPriorityManager implements Serializable { private static final long serialVersionUID = 1L; // 파일로거 private static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT); private static BatchJobPriorityManager instance = new BatchJobPriorityManager(); private HashMap> hmPrioritys; private HashMap hmDelays; private BatchJobPriorityManager() { hmPrioritys = new HashMap>(); hmDelays = new HashMap(); } public static BatchJobPriorityManager getInstance() { return instance; } public synchronized void addJobPriorityData(String key, ArrayList list) { Object obj = hmPrioritys.get(key); if (obj != null) { logger.warn("[ BatchJobPriorityManager ] addJobPriorityData >> UUID["+key+"] 에 이미 데이터가 있습니다." + obj); hmPrioritys.remove(key); } hmPrioritys.put(key, list); } public synchronized ArrayList getPriorityData(String key) { return hmPrioritys.get(key); } public synchronized void setPriorityData(String key, ArrayList hm) { hmPrioritys.remove(key); hmPrioritys.put(key, hm); } public synchronized void delPriorityData(String key) { this.hmPrioritys.remove(key); } public synchronized int getPriorityDataCount() { return hmPrioritys.size(); } public synchronized boolean isExecutePrePriority (String key, String bizCode) throws Exception{ try { ArrayList list = getPriorityData(key); if (list != null && list.size() > 0){ for (int i=0; i < list.size(); i++){ BatchJobPriorityVO bjpvo = (BatchJobPriorityVO)list.get(i); if (bizCode.equals(bjpvo.getBizCode())){ if (i == 0){//첫번째 우선순위 목록에 있으면 무조건 선순위 작업 실행 여부는 true. return true; }else { BatchJobPriorityVO pjpvo = (BatchJobPriorityVO)list.get(i-1); if (pjpvo !=null){ return pjpvo.isExecuted(); } } } } }else { return false; } }catch (Exception e){ logger.error("[ BatchJobPriorityManager ] 배치우선작업 처리 여부 확인 시 에러가 발생했습니다. - "+e.getMessage()); throw new Exception ("[ BatchJobPriorityManager ] 배치우선작업 처리 여부 확인 시 에러가 발생했습니다. - "+e.getMessage()); } return false; } public synchronized void updateExecuteJobList(String key, String bizCode, String uuid, String fileName)throws Exception{ try{ ArrayList list = getPriorityData(key); if (list != null && list.size() > 0){ for (int i=0; i < list.size(); i++){ BatchJobPriorityVO bjpvo = (BatchJobPriorityVO)list.get(i); if (bizCode.equals(bjpvo.getBizCode())){ bjpvo.setUUID(uuid); bjpvo.setFileName(fileName); bjpvo.setExecutedFlag(true); } } } }catch (Exception e){ logger.error("[ BatchJobPriorityManager] 배치우선작업 처리 결과 변경시 에러가 발생했습니다. - "+e.getMessage()); throw new Exception ("[ BatchJobPriorityManager] 배치우선작업 처리처리 결과 변경시 에러가 발생했습니다. - "+e.getMessage()); } } public synchronized BatchJobPriorityVO getPriorityDatabyBizCode(String key, String bizCode)throws Exception{ try { ArrayList list = getPriorityData(key); BatchJobPriorityVO bjpvo = null; if (list != null && list.size() > 0){ for (int i=0; i < list.size(); i++){ bjpvo = (BatchJobPriorityVO)list.get(i); if (bizCode.equals(bjpvo.getBizCode())){ break; } } } return bjpvo; }catch (Exception e){ logger.error("[ BatchJobPriorityManager ] 배치우선작업 처리 여부 확인 시 에러가 발생했습니다. - "+e.getMessage()); throw new Exception ("[ BatchJobPriorityManager ] 배치우선작업 처리 여부 확인 시 에러가 발생했습니다. - "+e.getMessage()); } } public synchronized HashMap> getPriorityDatas() { return hmPrioritys; } public String[] getPriorityKeys() { Iterator it = this.hmPrioritys.keySet().iterator(); String[] key = new String[this.hmPrioritys.size()]; for(int i=0;it.hasNext();i++) { key[i] = (String)it.next(); } Arrays.sort(key); return key; } public synchronized void setDelaySec(String uuid, long sec){ hmDelays.put(uuid, sec); } public synchronized boolean hasDelaySec(String uuid){ return hmDelays.containsKey(uuid); } public synchronized long getDelaySec(String uuid){ long delay = 0; try { delay = (hmDelays.get(uuid)).longValue(); }catch (Exception e){ logger.error("[ BatchJobPriorityManager ] Delay seconds 를 가져오는데 실패했습니다.- " + e.getMessage()); delay = -1; //값변환시 에러이면 -1을 반환.. } return delay; } public synchronized void removeDelaySec(String uuid){ try{ hmDelays.remove(uuid); }catch (Exception e){ logger.error("[ BatchJobPriorityManager ] removeDelaySec - Delay seconds 를 초기화 하는데 실패했습니다.- "+e.getMessage()); } } }