2009-04-24 13 views
9

私は標準のGWTアプリケーションを持っています。もちろん、バックエンドでJavaサーブレットを使用しています。このサーブレットはTomcatとWindows Serverに配備されています。tomcat auto startサーブレット

ルールや提案に反していることは知っていますが、サーブレットの初期化時に起動するスレッド(サーブレットの「init」メソッド)が1つあります。スレッドは、GWTアプリケーション/インタフェース自体とは完全に独立した、特定の時間に異なるデータベースタスクを実行することを目的とした、ある種のスケジューラです。

私が必要とするのは、戦争が展開されるとすぐにサーブレットの「init」メソッドを呼び出すことです。私がしてきたのは、アプリケーションをアップグレードするたびに、適切なディレクトリにwarを落としてから、アプリケーションのGWTアプリケーションに "ログイン"して、 "init"メソッドを呼び出さなければなりません。私は、サーブレットのinitメソッドは、戦争が更新されるとすぐに呼び出されて、GWTアプリケーションにログインする必要はありません。

アイデア?

答えて

17

servlet context listenerを使用できます。具体的には、あなたはcontextInitializedメソッドであなたのスレッドを開始することができます:

import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 

public class MyListener implements ServletContextListener { 

    public void contextInitialized(ServletContextEvent sce) { 
     // start the thread 
    } 

    public void contextDestroyed(ServletContextEvent sce) { 
     // stop the thread 
    } 
} 

を、次に追加:

<listener> 
    <description>ServletContextListener</description> 
    <listener-class>MyListener</listener-class> 
</listener> 

をあなたは

+0

ありがとう、それは私が探していたものです。 – user85116

+0

は魅力的です。ありがとう –

0

は別の選択肢がQuartz Scheduler.

を用いることであろうweb.xmlに

Quartzはフル機能のオープンソースです。 ジョブスケジューリングシステム少なくともと統合するか、または側面に沿って使用することができます 実質的に任意のJ2EEまたはJ2SEアプリケーション - 最小のスタンドアロンアプリケーションから最大のeコマース システムまで。 Quartzを使用して が数十、数百、さらには の数万のジョブを実行するための単純または複雑なスケジュールを作成することができます。 タスクが標準のJava コンポーネントまたはEJBとして定義されているジョブ。クォーラム スケジューラには、トランザクションやクラスタリングなど、多くの エンタープライズクラスの機能が含まれています(JTA など)。

非常に使いやすく、既存の理由はジョブをスケジュールすることです。あなたがしたいことのようなものです。

+0

これはおそらく効果的な解決策ですが、今は私のコードの変更が最小限で済むように、できるだけ単純なものが必要です。しかし、とにかくありがとう、私はこれをより詳細に将来見る必要があります。 – user85116

3

WEB-INF/web.xmlでload-on-startupを使用します。 Netbeansでは、サーブレットタブの項目「起動順序」にあります。

<servlet> 
    <servlet-name>Hl7Servlet</servlet-name> 
    <servlet-class>nl.vandenzen.Hl7Servlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
+0

はい、load-on-startupを使用すると簡単に解決でき、Webサーブレット2.4以上であれば問題ありません。 –

関連する問題