diff --git a/src/main/java/com/eactive/eai/adapter/http/client/HttpClient5AdapterServiceSupport.java b/src/main/java/com/eactive/eai/adapter/http/client/HttpClient5AdapterServiceSupport.java index 80655b5..ab1dc80 100644 --- a/src/main/java/com/eactive/eai/adapter/http/client/HttpClient5AdapterServiceSupport.java +++ b/src/main/java/com/eactive/eai/adapter/http/client/HttpClient5AdapterServiceSupport.java @@ -418,6 +418,8 @@ public abstract class HttpClient5AdapterServiceSupport implements HttpClientAdap }; this.client = HttpClients.custom() + .disableDefaultUserAgent() + .disableContentCompression() .addRequestInterceptorLast(requestLogInterceptor) .addResponseInterceptorFirst(responseLogInterceptor) .setConnectionManager(connectionManager) diff --git a/src/main/java/com/eactive/eai/adapter/http/client/impl/HttpClientAdapterServiceNoop.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/HttpClientAdapterServiceNoop.java new file mode 100644 index 0000000..73ac941 --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/HttpClientAdapterServiceNoop.java @@ -0,0 +1,21 @@ +package com.eactive.eai.adapter.http.client.impl; + +import com.eactive.eai.adapter.http.client.HttpClientAdapterService; +import com.eactive.eai.httpouttlsinfo.HttpOutTlsInfoVO; + +import java.util.Properties; + +public class HttpClientAdapterServiceNoop implements HttpClientAdapterService { + public Object execute(Properties prop, Object data, Properties tempProp) throws Exception { + return null; + } + + @Override + public void close() { + } + + @Override + public void init(String adapterName, boolean useMtls, HttpOutTlsInfoVO mtlsInfo, int maxTotalConnections, int maxHostConnections) { + } +} + diff --git a/src/main/java/com/eactive/eai/authoutbound/client/impl/HttpClientAccessTokenServiceWithParam.java b/src/main/java/com/eactive/eai/authoutbound/client/impl/HttpClientAccessTokenServiceWithParam.java index 45e7c60..c2a6dd1 100644 --- a/src/main/java/com/eactive/eai/authoutbound/client/impl/HttpClientAccessTokenServiceWithParam.java +++ b/src/main/java/com/eactive/eai/authoutbound/client/impl/HttpClientAccessTokenServiceWithParam.java @@ -193,7 +193,8 @@ public class HttpClientAccessTokenServiceWithParam implements HttpClientAccessTo connectionManager.setMaxTotal(maxTotalConnections); connectionManager.setDefaultMaxPerRoute(maxHostConnections); - try (CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connectionManager).build();) { + // http header에 zip 제외하려면 disableContentCompression() 추가해서 제외할것 + try (CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connectionManager).disableContentCompression().disableDefaultUserAgent().build();) { HttpPost httpPost = new HttpPost(uri); httpPost.setEntity(new UrlEncodedFormEntity(formParams, charset)); httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=" + encode); diff --git a/src/main/java/com/eactive/eai/common/message/EAIMessage.java b/src/main/java/com/eactive/eai/common/message/EAIMessage.java index 255e974..4a68991 100644 --- a/src/main/java/com/eactive/eai/common/message/EAIMessage.java +++ b/src/main/java/com/eactive/eai/common/message/EAIMessage.java @@ -3,7 +3,9 @@ package com.eactive.eai.common.message; import java.io.Serializable; import java.nio.charset.Charset; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import com.eactive.eai.message.StandardMessage; import com.eactive.eai.message.manager.StandardMessageManager; @@ -107,6 +109,7 @@ public class EAIMessage implements EAIMessageKeys, Serializable, Comparable(); this.svcPssSeq = 1; @@ -624,6 +627,42 @@ public class EAIMessage implements EAIMessageKeys, Serializable, Comparable transactionContextTransfer; + + /** + * [비동기 전달 전용] 컨텍스트 전달용 Map 반환 + * @see #transactionContextTransfer + */ + public Map getTransactionContextTransfer() { + return transactionContextTransfer; + } + + /** + * [비동기 전달 전용] 컨텍스트 전달용 Map 설정 + * @see #transactionContextTransfer + */ + public void setTransactionContextTransfer(Map transactionContextTransfer) { + this.transactionContextTransfer = transactionContextTransfer; + } + @Override public Object clone() throws CloneNotSupportedException { EAIMessage cloned = (EAIMessage) super.clone(); @@ -636,6 +675,8 @@ public class EAIMessage implements EAIMessageKeys, Serializable, Comparable(transactionContextTransfer)); return cloned; } diff --git a/src/main/java/com/eactive/eai/common/routing/ElinkESBProcessProxy.java b/src/main/java/com/eactive/eai/common/routing/ElinkESBProcessProxy.java index 72e8e32..cf183ed 100644 --- a/src/main/java/com/eactive/eai/common/routing/ElinkESBProcessProxy.java +++ b/src/main/java/com/eactive/eai/common/routing/ElinkESBProcessProxy.java @@ -1,11 +1,13 @@ package com.eactive.eai.common.routing; -import com.eactive.eai.common.message.EAIMessage; -import com.eactive.eai.common.util.Logger; - import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; +import com.eactive.eai.common.context.ElinkTransactionContext; +import com.eactive.eai.common.message.EAIMessage; +import com.eactive.eai.common.message.EAIMessageKeys; +import com.eactive.eai.common.util.Logger; + /** * 1. 기능 : ElinkESBProcess를 호출하는 공통 Class @@ -42,17 +44,30 @@ public class ElinkESBProcessProxy public static EAIMessage callElinkESBProcess(String serviceURI, EAIMessage eaiMessage, boolean isLocal, Properties prop) throws Exception { EAIMessage retMsg = null; + + // [ElinkTransactionContext] 비동기 거래 시 컨텍스트 초기화 여부 판단 + // - ASYNC 거래이고, outbound Process 호출이 아닌 경우에만 초기화 + boolean shouldManageContext = eaiMessage != null + && EAIMessageKeys.ASYNC_SVC.equals(eaiMessage.getSvcTsmtUsgTp()) + && (serviceURI == null || !serviceURI.startsWith("com.eactive.eai.outbound")); + try { - if (isLocal){ + // [ElinkTransactionContext] 비동기 거래 진입점 - 컨텍스트 복원 + if (shouldManageContext) { + ElinkTransactionContext.restore(eaiMessage.getTransactionContextTransfer()); + eaiMessage.setTransactionContextTransfer(null); // 복원 후 전달용 필드 초기화 + } + + if (isLocal){ Class cl = classLocalCache.get(serviceURI); - + if(cl == null) { cl = Class.forName(serviceURI); classLocalCache.put(serviceURI, cl); } Process proc = (Process)cl.newInstance(); proc.callService(eaiMessage, prop); - + retMsg = proc.clientReturn(); }else{ if(eaiMessage == null) { @@ -62,12 +77,17 @@ public class ElinkESBProcessProxy retMsg = RemoteProxyClient.callProxyBean(eaiMessage, prop); } } - } catch( ClassNotFoundException e) { + } catch( ClassNotFoundException e) { if (logger.isError()) logger.error("ElinkProcessProxy] callElinkESBProcess["+serviceURI+"] Class Not Found Exception : "); - throw new Exception(PROXY_ERROR_CODE); - } catch( Exception e) { + throw new Exception(PROXY_ERROR_CODE); + } catch( Exception e) { if (logger.isError()) logger.error("ElinkProcessProxy] callElinkESBProcess["+serviceURI+"] Exception : "+e.getMessage(),e); - throw new Exception(PROXY_ERROR_CODE); + throw new Exception(PROXY_ERROR_CODE); + } finally { + // [ElinkTransactionContext] 비동기 거래 - 해제 + if (shouldManageContext) { + ElinkTransactionContext.clear(); + } } return retMsg; } diff --git a/src/main/java/com/eactive/eai/common/routing/FlowRouter.java b/src/main/java/com/eactive/eai/common/routing/FlowRouter.java index 466c797..8c9158f 100644 --- a/src/main/java/com/eactive/eai/common/routing/FlowRouter.java +++ b/src/main/java/com/eactive/eai/common/routing/FlowRouter.java @@ -2,6 +2,7 @@ package com.eactive.eai.common.routing; import java.util.Properties; +import com.eactive.eai.common.context.ElinkTransactionContext; import com.eactive.eai.common.exception.ExceptionUtil; import com.eactive.eai.common.message.EAIMessage; import com.eactive.eai.common.property.PropManager; @@ -136,6 +137,8 @@ public class FlowRouter } try { + // [ElinkTransactionContext] 비동기 송신 전 컨텍스트 복사 + eaiMessage.setTransactionContextTransfer(ElinkTransactionContext.getAll()); JMSSender.sendToQueue(eaiMessage, queueConFactory, routeQueueName, prop); } catch(Exception e) { if (logger.isError()) logger.error(guidLogPrefix +" process.Queue Error. Queue Name[" + routeQueueName + "]- " + e.getMessage(), e); @@ -164,6 +167,8 @@ public class FlowRouter } try { + // [ElinkTransactionContext] 비동기 송신 전 컨텍스트 복사 + eaiMessage.setTransactionContextTransfer(ElinkTransactionContext.getAll()); if (ElinkConfig.isUseCacheTopic()) { SessionManager.getInstance().putTopic(traceKey, eaiMessage); }