2012-12-06 49 views
0

我在創建web應用程序方面比較新,所以請耐心等待。由多個用戶重用tomcat會話

我有一個遺留應用程序,我想主辦Tomcat上。此應用程序需要很長時間才能啓動(10秒?)並消耗大量資源。我想在任何給定的時間只有一個此應用程序的實例運行。

我想設置tomcat,以便在任何給定的時間可以有0或1個會話。當用戶第一次連接時,將創建一個啓動舊應用程序實例的會話,任何後續用戶都將使用同一個會話。

這似乎是tomcat的默認行爲是爲每個用戶創建一個新的會話,這對我不起作用。

能否請您就如何我可以安裝tomcat的,這樣由第一用戶創建的會話使用的後續用戶?

回答

0

我最終實現其維護的單一實例的HttpSessionListener:

import javax.servlet.http.HttpSessionEvent; 
import javax.servlet.http.HttpSessionListener; 
import javax.servlet.*; 
import javax.servlet.http.*; 

public class SessionListener implements HttpSessionListener { 

    private static HttpSession _session = null; 

    public static HttpSession GetSession() 
    { 
     return _session; 
    } 

    @Override 
    public void sessionCreated(HttpSessionEvent arg0) { 
     if (_session == null) 
     { 
     System.out.println("setting session"); 
     _session = arg0.getSession(); 
     } 
    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent arg0) { 
     System.out.println("Clearing session"); 
     _session = null; 
    } 
} 
+0

這只是分配上'sessionCreated'一個新的會話參考,並勾銷它'sessionDestroyed'。我不認爲這實現了你正在尋找的東西。 – mindas

+1

我首先創建該servlet去聆聽,看是否聽者一個會話(SessionListener.GetSession())。如果是這樣,servlet將使用該會話而不是創建一個新會話。如果監聽器沒有有效的會話,servlet將創建它並且監聽器將會知道。這確保了只有一個會話被所有用戶使用。 –

+0

有趣的方法,好主意! – mindas

1

另一種選擇是實施自己的會話Manager。會話管理器負責創建新會話,查找會話等,並在server.xml中設置。