137 lines
4.3 KiB
Java
137 lines
4.3 KiB
Java
package com.eactive.eai.adapter;
|
|
|
|
import java.nio.charset.Charset;
|
|
import java.util.Properties;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
import com.eactive.eai.adapter.http.HttpStatusException;
|
|
import com.eactive.eai.common.exception.ExceptionUtil;
|
|
import com.eactive.eai.common.message.MessageType;
|
|
import com.eactive.eai.common.server.EAIServerManager;
|
|
import com.eactive.eai.common.state.ElinkState;
|
|
import com.eactive.eai.common.state.ElinkStateException;
|
|
import com.eactive.eai.common.state.ElinkStateManager;
|
|
import com.eactive.eai.common.util.Logger;
|
|
import com.eactive.eai.inbound.processor.Processor;
|
|
import com.eactive.eai.inbound.processor.ProcessorFactory;
|
|
|
|
public class RequestDispatcher {
|
|
static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
|
|
|
|
private static boolean isTASEnabledEAIServer = true;
|
|
static {
|
|
EAIServerManager eaiServerManager = EAIServerManager.getInstance();
|
|
isTASEnabledEAIServer = eaiServerManager.isTASEnabledEAIServer();
|
|
}
|
|
|
|
private static ConcurrentHashMap<String, RequestDispatcher> dispatchers = new ConcurrentHashMap<>();
|
|
|
|
private String adapterGroupName;
|
|
private Processor processor;
|
|
|
|
private RequestDispatcher(String adapterGroupName) {
|
|
this.adapterGroupName = adapterGroupName;
|
|
processor = ProcessorFactory.newInstance();
|
|
}
|
|
|
|
public static RequestDispatcher getRequestDispatcher(String adapterGroupName) {
|
|
return dispatchers.computeIfAbsent(adapterGroupName, k -> new RequestDispatcher(adapterGroupName));
|
|
}
|
|
|
|
public Object handle(String adapterName, Object message, Properties prop) throws Exception {
|
|
AdapterManager manager = AdapterManager.getInstance();
|
|
|
|
String inAdapterGroupName = this.adapterGroupName;
|
|
String actionClass = "";
|
|
String adptrMsgPtrnCd = "";
|
|
String messageType = MessageType.ASC;
|
|
|
|
AdapterGroupVO group = manager.getAdapterGroupVO(inAdapterGroupName);
|
|
if (group == null) {
|
|
String code = "RECEAIAAC042";
|
|
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 = "RECEAIAAC022";
|
|
String[] msgArgs = { adapterGroupName, adapterName, group.toString() };
|
|
String errText = ExceptionUtil.make(code, msgArgs);
|
|
if (logger.isError()) {
|
|
logger.error(errText);
|
|
}
|
|
throw new Exception(errText);
|
|
}
|
|
|
|
if (prop == null) {
|
|
prop = new Properties();
|
|
}
|
|
|
|
actionClass = group.getRefClass();
|
|
adptrMsgPtrnCd = group.getAdptrMsgPtrnCd();
|
|
messageType = group.getMessageType();
|
|
try {
|
|
prop.put(Processor.ADAPTER_GROUP_NAME, inAdapterGroupName);
|
|
prop.put(Processor.ADAPTER_NAME, adapterName);
|
|
prop.put(Processor.STD_MESSAGE, adptrMsgPtrnCd);
|
|
prop.put(Processor.REQUEST_ACTION, actionClass);
|
|
prop.put(Processor.MESSAGE_TYPE, messageType);
|
|
|
|
// set Inbound AdapterGroup charset
|
|
prop.setProperty(com.eactive.eai.adapter.Keys.CHARSET_KEY_IN,
|
|
StringUtils.defaultIfBlank(group.getMessageEncode(), Charset.defaultCharset().name()));
|
|
} catch (Exception e) {
|
|
throw new Exception(ExceptionUtil.getErrorCode(e, "RECEAIAAC024"));
|
|
}
|
|
|
|
Object obj = null;
|
|
|
|
// Check Elink lifecycle is STARTED
|
|
// otherwise reject this request
|
|
if(ElinkStateManager.getInstance().getState() != ElinkState.STARTED) {
|
|
logger.error("Elink STATE FAIL - " + ElinkStateManager.getInstance().getState());
|
|
throw new ElinkStateException("Elink STATE FAIL - " + ElinkStateManager.getInstance().getState());
|
|
}
|
|
|
|
try {
|
|
ElinkStateManager.getInstance().startRequest();
|
|
group.increase();
|
|
adapter.incrementRequestCount();
|
|
obj = processor.execute(message, prop);
|
|
group.increaseSuccess();
|
|
} catch (HttpStatusException e) {
|
|
group.increaseError();
|
|
throw e;
|
|
} catch (Exception e) {
|
|
group.increaseError();
|
|
throw new Exception(ExceptionUtil.getErrorCode(e, "RECEAIAAC025"));
|
|
} finally {
|
|
group.decrease();
|
|
adapter.decrementRequestCount();
|
|
ElinkStateManager.getInstance().completeRequest();
|
|
}
|
|
|
|
if (obj != null) {
|
|
return obj;
|
|
}
|
|
else {
|
|
if (message instanceof byte[]) {
|
|
return new byte[0];
|
|
} else if (message instanceof String) {
|
|
return "";
|
|
} else {
|
|
return new Object();
|
|
}
|
|
}
|
|
}
|
|
}
|