2009-05-03 8 views
4

ディレクトリをリッスンする非常に単純なプロセスが必要です。 は、そのディレクトリに新しいファイルが作成されたときに何らかの操作を行います。tomcatのファイルリスナープロセス

私はそれを行うスレッドプールが必要だと思います。

これは私が通常使っているスプリングフレームワークを使用して実装するのはとても簡単ですが、今は使用できません。 私はtomcatしか使用できません。どうすれば実装できますか?スレッドを開始するエントリポイントは何ですか?

サーブレットでなければならないのですか?

おかげ

答えて

4

あなたは質問を洗練するので、ここでは別の答えが来る:Tomcatの中でデーモンを開始する方法:

まず、web.xmlにあなたのデーモンを登録します。

<リスナー> my.package.servletを

T:.Daemons < /リスナー>

このようなServletContextListenerの実装としてデーモンクラスを実装コードは5秒ごとに呼び出され、TomcatはあなたのアプリケーションがシャットダウンしたときにcontextDestroyedを呼び出します。変数が揮発性であることに注意してください。そうでなければ、マルチコアシステムのシャットダウンに問題が発生する可能性があります。

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

public class Daemons implements ServletContextListener { 
private volatile boolean active = true; 

Runnable myDeamon = new Runnable() { 

    public void run() { 
     while (active) { 
      try { 
       System.out.println("checking changed files..."); 
       Thread.sleep(5000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
}; 

public void contextInitialized(ServletContextEvent servletContextEvent) { 
    new Thread(myDeamon).start(); 
} 

public void contextDestroyed(ServletContextEvent servletContextEvent) { 
    active = false; 
} 
} 
1

あなたがスレッドを開始するlistenerを作成することができ、しかし、これは良いアイデアではありません。 Webコンテナ内で実行しているときは、自分のスレッドを起動しないでください。 Stack Overflowには、これがなぜそうなのかという2つの質問があります。 Quartz(スケジューラーフレームワーク)を使用することもできますが、許容できる解像度には達しませんでした。

とにかく、あなたが記述しているのは、Webアプリケーションではなく、むしろデーモンサービスです。これをWebアプリケーションから独立して実装し、相互に通信するための手段を作成することができます。

1

true java-only file notifiactionがjava 7に追加されます。ここにはpart of the javadoc that describes it roughlyがあります。

ファイルシステムからイベントを観察実装が

可能なネイティブのファイルイベント通知機能の上に直接マッピングするために意図された今、あなたはネイティブプラットフォーム依存のプログラムを作成するために、いずれかの必要があります

のいずれかの方法でポーリングするか、変更を検出するために頻繁にディレクトリを一覧表示するポーリングを実装します。

あなたが今使用できるnotification libraryがあります。これはlinuxのCプログラムを使ってsourceforgeの変更を検出します。ウィンドウではポーリングを使用します。私はそれが動作するかどうかを確認するためにそれを試していない。

+0

問題は通知の問題ではなく、むしろtomcatでデーモンを開始する最善の方法です。スレッドをロードするサーブレットを使用できないのはなぜですか? –