Files
bapweb/src/com/eactive/eai/common/web/AppInitializer.java
T
2026-06-05 17:00:26 +09:00

236 lines
9.6 KiB
Java

package com.eactive.eai.common.web;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import javax.sql.DataSource;
import com.eactive.eai.adapter.socket.config.SocketAdapterManager;
import com.eactive.eai.batch.code.CodeMessageManager;
import com.eactive.eai.batch.scheduler.SchedulerMessageManager;
import com.eactive.eai.common.exception.ExceptionUtil;
import com.eactive.eai.common.lifecycle.Lifecycle;
import com.eactive.eai.common.lifecycle.LifecycleException;
import com.eactive.eai.common.lifecycle.LifecycleManager;
import com.eactive.eai.common.property.PropManager;
import com.eactive.eai.common.dao.Keys;
import com.eactive.eai.common.util.Logger;
import com.eactive.eai.common.util.ServiceLocator;
import com.eactive.eai.common.util.ServiceLocatorException;
/**
* 1. 기능 : EAI FrameWork이 초기화(Deploy)될 때 실행되어야 할 작업을 정의
* 2. 처리 개요 : Logger초기화, LifecycleManager를 통한 Manager 초기화
* * -
* 3. 주의사항
*
* @author :
* @version : v 1.0.0
* @see : Logger.java, LifecycleManager.java
* @since :
*/
public class AppInitializer implements InitializingBean, DisposableBean {
private DataSource dataSource;
private String instName;
private String tableOwner;
private String systemMode = "D"; //EAI System Mode : [P/T/D/S]
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public void setInstName(String instName) {
this.instName = instName;
}
public void setTableOwner(String tableOwner) {
this.tableOwner = tableOwner;
}
public void setSystemMode(String systemMode) {
this.systemMode = systemMode;
}
/**
* 1. 기능 : EAI FrameWork의 웹어플리케이션이 될 때 초기화 작업을 수행
* 2. 처리 개요 : EAI FrameWork의 웹어플리케이션이 디플로이될 때 PropManager, Logger, LifecycleManager를 기동하여
* 초기화작업을 수행한다.
* 3. 주의사항
* - appicationContext에 정의된 DataSource를 사용하도록 처리 됨
* @return void
* @exception
**/
private void init()
{
Logger logger = Logger.getLogger("root");
String serverName = System.getProperty("inst.Name");
if(serverName == null) {
System.setProperty("inst.Name", instName);
// System.setProperty("weblogic.Name", instName);
}
String tOwner = System.getProperty(Keys.TABLE_OWNER_KEY);
if(tOwner == null) {
System.setProperty(Keys.TABLE_OWNER_KEY, tableOwner);
}
String sMode = System.getProperty(com.eactive.eai.common.server.Keys.EAI_SYSTEMMODE);
if(sMode == null) {
System.setProperty(com.eactive.eai.common.server.Keys.EAI_SYSTEMMODE, systemMode);
}
// set Spring dataSource to ServiceLoactor
try {
ServiceLocator sl = ServiceLocator.getInstance();
sl.putDataSource(Keys.EAI_DATASOURCE, dataSource);
System.out.println("\n@@ " + Keys.EAI_DATASOURCE + " = " + dataSource);
} catch (ServiceLocatorException e1) {
e1.printStackTrace();
}
System.out.println("\n@@ ElinkBAP Framework =====================================================");
System.out.println("@ Batch System Config Initializing---------------------------------- ");
try {
String tableOwner = System.getProperty(com.eactive.eai.common.dao.Keys.TABLE_OWNER_KEY);
String systemMode = System.getProperty(com.eactive.eai.common.server.Keys.EAI_SYSTEMMODE);
if(tableOwner == null || tableOwner.trim().length() == 0 ||
systemMode == null || systemMode.trim().length() == 0 ) {
System.out.println("==========================================================================");
System.out.println("# E R R O R : Batch System Configuration");
System.out.println("# Check Start Script Rule table Owner : -D"+com.eactive.eai.common.dao.Keys.TABLE_OWNER_KEY+"=");
System.out.println("# Check Start Script Batch System Mode : -D"+com.eactive.eai.common.server.Keys.EAI_SYSTEMMODE+"=");
System.out.println("# Batch System Mode : [P/T/D/S]");
System.out.println("==========================================================================");
throw new Exception(" Rule Table Owner Not Configured ");
}
System.out.println("==========================================================================");
System.out.println("# S U C C E S S : Batch System Configuration");
System.out.println("# Rule table Owner : "+tableOwner);
System.out.println("# Batch System Mode : "+systemMode);
System.out.println("# Batch System Mode : [P(Product)/T(Test)/D(Develop)/S(Simulator)]");
System.out.println("==========================================================================");
} catch(Exception e) {
throw new RuntimeException("EAI System Configuration Error - " + e.getMessage());
}
logger.debug("CodeMessageManager 메모리 로딩 시작 ------------------------------------------");
try {
CodeMessageManager.getInstance().start();
} catch(LifecycleException e) {
logger.error( e.getMessage(), e);
throw new RuntimeException(ExceptionUtil.getErrorCode(e,"BFCEAICWB001"));
}
logger.debug("CodeMessageManager 메모리 로딩 종료 ------------------------------------------");
logger.debug("Property 메모리 로딩 시작 ------------------------------------------");
try {
PropManager.getInstance().start();
} catch(LifecycleException e) {
logger.error( e.getMessage(), e);
throw new RuntimeException(ExceptionUtil.getErrorCode(e,"BFCEAICWB001"));
}
logger.debug("Property 메모리 로딩 종료 ------------------------------------------");
logger.debug("Logger 메모리 로딩 시작 ------------------------------------------");
try {
Logger.doConfigure();
} catch(Exception e) {
logger.error( e.getMessage(), e);
}
logger.debug("Logger 메모리 로딩 종료 ------------------------------------------");
try {
SchedulerMessageManager.getInstance().deleteJobFromProcessing();
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
// try {
// Class clazz = Class
// .forName("com.eactive.eai.rms.client.context.MonitoringContextFactory");
// Object factory = clazz.newInstance();
// Method method = clazz.getMethod("create");
// method.invoke(factory);
// System.out.println("RMSCLIENT AGENT STARTED ~~ !!!!");
// logger.warn("EMSCLIENT AGENT STARTED ~~ !!!!");
// } catch (InvocationTargetException e) {
// System.out.println("RMSCLIENT AGENT CANNOT START ~~ !!!! - "+e.getTargetException().toString());
// logger.error("RMSCLIENT AGENT CANNOT START ~~ !!!! - "+e.getTargetException().toString(),e.getTargetException());
// e.getTargetException().printStackTrace();
// } catch (Throwable e) {
// System.out.println("RMSCLIENT AGENT CANNOT START ~~ !!!! - "+e.toString());
// logger.error("RMSCLIENT AGENT CANNOT START ~~ !!!! - "+e.toString(),e);
// }
logger.debug("LifeCycle 관련 클래스 메모리 로딩 시작 ------------------------------------------");
LifecycleManager manager = LifecycleManager.getInstance();
if(manager instanceof Lifecycle) {
try {
manager.start();
} catch(LifecycleException e) {
logger.error( e.getMessage(), e);
throw new RuntimeException(ExceptionUtil.getErrorCode(e,"BECEAICWB002"));
}
}
logger.debug("LifeCycle 관련 클래스 메모리 로딩 종료 ------------------------------------------");
logger.debug("배치 프레임웍 Application 초기화 종료!");
}
/**
* 1. 기능 : EAI FrameWork의 웹어플리케이션이 Undeploy될 때 초기화된 Manager들을 중지시킴
* 2. 처리 개요 : EAI FrameWork의 웹어플리케이션이 Undeploy될 때 LifecycleManager를 통해 Manager를 중지시킨다.
*
* 3. 주의사항
*
* @param ServletContextEvent
* @return void
* @exception
**/
public void destroy()
{
Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
logger.debug("@ eLink Batch Application destroying.");
LifecycleManager manager = LifecycleManager.getInstance();
if(manager instanceof Lifecycle) {
try {
manager.stop();
} catch(LifecycleException e) {
throw new RuntimeException(ExceptionUtil.getErrorCode(e,"BECEAICWB003"));
}
}
try {
PropManager.getInstance().stop();
} catch(LifecycleException e) {
throw new RuntimeException(ExceptionUtil.getErrorCode(e,"BECEAICWB004"));
}
try {
SocketAdapterManager.getInstance().stop();
} catch ( Exception e ) {
throw new RuntimeException(ExceptionUtil.getErrorCode(e,"BECEAICWB005"));
}
logger.debug("\n\n");
}
@Override
public void afterPropertiesSet() throws Exception {
init();
}
}