2012-06-29 2 views
0


В одном экземпляре Tomcat У меня есть поток, который был запущен, когда контекст был инициализирован. Что-то вроде этого:
Tomcat Cluster 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, и этот поток работает на двух экземплярах. Я пытаюсь добиться другого поведения.

То, что я пытаюсь достичь:

  • Этот поток должен быть запущен только на одном экземпляре в то время.
  • Если первый экземпляр не работает (по которому выполнялся поток), поток должен запускаться во втором экземпляре.

Я был бы признателен за любые рекомендации.

Что такое логика приложения?
логика приложения, которая выполняется нитью выглядит следующим образом:

  1. чтения из БД н.
  2. Анализ информации о БД.
  3. Выполнение HTTP-запроса к внешней системе, если необходимо.
  4. Сонная нить еще 10 минут.

Дело: Если у меня будет 2 экземпляра кота, только один должен выполнить эту логику

+0

Я предполагаю, что вы на самом деле делаете ** чисто логику приложения **, и я предполагаю (как вы не упомянули), что вы не используете какие-либо базовые инфраструктурные компоненты (например, сеансы и т. Д.), Которыми управляет Tomcat, для достижения что вы пытаетесь сделать. Следовательно, наименее вероятно, что кластеризация по своей сути поддержит это. – Santosh

+0

Спасибо за ответ. Я не использую сеансы. Логика приложения, выполняемая потоком, выглядит следующим образом: 1. Прочтите sth из DB. 2. Проанализируйте информацию БД. 3. Выполняйте запрос HTTP к внешней системе, если это необходимо. 4. Сонная нить еще 10 минут. Дело в том, что если у меня будет 2 экземпляра tomcat, только одна должна выполнить эту логику. – Lewy

ответ

0

Если я правильно понял вы на самом деле не разрешены начать новую нить в приложении при использовании веб -сервер приложений. Все потоки должны управляться сервером приложений.