2012-06-29 3 views
0


Tomcat의 단일 인스턴스에서 컨텍스트가 초기화 될 때 시작된 스레드가 있습니다. 이런 식으로 뭔가가 :
Tomcat 클러스터 6 및 ContextListener

public class MyContextListener implements ServletContextListener { 
private MyThread thread = null; 

@Override 
public void contextInitialized(ServletContextEvent sce) { 
    //Start thread... 
} 

@Override 
public void contextDestroyed(ServletContextEvent sce) { 
    //Stop thread... 
} 
} 

이 스레드는 시스템의 중요한 작업 10 분마다 수행하고 그것을 잘 작동했다.

이제 클러스터의 인스턴스를 tomcat으로 전환했으며이 스레드는 두 개의 인스턴스에서 실행됩니다. 나는 다른 행동을 시도하고있다.

것은 내가 달성하기 위해 노력하고있어 :

  • 이 스레드 만 한 번에 하나의 인스턴스에서 실행해야합니다.
  • 첫 번째 인스턴스가 실패한 경우 (스레드가 실행 중일 때) 스레드가 두 번째 인스턴스에서 시작되어야합니다.

나는 어떤 힌트라도 주시면 감사하겠습니다.

내 응용 프로그램 논리 란 무엇입니까? DB에서

  1. 읽기 STH를 다음과 같이 스레드에 의해 실행되는
    응용 프로그램 논리이다.
  2. DB 정보를 분석하십시오.
  3. 필요한 경우 외부 시스템에 HTTP 요청을 수행하십시오.
  4. 수면 실 10 분.

요점은 : 나는 바람둥이의 두 인스턴스가있는 경우 나 웹을 사용할 때 정확하게 당신이 정말로 응용 프로그램에서 새 스레드를 시작할 수 없습니다 이해한다면, 하나는이 논리

+0

당신이 실제로하는 일은 ** 순수하게 애플리케이션 로직 **입니다. 그리고 Tomcat이 자체적으로 관리하는 기본 인프라 구성 요소 (세션 등)를 사용하지 않는다고 가정합니다. 당신이하려는 일. 따라서 클러스터링이 본질적으로이를 지원합니다. – Santosh

+0

답변 해 주셔서 감사합니다. 나는 세션을 사용하지 않는다. 스레드에 의해 실행되는 응용 프로그램 논리는 다음과 같습니다. 1. DB에서 sth를 읽습니다. 2. DB 정보를 분석하십시오. 3. 필요한 경우 외부 시스템에 HTTP 요청을 수행하십시오. 4. 10 분 동안 수면 용 실을 잠급니다. 요점은 : 만약 내가 바람둥이의 인스턴스를 2 개 가지고 있다면, 오직 하나만이 논리를 실행해야합니다. – Lewy

답변

0

을 실행해야 -application-server. 모든 스레드는 응용 프로그램 서버에 의해 관리되어야합니다.