Files
bapweb/src/com/eactive/eai/adapter/RequestDispatcher.java
T
Rinjae d6bf8e1943 init
2025-10-23 13:21:43 +09:00

152 lines
5.3 KiB
Java

package com.eactive.eai.adapter;
import java.util.HashMap;
import com.eactive.eai.adapter.socket.service.InboundControl;
import com.eactive.eai.batch.doc.BatchDoc;
import com.eactive.eai.common.exception.ExceptionUtil;
import com.eactive.eai.common.util.Logger;
import com.eactive.eai.inbound.ResponseHandler;
/**
* 1. 기능 : AdapterGroupVO와 AdapterVO 생성
* 2. 처리 개요 :
* - AdapterGroupVO와 AdapterVO 생성
* - Adapter.isStatus()를 통해 어뎁터 상태 확인
* - property에 어뎁터 그룹명, 어뎁터 명, 표준메시지여부, REQUESTACTION class 등록
* - Processor 클래스의 execute(Object message, Properties prop) 호출
* 3. 주의사항
*
* @author :
* @version : v 1.0.0
* @see : AdapterGroupVO, AdapterVO
* @since :
*/
public class RequestDispatcher
{
/**
* Default Logger
*/
static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER);
/**
* RequestDispatcher HashMap
*/
private static HashMap<String, RequestDispatcher> dispatchers = new HashMap<String, RequestDispatcher>();
/**
* 1. 기능 : RequestDispatcher HashMap 객체로 부터
* 요청한 어탭터 그룹의 RequestDispatcher instance 획득
* 2. 처리 개요 :
* - RequestDispatcher HashMap 객체로 부터 요청한 어탭터 그룹의 RequestDispatcher instance 획득
* - RequestDispatcher instance가 없으면 생성 한다.
* 3. 주의사항
*
* @param adapterGroupName 어댑터 그룹명
* @return RequestDispatcher instance
**/
public static RequestDispatcher getRequestDispatcher(String adapterGroupName) {
RequestDispatcher dispatcher = dispatchers.get(adapterGroupName);
if(dispatcher==null) {
dispatcher = new RequestDispatcher(adapterGroupName);
dispatchers.put(adapterGroupName, dispatcher);
}
return dispatcher;
}
/**
* 어댑터 그룹명
*/
private String adapterGroupName;
/**
* 1. 기능 : Default Constructor
* 2. 처리 개요 :
* - 어댑터 그룹명 초기화
* - ProcessorFactory instance 생성
* 3. 주의사항
*
* @param adapterGroupName 어댑터 그룹명
**/
private RequestDispatcher(String adapterGroupName) {
this.adapterGroupName = adapterGroupName;
}
/**
* 1. 기능 : Processor 클래스의 execute(Object message, Properties prop) 호출
* 2. 처리 개요 :
* - 어댑터 프라퍼티를 설정하고 Processor Class의
* execute(Object message, Properties prop) method 호출
* - 리턴된 메시지 객체를 반환
* 3. 주의사항
*
* @param adapterName 어댑터명
* @param message 요청 메시지
* @param prop 어댑터 프라퍼티
* @return Object Processor로 부터 리턴된 message Object
* @exception Exception Adapter가 없거나 액티브 상태가 아닐때, 프라퍼티 설정 오류 시 발생
**/
//public BatchDoc handle(InboundControl control) throws Exception {
public void handle(InboundControl control) throws Exception {
logger.debug("[ELINK]################ RequestDispatcher.handle() 호출됨.");
long srtTime = 0;
srtTime = System.currentTimeMillis();
String adapterName = control.getAdapterName();
AdapterManager manager = AdapterManager.getInstance();
AdapterGroupVO group = manager.getAdapterGroupVO(this.adapterGroupName);
if(group == null) {
String code = "BECEAIMAD042";
String[] msgArgs = new String[2];
msgArgs[0] = adapterGroupName;
msgArgs[1] = adapterName;
String errText = ExceptionUtil.make(code, msgArgs);
if (logger.isError()) logger.error(errText);
throw new Exception(errText);
}
AdapterVO adapter = group.getAdapterVO(adapterName);
if(adapter==null) {
String code = "BECEAIMAD022";
String[] msgArgs = new String[3];
msgArgs[0] = adapterGroupName;
msgArgs[1] = adapterName;
msgArgs[2] = group.toString();
String errText = ExceptionUtil.make(code, msgArgs);
if (logger.isError()) logger.error(errText);
throw new Exception(errText);
}
if(!adapter.isStatus()) {
String code = "BECEAIMAD023";
String[] msgArgs = new String[1];
msgArgs[0] = adapter.toString();
String errText = ExceptionUtil.make(code, msgArgs);
if (logger.isError()) logger.error(errText);
throw new Exception(errText);
}
//BatchDoc batchMsgDoc = null;
try {
group.increase();
ResponseHandler handler = new ResponseHandler();
BatchDoc batchMsgDoc = handler.execute(control.getBatchMsgDoc());
control.setBatchMsgDoc(batchMsgDoc);
////batchMsgDoc = handler.execute(control.getBatchMsgDoc());
} catch(Exception e) {
throw new Exception(ExceptionUtil.getErrorCode(e, "BECEAIMAD025"));
} finally {
group.decrease();
}
logger.debug("[ELINK]################ RequestDispatcher.handle() 종료. (수행 시간: "+ ((System.currentTimeMillis() - srtTime)/1000.0) +" Sec)");
//return batchMsgDoc;
}
}