init
This commit is contained in:
@@ -0,0 +1,262 @@
|
||||
package com.eactive.eai.common.routing;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.eactive.eai.adapter.AdapterGroupVO;
|
||||
import com.eactive.eai.adapter.AdapterManager;
|
||||
import com.eactive.eai.adapter.AdapterVO;
|
||||
import com.eactive.eai.common.exception.ExceptionUtil;
|
||||
import com.eactive.eai.common.message.EAIMessage;
|
||||
import com.eactive.eai.common.message.EAIMessageKeys;
|
||||
import com.eactive.eai.common.message.ServiceMessage;
|
||||
import com.eactive.eai.common.property.PropManager;
|
||||
import com.eactive.eai.common.server.EAIServerManager;
|
||||
import com.eactive.eai.common.server.EAIServerVO;
|
||||
import com.eactive.eai.common.server.Keys;
|
||||
import com.eactive.eai.common.util.Logger;
|
||||
|
||||
/**
|
||||
* 1. 기능 : Flow Control에서 Outbound 를 호출하기 위한 Router
|
||||
* 2. 처리 개요 :
|
||||
* * - FlowControl에서 Outbound 를 호출한다.
|
||||
* 3. 주의사항
|
||||
*
|
||||
* @author :
|
||||
* @version : v 1.0.0
|
||||
* @see : 관련 기능을 참조
|
||||
* @since :
|
||||
* :
|
||||
*/
|
||||
public class IFRouter
|
||||
{
|
||||
public static final String IFROUTER_ERROR_LOCAL = "RECEAICIR001"; // Local JPD 호출 오류
|
||||
public static final String IFROUTER_ERROR_LOCK = "RECEAICIR002"; // Error발생하여 Failover가 불가능함(FailOver Flag=false)
|
||||
public static final String IFROUTER_ERROR_REMOTE = "RECEAICIR003"; // FailOver증 JPD 호출 오류
|
||||
public static final String IFROUTER_INVALID_ROUT = "RECEAICIR099"; // Outbound 이외의 Process를 호출하고록 설정된 경우
|
||||
|
||||
static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
|
||||
|
||||
/**
|
||||
* 1. 기능 : FlowCOntrol에서 Outbound Process로 라우팅하는 기능을 제공
|
||||
* 2. 처리 개요 :
|
||||
* - FlowControl에서 전달받은 EAIMessage의 Routing명을 통해 JPDProxy 방식으로 EAIMessage를 전달한다.
|
||||
* 3. 주의사항
|
||||
*
|
||||
* @param eaiMessage Inbound에서 생성한 EAI표준메시지
|
||||
* @param callProp 라우팅을 위한 환경값(추가적으로 보낼 인자가 있을 경우 사용)
|
||||
* @return EAIMessage Outbound Process로부터 처리된 결과가 리턴됨
|
||||
* @exception
|
||||
**/
|
||||
public static EAIMessage process(EAIMessage eaiMessage, Properties callProp) throws Exception {
|
||||
ServiceMessage service = ((ServiceMessage)eaiMessage.getSvcMsgs().get( eaiMessage.getSvcPssSeq() - 1 ));
|
||||
String routingName = service.getOutbRtnNm();
|
||||
boolean isLocal = true; // EAIMessage내의 수동시스템인터페이스유형(AdapterGroupName)
|
||||
|
||||
// String guidLogPrefix = "IFRouter] GUID["+eaiMessage.getKbMsg().getKBHeader().getGuIdNo()+"] UUID["+eaiMessage.getSvcOgNo()+"] ";
|
||||
String guidLogPrefix = "IFRouter] GUID["+eaiMessage.getMapper().getGuid(eaiMessage.getStandardMessage())+"] UUID["+eaiMessage.getSvcOgNo()+"] ";
|
||||
|
||||
// TAS 거래는 Local Call 로 처리하도록 한다. (2019.03.04)
|
||||
EAIServerManager eaiServerManager = EAIServerManager.getInstance();
|
||||
if(eaiServerManager.isTASEnabledEAIServer()) {
|
||||
AdapterManager adapterManager = AdapterManager.getInstance();
|
||||
AdapterGroupVO adptGrpVO = adapterManager.getAdapterGroupVO(service.getPsvSysItfTp());
|
||||
if( EAIMessageKeys.TRANTYPE_TAS.equals(eaiMessage.getTranType())
|
||||
// RESTAdapter는 교체하지 않는다
|
||||
&& !StringUtils.equals(adptGrpVO.getType(), "RST")) {
|
||||
// isLocal = true;
|
||||
// if (logger.isInfo()) logger.info(guidLogPrefix + " TRANTYPE TAS [" + eaiMessage.getTranType() + "]");
|
||||
PropManager manager = PropManager.getInstance();
|
||||
Properties prop = manager.getProperties(RouteKeys.SIM);
|
||||
routingName = prop.getProperty(RouteKeys.SIM_ROUTING,"HTTPOUT");
|
||||
String simAdapterGroupName ="";
|
||||
if (service.isSyncItfTp()){
|
||||
simAdapterGroupName = prop.getProperty(RouteKeys.SIM_ADAPTER_SYNC,"_SIM_OU_HTT_SyC");
|
||||
}else{
|
||||
simAdapterGroupName = prop.getProperty(RouteKeys.SIM_ADAPTER_ASYNC,"_SIM_OU_HTT_AsC");
|
||||
}
|
||||
isLocal = isAlive(simAdapterGroupName);
|
||||
}
|
||||
else if( EAIMessageKeys.TRANTYPE_DUMMYROUT.equals(eaiMessage.getTranType()) ) {
|
||||
isLocal = false;
|
||||
if (logger.isInfo()) logger.info(guidLogPrefix + " TRANTYPE_DUMMYROUT [" + eaiMessage.getTranType() + "] Route to Other Domain - Local ["+System.getProperty(Keys.EAI_SYSTEMMODE)+"]");
|
||||
}
|
||||
else {
|
||||
isLocal= isAlive( service.getPsvSysItfTp()); // EAIMessage내의 수동시스템인터페이스유형(AdapterGroupName)
|
||||
}
|
||||
}
|
||||
else {
|
||||
isLocal = isAlive( service.getPsvSysItfTp()); // EAIMessage내의 수동시스템인터페이스유형(AdapterGroupName)
|
||||
}
|
||||
RoutingVO routingUrl = RoutingManager.getInstance().getRoutingVO( routingName );
|
||||
|
||||
if (logger.isInfo()) {
|
||||
logger.info(guidLogPrefix + "ROUTING NAME [" + routingName + "]");
|
||||
logger.info(guidLogPrefix + "ROUTING URI [" + routingUrl + "]");
|
||||
logger.info(guidLogPrefix + "TRANTYPE [" + eaiMessage.getTranType() + "]");
|
||||
logger.info(guidLogPrefix + "isLocal [" + isLocal + "]");
|
||||
}
|
||||
|
||||
//-----------------------------------------------------
|
||||
// IFRouter에서는 Outbound Process만 호출할 수 있도록 체크(무한 Loop방지)
|
||||
// 2006.02.24 - DHLEE
|
||||
//-----------------------------------------------------
|
||||
if(! "O".equals(routingUrl.getLayerDstcd()) ) {
|
||||
throw new Exception(IFROUTER_INVALID_ROUT);
|
||||
}
|
||||
|
||||
EAIMessage message = null;
|
||||
if ( eaiMessage.getSvcPssTp().equals( EAIMessage.SINGLE_PROCESS )
|
||||
|| eaiMessage.getSvcPssTp().equals( EAIMessage.COMPLEX_PROCESS ) ) {
|
||||
// 단일 수동인터페이스 또는 복합거래 유형인 경우
|
||||
|
||||
if(!eaiServerManager.isPEAIServer() && EAIMessageKeys.TRANTYPE_DUMMYROUT.equals(eaiMessage.getTranType()) ) {
|
||||
StringBuffer urlBuf = new StringBuffer();
|
||||
|
||||
EAIServerManager mgr = EAIServerManager.getInstance();
|
||||
EAIServerVO server = mgr.getEAIServer( mgr.getLocalServerName());
|
||||
|
||||
// get Routing server info
|
||||
PropManager propManager = PropManager.getInstance();
|
||||
String remote_url = propManager.getProperty(RouteKeys.DUMMY_ROUTE_INFO, server.getName());
|
||||
if(logger.isWarn()) {
|
||||
logger.warn(guidLogPrefix + " : DUMMY ROUTE CALL - EAISvcCd="+ eaiMessage.getEAISvcCd()
|
||||
+", remote_url : " +remote_url);
|
||||
}
|
||||
if(remote_url == null) {
|
||||
String errorMsg = " Dummy Route info not found : Property Group[" + RouteKeys.DUMMY_ROUTE_INFO + "] Property["+server.getName()+"}";
|
||||
logger.error(guidLogPrefix + errorMsg);
|
||||
throw new Exception(errorMsg);
|
||||
}
|
||||
urlBuf.append( EAIServerVO.IIOP_PROTOCOL ).append("://");
|
||||
urlBuf.append( remote_url );
|
||||
|
||||
callProp.setProperty( RouteKeys.REMOTE_CALL_URL, urlBuf.toString() );
|
||||
|
||||
if (logger.isInfo()) {
|
||||
logger.info(guidLogPrefix + " DummyRoute Remote Call [" + urlBuf.toString() + "] RemoteProxyClient");
|
||||
}
|
||||
|
||||
try {
|
||||
if (logger.isDebug()) {
|
||||
logger.debug(guidLogPrefix + " DummyRoute RemoteProxyClient call");
|
||||
}
|
||||
message = RemoteProxyClient.callProxyBean(eaiMessage, callProp);
|
||||
if (logger.isDebug()) {
|
||||
logger.debug(guidLogPrefix + " DummyRoute RemoteProxyClient result : "+message);
|
||||
}
|
||||
} catch(Exception e) {
|
||||
logger.error(guidLogPrefix + " DummyRoute Remote Call Error", e);
|
||||
//throw new Exception(IFROUTER_ERROR_REMOTE);
|
||||
throw new Exception(ExceptionUtil.getErrorCode(e,IFROUTER_ERROR_REMOTE));
|
||||
}
|
||||
}
|
||||
else if ( isLocal ) {
|
||||
try {
|
||||
message = ElinkESBProcessProxy.callElinkESBProcess( routingUrl.getSyncRoutingPath(), eaiMessage, true, callProp );
|
||||
} catch(Exception e) {
|
||||
//throw new Exception( IFROUTER_ERROR_LOCAL );
|
||||
throw new Exception(ExceptionUtil.getErrorCode(e,IFROUTER_ERROR_LOCAL));
|
||||
}
|
||||
} else {
|
||||
EAIServerManager mgr = EAIServerManager.getInstance();
|
||||
EAIServerVO server = mgr.getEAIServer( mgr.getLocalServerName());
|
||||
EAIServerVO backupSvr = mgr.getEAIServer( server.getFailoverSvr() );
|
||||
|
||||
if ( service.getFlOvrCls().equals( EAIMessage.YES_FLAG ) && backupSvr != null) {
|
||||
//Properties prop = new Properties();
|
||||
StringBuffer urlBuf = new StringBuffer();
|
||||
urlBuf.append( EAIServerVO.IIOP_PROTOCOL ).append("://");
|
||||
urlBuf.append( backupSvr.getAddress() ).append(":");
|
||||
urlBuf.append( backupSvr.getRmiPort() );
|
||||
|
||||
callProp.setProperty( RouteKeys.REMOTE_CALL_URL, urlBuf.toString() );
|
||||
|
||||
if (logger.isInfo()) {
|
||||
logger.info(guidLogPrefix + " FailOver Remote Call [" + urlBuf.toString() + "] RemoteProxyClient");
|
||||
}
|
||||
|
||||
try {
|
||||
if (logger.isDebug()) {
|
||||
logger.debug(guidLogPrefix + " FailOver RemoteProxyClient call");
|
||||
}
|
||||
message = RemoteProxyClient.callProxyBean(eaiMessage, callProp);
|
||||
if (logger.isDebug()) {
|
||||
logger.debug(guidLogPrefix + " FailOver RemoteProxyClient result : "+message);
|
||||
}
|
||||
} catch(Exception e) {
|
||||
logger.error(guidLogPrefix + " FailOver Remote Call Error - " + e.getMessage());
|
||||
// e.printStackTrace();
|
||||
//throw new Exception(IFROUTER_ERROR_REMOTE);
|
||||
throw new Exception(ExceptionUtil.getErrorCode(e,IFROUTER_ERROR_REMOTE));
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw new Exception( ExceptionUtil.make(IFROUTER_ERROR_LOCK , new String[1]) );
|
||||
}
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
if (logger.isDebug()) {
|
||||
logger.debug(guidLogPrefix + " PCOMPLEX [" + routingUrl.getSyncRoutingPath() + "]");
|
||||
}
|
||||
message = ElinkESBProcessProxy.callElinkESBProcess( routingUrl.getSyncRoutingPath(), eaiMessage, true, callProp );
|
||||
} catch(Exception e) {
|
||||
//throw new Exception( IFROUTER_ERROR_LOCAL );
|
||||
throw new Exception(ExceptionUtil.getErrorCode(e,IFROUTER_ERROR_LOCAL));
|
||||
}
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. 기능 : Adapter그룹명의 Adapter들의 상태정보를 확인하는 메소드
|
||||
* 2. 처리 개요 :
|
||||
* - AdapterManager를 통해 해당 Adapter그룹의 Adapter의 상태를 확인하여
|
||||
* 정상적인 Adapter가 있는지 여부를 리턴한다.
|
||||
* 3. 주의사항
|
||||
*
|
||||
* @param adapterGroupName Adapter그룹명
|
||||
* @return boolean
|
||||
* @exception Exception
|
||||
**/
|
||||
public static boolean isAlive(String adapterGroupName) throws Exception {
|
||||
//-------------------------------------------------
|
||||
// CISCO Router에 대한 처리로직 추가 : 2007.06.15 DHLEE
|
||||
//-------------------------------------------------
|
||||
String cadapterGroupName = "";
|
||||
String cadapterName = "";
|
||||
|
||||
if (adapterGroupName.indexOf('.') != -1) {
|
||||
cadapterName = adapterGroupName.substring(adapterGroupName.indexOf('.')+1);
|
||||
cadapterGroupName = adapterGroupName.substring(0, adapterGroupName.indexOf('.'));
|
||||
}
|
||||
else {
|
||||
cadapterGroupName = adapterGroupName;
|
||||
}
|
||||
|
||||
AdapterGroupVO adapterGroup = AdapterManager.getInstance().getAdapterGroupVO( cadapterGroupName );
|
||||
if(adapterGroup==null) {
|
||||
throw new Exception("IFRouter] Cannot find the AdapterGroupVO. - "+ cadapterGroupName);
|
||||
}
|
||||
if (adapterGroupName.indexOf('.') != -1) {
|
||||
AdapterVO vo = adapterGroup.getAdapterVO(cadapterName);
|
||||
|
||||
if (vo == null) {
|
||||
return false;
|
||||
}else{
|
||||
//라우팅 특정 포트 매핑시 어댑터 업무 이름 선택시 오류 수정
|
||||
//isStarted 체크는 node를 변경한경우 대비
|
||||
if (vo.isStarted() && vo.isStatus()){
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
return adapterGroup.isAlive();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user