2012-06-29 52 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. 讀某物。
  2. 分析DB信息。
  3. 如果需要,請對外部系統執行HTTP請求。
  4. 再睡10分鐘。

的一點是:如果我已經在使用Tomcat的2個實例,只應該如果我理解正確的話,你是不是真的允許你的應用程序啓動一個新的線程使用網頁時執行此邏輯

+0

我猜你實際上在做的是純粹的應用程序邏輯**,我假設你沒有使用Tomcat自己管理的任何底層基礎設施組件(如會話等)來實現你在做什麼。因此,最不可能的是集羣將會固有地支持這一點。 – Santosh

+0

感謝您的回答。我不會使用會話。由線程執行的應用程序邏輯如下所示:1.從DB讀取某物。 2.分析DB信息。 3.如果需要,請對外部系統執行HTTP請求。 4.再睡10分鐘。重點是:如果我將有兩個tomcat實例,則只有一個應該執行這個邏輯。 – Lewy

回答

0

- 應用服務器。所有線程都必須由應用程序服務器管理。