243 lines
8.5 KiB
Java
243 lines
8.5 KiB
Java
package com.eactive.eai.common.util;
|
|
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.Hashtable;
|
|
import java.util.Map;
|
|
|
|
import javax.jms.Queue;
|
|
import javax.jms.QueueConnectionFactory;
|
|
import javax.naming.Context;
|
|
import javax.naming.InitialContext;
|
|
import javax.naming.NamingException;
|
|
import javax.sql.DataSource;
|
|
|
|
import com.eactive.eai.common.exception.ExceptionUtil;
|
|
|
|
/**
|
|
* 1. 기능 : WAS의 각종 서비스를 레퍼런스를 얻어내는 공통 Class
|
|
* 2. 처리 개요 :
|
|
* * -
|
|
* 3. 주의사항
|
|
*
|
|
* @author :
|
|
* @version : v 1.0.0
|
|
* @see : 관련 기능을 참조
|
|
* @since :
|
|
* :
|
|
*/
|
|
public class ServiceLocator {
|
|
/** Eai Logger */
|
|
// static private Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
|
|
/** weblogic.jndi.WLInitialContextFactory */
|
|
public final static String WEBLOGIC_INITIAL_CONTEXT_FACTORY = "weblogic.jndi.WLInitialContextFactory";
|
|
|
|
/** ServiceLocator singleton object */
|
|
private static ServiceLocator instance;
|
|
|
|
/** JNDI Context object */
|
|
private InitialContext initial;
|
|
|
|
/** caching을 위한 collection object */
|
|
private Map<String, Object> cache;
|
|
|
|
/**
|
|
* EaiMain start시 t3 url 초기화를 위해 호출된다<br>
|
|
* t3 url을 초기화하고, ServiceLocator singleton object를 생성 초기화한다.
|
|
*/
|
|
/*
|
|
static public void init(String t3Url) {
|
|
try {
|
|
//WEBLOGIC_T3_URL = t3Url;
|
|
instance = new ServiceLocator();
|
|
if (logger.isInfo()) logger.info("ServiceLocator#init() initailized...");
|
|
} catch (ServiceLocatorException e) {
|
|
if (logger.isError()) logger.error("!! Cannot connect to WebLogic Server...");
|
|
if (logger.isError()) logger.error("1. Check if WebLogic Server is alive.");
|
|
if (logger.isError()) logger.error("2. Check if t3Url is correct in config file(server.xml).");
|
|
if (logger.isError()) logger.error(e.getMessage(), e);
|
|
//System.exit(1);
|
|
}
|
|
}
|
|
*/
|
|
|
|
/**
|
|
* 1. 기능 : Constructor
|
|
* 2. 처리 개요 :
|
|
* - JNDI Context object를 생성 초기화하고, cache Map object를 생성 초기화한다.
|
|
* 3. 주의사항
|
|
*
|
|
* @exception ServiceLocatorException
|
|
**/
|
|
protected ServiceLocator() throws ServiceLocatorException {
|
|
try {
|
|
/*
|
|
Hashtable env = new Hashtable();
|
|
env.put(Context.INITIAL_CONTEXT_FACTORY, WEBLOGIC_INITIAL_CONTEXT_FACTORY);
|
|
env.put(Context.PROVIDER_URL, WEBLOGIC_T3_URL);
|
|
initial = new InitialContext(env);
|
|
*/
|
|
initial = new InitialContext();
|
|
|
|
cache = Collections.synchronizedMap(new HashMap<String, Object>());
|
|
|
|
} catch (NamingException e) {
|
|
// throw new ServiceLocatorException(e);
|
|
throw new ServiceLocatorException(ExceptionUtil.getErrorCode(e,"RECEAICUL101"));
|
|
} catch (Exception e) {
|
|
// throw new ServiceLocatorException(e);
|
|
throw new ServiceLocatorException(ExceptionUtil.getErrorCode(e,"RECEAICUL102"));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 1. 기능 : ServiceLocator object를 반환하는 factory method
|
|
* 2. 처리 개요 :
|
|
* - ServiceLocator object를 반환하는 factory method
|
|
* 3. 주의사항
|
|
*
|
|
* @return ServiceLocator
|
|
* @exception
|
|
**/
|
|
public static synchronized ServiceLocator getInstance() throws ServiceLocatorException {
|
|
if ( instance == null ) {
|
|
instance = new ServiceLocator();
|
|
return instance;
|
|
} else {
|
|
return instance;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 1. 기능 : 파라미터 name에 해당하는 DataSource를 lookup해 반환하는 method
|
|
* 2. 처리 개요 :
|
|
* - 파라미터 name에 해당하는 DataSource를 lookup해 반환하는 method
|
|
* 3. 주의사항
|
|
*
|
|
* @param dataSourceName DataSource의 JNDI name
|
|
* @return DataSource JDBC DataSource object
|
|
* @exception ServiceLocatorException
|
|
**/
|
|
public DataSource getDataSource(String dataSourceName)
|
|
throws ServiceLocatorException {
|
|
DataSource dataSource = null;
|
|
|
|
try {
|
|
if (cache.containsKey(dataSourceName)) {
|
|
dataSource = (DataSource) cache.get(dataSourceName);
|
|
} else {
|
|
dataSource = (DataSource) initial.lookup(dataSourceName);
|
|
cache.put(dataSourceName,dataSource);
|
|
// already made connection pool
|
|
//throw new ServiceLocatorException("DataSource Name [" + dataSourceName + "] does not exist.");
|
|
}
|
|
} catch (Exception e) {
|
|
// throw new ServiceLocatorException(e);
|
|
throw new ServiceLocatorException(ExceptionUtil.getErrorCode(e,"RECEAICUL103"));
|
|
}
|
|
|
|
return dataSource;
|
|
}
|
|
|
|
public void putDataSource(String dataSourceName, DataSource dataSource) {
|
|
cache.put(dataSourceName, dataSource);
|
|
}
|
|
/**
|
|
* 1. 기능 : 파라미터 name에 해당하는 Remote 서버의 DataSource를 lookup해 반환하는 method
|
|
* 2. 처리 개요 :
|
|
* - 파라미터 name에 해당하는 Remote 서버의 DataSource를 lookup해 반환하는 method
|
|
* 3. 주의사항
|
|
*
|
|
* @param providerUrl Remote URI
|
|
* @param dataSourceName DataSource의 JNDI name
|
|
* @return DataSource JDBC DataSource object
|
|
* @exception ServiceLocatorException
|
|
**/
|
|
public DataSource getRemoteDataSource(String providerUrl, String dataSourceName) {
|
|
DataSource dataSource = null;
|
|
|
|
try {
|
|
if (cache.containsKey(dataSourceName)) {
|
|
dataSource = (DataSource) cache.get(dataSourceName);
|
|
} else {
|
|
Hashtable<String, Object> env = new Hashtable<String, Object>();
|
|
env.put(Context.INITIAL_CONTEXT_FACTORY, WEBLOGIC_INITIAL_CONTEXT_FACTORY);
|
|
env.put(Context.PROVIDER_URL, providerUrl);
|
|
initial = new InitialContext(env);
|
|
|
|
dataSource = (DataSource)initial.lookup(dataSourceName);
|
|
|
|
cache.put(dataSourceName,dataSource);
|
|
}
|
|
return dataSource;
|
|
} catch (Exception e) {
|
|
// throw new RuntimeException(e);
|
|
throw new RuntimeException(ExceptionUtil.getErrorCode(e,"RECEAICUL104"));
|
|
}
|
|
}
|
|
/**
|
|
* 1. 기능 : QueueConnectionFactory를 반환하는 method
|
|
* 2. 처리 개요 :
|
|
* - QueueConnectionFactory를 반환하는 method
|
|
* 3. 주의사항
|
|
*
|
|
* @param qConnFactoryName QueueConnectionFactory의 JNDI name
|
|
* @return QueueConnectionFactory object
|
|
* @exception ServiceLocatorException
|
|
*/
|
|
public QueueConnectionFactory getQueueConnectionFactory(String qConnFactoryName)
|
|
throws ServiceLocatorException {
|
|
QueueConnectionFactory factory = null;
|
|
|
|
try {
|
|
if (cache.containsKey(qConnFactoryName)) {
|
|
factory = (QueueConnectionFactory) cache.get(qConnFactoryName);
|
|
} else {
|
|
factory = (QueueConnectionFactory) initial.lookup(qConnFactoryName);
|
|
cache.put(qConnFactoryName, factory);
|
|
}
|
|
} catch (NamingException ne) {
|
|
//throw new ServiceLocatorException(ne);
|
|
throw new ServiceLocatorException(ExceptionUtil.getErrorCode(ne,"RECEAICUL113"));
|
|
} catch (Exception e) {
|
|
//throw new ServiceLocatorException(e);
|
|
throw new ServiceLocatorException(ExceptionUtil.getErrorCode(e,"RECEAICUL114"));
|
|
}
|
|
|
|
return factory;
|
|
}
|
|
|
|
/**
|
|
* 1. 기능 : Queue를 반환하는 method
|
|
* 2. 처리 개요 :
|
|
* - Queue를 반환하는 method
|
|
* 3. 주의사항
|
|
*
|
|
* @param queueName Queue의 JNDI name
|
|
* @return Queue object
|
|
* @exception ServiceLocatorException
|
|
*/
|
|
public Queue getQueue(String queueName) throws ServiceLocatorException {
|
|
Queue queue = null;
|
|
|
|
try {
|
|
if (cache.containsKey(queueName)) {
|
|
queue = (Queue) cache.get(queueName);
|
|
} else {
|
|
queue = (Queue) initial.lookup(queueName);
|
|
cache.put(queueName, queue);
|
|
}
|
|
} catch (NamingException ne) {
|
|
//throw new ServiceLocatorException(ne);
|
|
throw new ServiceLocatorException(ExceptionUtil.getErrorCode(ne,"RECEAICUL115"));
|
|
} catch (Exception e) {
|
|
//throw new ServiceLocatorException(e);
|
|
throw new ServiceLocatorException(ExceptionUtil.getErrorCode(e,"RECEAICUL116"));
|
|
}
|
|
|
|
return queue;
|
|
}
|
|
|
|
|
|
}
|