# 들어가는 말
집에서 하고 있는 개인 플젝에서 서버 시간의 구동시간 ( 시스템이 power on 시점 에서 지금까지) 를 알고 싶었다.
여러가지 방법이 있을거라 생각되지만, 복잡도 많은 방안은 피하고 싶었고 어떻게하면 단순하게 접근가능할까 생각하다
톰캣이 로드 되는 순간에 (정확히는 서블릿이 맵핑될 때) 내 소스를 같이 묻혀서 올릴(Load) 수 있는 방법이 떠올랐다.
이 말은 시스템이 os에 진입하면서 윈도우 서비스가 톰캣을 자동시작으로 프로세스 올릴 타이밍부터의 시점부터의 시간을 구할 수 있단 얘기가 된다.
내가 미리 만들어놓은 TimeSet 함수를 타게 해서, time data를 계산한다면 문제없을거란 생각이 들었다.
1. 컴퓨터 켜짐, OS(윈도우)가 올라온다.
2. 윈도우 서비스에서 톰캣을 자동 시작-
3. 톰캣 내부가 load 될 때, 구현한 서블릿리스너를 같이 묻힌다.
4. 리스너에서 time data을 얻어옴.
5. 이 time data를 가지고 계산해서 구동시간을 알아냄.
#ServletContextListener
Was가 최초 로드 될 때 필요한 초기 작업이나 was가 종료 될 때 특정 작업을 실행시킬 때 사용하는 인터페이스다.
1. ServletcontextListener 인터페이스를 받아서 구현한다.
2. web.xml 파일에 등록 시킨다.
ServletContextListener 인터페이스의 사용은 시작과 종료 2가지를 가져다 구현하면 된다.
*contextInitialized(ServletContextEvent sce) : 웹 어플리케이션이 초기활될 때 호출.
*contextDestroyed(ServletContextEvent sce) : 웹 어플리케이션이 종료될 때 호출.
위의 메소드는 모두 파라미터로 ServletContextEvent 타입의 객체를 전달 받는데,
ServletContextEvent 클래스는 시작되거나 종료된 웹 어플리케이션 콘텍스트를 구할 수 있는 getServletContext() 메서드를 제공하고 있다.
# 서블릿리스너
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.mynas.domain.SystemMonitoring; public class SystemLoadHandler implements ServletContextListener { /** * Start On Tomcat WAS, Load to this method */ @Override public void contextInitialized(ServletContextEvent arg0) { SystemMonitoring.GetInstance(); System.out.println("WelCome to MyNasProject!"); } @Override public void contextDestroyed(ServletContextEvent arg0) { } } | cs |
# Web.xml 에 내가 만든 커스텀 리스너 등록
1 2 3 4 5 6 7 | <web-app ...> <listener> <listener-class> org.mynas.system.SystemLoadHandler </listener-class> </listener> </web-app> | cs |
'Tech' 카테고리의 다른 글
윈도우에서도 apt-get을 패키지 관리 "chocolatey" (0) | 2016.12.26 |
---|---|
Apt-get 먹통 일 때 ( /var/lib/dpkg/lock ) (0) | 2016.12.19 |
PMD 와 Xpath (0) | 2016.12.02 |
Javadoc 문법 (0) | 2016.11.22 |
형상관리에 대한 이야기 CVS vs GIT (0) | 2016.11.15 |