290 lines
9.7 KiB
Java
290 lines
9.7 KiB
Java
package com.eactive.eai.agent;
|
|
|
|
import java.io.IOException;
|
|
import java.io.ObjectInputStream;
|
|
import java.io.ObjectOutputStream;
|
|
import java.net.ConnectException;
|
|
import java.net.HttpURLConnection;
|
|
import java.net.MalformedURLException;
|
|
import java.net.URL;
|
|
import java.net.URLConnection;
|
|
import java.util.HashMap;
|
|
import java.util.Properties;
|
|
import java.net.ProtocolException;
|
|
import java.util.Arrays;
|
|
import java.util.Iterator;
|
|
import java.util.Map;
|
|
import java.util.Vector;
|
|
import javax.naming.Context;
|
|
import javax.naming.InitialContext;
|
|
|
|
import com.eactive.eai.agent.command.Command;
|
|
import com.eactive.eai.agent.command.CommandException;
|
|
import com.eactive.eai.common.dao.DAOFactory;
|
|
import com.eactive.eai.common.server.EAIServerDAO;
|
|
import com.eactive.eai.common.server.EAIServerManager;
|
|
import com.eactive.eai.common.server.EAIServerVO;
|
|
import com.eactive.eai.common.util.ApplicationContextProvider;
|
|
import com.eactive.eai.common.util.Logger;
|
|
|
|
/**
|
|
* 1. 기능 : 등록된 EAI Server 에 Command를 broadcast
|
|
* 2. 처리 개요 : 등록된 EAI Server 에 Command를 broadcast
|
|
* 3. 주의사항
|
|
*
|
|
* @author
|
|
* @version v 1.0.0
|
|
* @see 관련 기능을 참조
|
|
* @since
|
|
*
|
|
*/
|
|
public class AgentUtil
|
|
{
|
|
static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
|
|
final static String SERVLET_URL = "/ESBWeb/WebAgent";
|
|
|
|
private static HashMap returnValue;
|
|
|
|
/**
|
|
* 1. 기능 : AgentUtil 기본 생성자
|
|
* 2. 처리 개요 :
|
|
* 3. 주의사항
|
|
*
|
|
* @param
|
|
* @return
|
|
* @exception
|
|
**/
|
|
private AgentUtil(){
|
|
returnValue = new HashMap();
|
|
}
|
|
|
|
/**
|
|
* 1. 기능 : 등록된 EAI Server 의 URL을 생성하여 반환
|
|
* 2. 처리 개요 : EAIServerDAO를 통해 데이터베이스에 등록된 EAI Server의 URL을 생성하여 반환
|
|
* 3. 주의사항
|
|
*
|
|
* @param
|
|
* @return HashMap 등록된 EAI Server 의 URL.
|
|
* @exception Exception
|
|
**/
|
|
private static HashMap getAllSvrUrl()throws Exception{
|
|
|
|
Map<String, EAIServerVO> servers = new HashMap<>();
|
|
HashMap urlLists = new HashMap();
|
|
|
|
servers = EAIServerManager.getInstance().getAllServer(false);
|
|
|
|
Iterator it = servers.keySet().iterator();
|
|
String svrName = "";
|
|
while( it.hasNext()){
|
|
svrName = (String)it.next();
|
|
try{
|
|
if(! ("ALL".equalsIgnoreCase(svrName))){
|
|
StringBuffer urlBuf = new StringBuffer();
|
|
EAIServerVO vo = (EAIServerVO)servers.get(svrName);
|
|
if(vo != null){
|
|
urlBuf.append(vo.toURL(EAIServerVO.HTTP_PROTOCOL));
|
|
urlBuf.append(SERVLET_URL);
|
|
logger.debug("AgentUtil] getAllSvrUrl - URL : "+urlBuf.toString());
|
|
|
|
urlLists.put(svrName, urlBuf.toString());
|
|
}
|
|
else {
|
|
logger.error("AgentUtil] getAllSvrUrl - BroadCast할 서버 정보를 가져올 수 없습니다. ");
|
|
}
|
|
}
|
|
|
|
}catch (Exception e){
|
|
logger.error("AgentUtil] getAllSvrUrl Error. - "+e.getMessage());
|
|
}
|
|
}
|
|
return urlLists;
|
|
|
|
}
|
|
|
|
/**
|
|
* temp code for test
|
|
*/
|
|
// private static HashMap getServerUrl() {
|
|
//
|
|
// HashMap urls = new HashMap();
|
|
//
|
|
// urls.put("cgServer", "http://172.17.51.127:8001/ESBWeb/WebAgent");
|
|
// // urls.put("cgServer2", "http://172.17.51.127:7001/ESBWeb/WebAgent");
|
|
// return urls;
|
|
//
|
|
// }
|
|
|
|
/**
|
|
* 1. 기능 : 등록된 EAI Server에 Command를 broadcast
|
|
* 2. 처리 개요 : 등록된 EAI Server의 URLConnection을 생성하여 Command broadcast하고
|
|
* 전송된 결과값의 HashMap을 생성하여 반환
|
|
* 3. 주의사항
|
|
*
|
|
* @param svrName broadcast할 EAI Server명
|
|
* @param url broadcast할 EAI Server의 url
|
|
* @param command broadcast할 Command
|
|
* @return HashMap broadcast후 전송된 결과값.
|
|
* 전송된 데이터가 success가 아니면 Exception이 전송된 것임.
|
|
* @exception Exception
|
|
**/
|
|
public static HashMap broadcast(String svrName, String url, Command command)throws Exception{
|
|
URLConnection urlCon;
|
|
String response = "";
|
|
|
|
if(returnValue == null){
|
|
returnValue = new HashMap();
|
|
}
|
|
|
|
if(url !=null){
|
|
urlCon = getURLConnection(url);
|
|
try{
|
|
response = sendCommand(urlCon, command);
|
|
returnValue.put(svrName, response);
|
|
}catch (Exception e){
|
|
logger.error("AgentUtil] broadcast Excpetion", e);
|
|
returnValue.put(svrName, e.getMessage());
|
|
}
|
|
|
|
}else{
|
|
logger.error("AgentUtil] broadcast Error. - url is null");
|
|
}
|
|
return returnValue;
|
|
}
|
|
|
|
/**
|
|
* 1. 기능 : 등록된 EAI Server에 Command를 broadcast
|
|
* 2. 처리 개요 : 등록된 EAI Server의 URLConnection을 생성하여 Command broadcast하고
|
|
* 전송된 결과값의 HashMap을 생성하여 반환
|
|
* 3. 주의사항
|
|
*
|
|
* @param command broadcast할 Command
|
|
* @return HashMap broadcast후 전송된 결과값.
|
|
* 전송된 데이터가 success가 아니면 Exception이 전송된 것임.
|
|
* @exception Exception
|
|
**/
|
|
public static HashMap broadcast(Command command)throws Exception{
|
|
URLConnection urlCon;
|
|
HashMap servers = getAllSvrUrl();
|
|
// HashMap servers = getServerUrl();
|
|
|
|
if(returnValue == null){
|
|
returnValue = new HashMap();
|
|
}
|
|
|
|
if(servers != null){
|
|
Iterator it = servers.keySet().iterator();
|
|
String svrName = "";
|
|
String url = "";
|
|
String response = "";
|
|
|
|
while( it.hasNext()){
|
|
svrName = (String)it.next();
|
|
url = (String) servers.get(svrName);
|
|
|
|
urlCon = getURLConnection(url);
|
|
try{
|
|
response = sendCommand(urlCon, command);
|
|
returnValue.put(svrName, response);
|
|
}catch (Exception e){
|
|
logger.error("AgentUtil] broadcast Excpetion - "+url+ e.getMessage());
|
|
returnValue.put(svrName, e.getMessage());
|
|
}
|
|
}
|
|
}else{
|
|
logger.error("AgentUtil] broadcast Error. - url is null");
|
|
|
|
}
|
|
return returnValue;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* 1. 기능 : 해당 URLConnection으로 command 전송 처리 결과를 반환
|
|
* 2. 처리 개요 : 해당 URLConnection으로 command 전송하고 처리 결과를 반환
|
|
* 3. 주의사항
|
|
*
|
|
* @param urlCon 연결할 URLConnection
|
|
* @param command 전송할 Command
|
|
* @return String 처리된 결과
|
|
* @exception Exception
|
|
**/
|
|
public static String sendCommand(URLConnection urlCon, Command command)throws Exception{
|
|
ObjectOutputStream oos = null;
|
|
ObjectInputStream ois = null;
|
|
String response = "";
|
|
|
|
try {
|
|
oos = new ObjectOutputStream(urlCon.getOutputStream());
|
|
oos.writeObject(command);
|
|
oos.flush();
|
|
logger.debug("AgentUtil] SendCommand - "+urlCon.getURL().toString());
|
|
|
|
ois = new ObjectInputStream(urlCon.getInputStream());
|
|
response = (String)ois.readObject();
|
|
|
|
} catch (ConnectException e) {
|
|
logger.error("AgentUtil] sendCommand ConnectException. - "+urlCon.getURL()+ " can't Connect"+e.getMessage());
|
|
throw e;
|
|
} catch (IOException e2) {
|
|
logger.error("AgentUtil] sendCommand IOException. - "+urlCon.getURL()+ " can't IO" +e2.getMessage());
|
|
throw e2;
|
|
} catch (Exception e) {
|
|
logger.error("AgentUtil] sendCommand Exception. - "+urlCon.getURL()+e.getMessage());
|
|
throw e;
|
|
} finally {
|
|
if (oos != null) try { oos.close(); } catch (Exception e) { oos = null; }
|
|
if (ois != null) try { ois.close(); } catch (Exception e) { ois = null; }
|
|
}
|
|
return response;
|
|
}
|
|
|
|
/**
|
|
* 1. 기능 : 지정된 url의 URLConnection 생성
|
|
* 2. 처리 개요 : 지정된 url의 URLConnection 생성
|
|
* 3. 주의사항
|
|
*
|
|
* @param url URLConnection을 생성을 위한 url
|
|
* @return URLConnection 생성된 URLConnection
|
|
* @exception
|
|
**/
|
|
public static URLConnection getURLConnection(String url) {
|
|
URL u = null;
|
|
try {
|
|
u = new URL(url);
|
|
} catch (MalformedURLException e) {
|
|
logger.error("AgentUtil] getURLConnection ", e);
|
|
}
|
|
|
|
HttpURLConnection conn = null;
|
|
|
|
try {
|
|
conn = (HttpURLConnection) u.openConnection();
|
|
} catch (Exception e) {
|
|
logger.error("openConnection error", e);
|
|
}
|
|
|
|
if(conn != null){
|
|
conn.setDoInput(true);
|
|
conn.setDoOutput(true);
|
|
conn.setUseCaches(false);
|
|
}
|
|
else{
|
|
logger.error("AgentUtil] getURLConnection Error. - " + url +" 의 HttpURLConnection 을 생성할 수 없습니다.");
|
|
}
|
|
|
|
try {
|
|
if(conn != null){
|
|
conn.setRequestMethod("POST");
|
|
}
|
|
} catch (ProtocolException pe) {
|
|
logger.error("AgentUtil] getURLConnection ", pe);
|
|
}
|
|
if(conn != null){
|
|
conn.setRequestProperty("Content-type", "application/octet-stream");
|
|
}
|
|
return conn;
|
|
}
|
|
|
|
} |