2

語彙力がないので、ここで何を質問したらいいのかわかりません...

Tomcat サーブレット (およびそのための任意のサーバー) は、ステートレスであり、状態がデータベースに保存されている状態でリクエストに迅速に応答する場合、うまく機能します。実行時間の長い操作がある場合、バックグラウンドで他のサービスを実行し、Tomcat ハンドラーがそれと通信するようにしたいと思うかもしれません。Tomcat と同じ JVM で実行時間の長い Java アプリケーションを実行し、「通常の」Tomcat サーブレットを介して対話する方法はありますか?


例: HTTP で RESTful な因数分解サービスを提供したいとします。

考えられるシナリオは次のとおりです (HTTP 構文が正しいことを願っています。ほとんどのヘッダーを省略しています)。

# comments start with #, > = request, < = response
# 
# first we create a queue
> POST /factorizer/create-queue
> {information here}
< queue=12345B
# then we post some numbers to it
> POST /factorizer/queue/12345B
> 123
> 456
> 678
> 12345678901234567890123456789
< OK
# let's look at the status
> GET /factorizer/queue/12345B/status
< requested=4
< processed=3
# query
> GET /factorizer/queue/12345B/7
< Error: invalid index
> GET /factorizer/queue/12345B/3
< Error: not complete
> GET /factorizer/queue/12345B/0
< 123=3*41
# wait a while
> GET /factorizer/queue/12345B/status
< requested=4
< processed=4
> GET /factorizer/queue/12345B/3
< 12345678901234567890123456789=3*3*3*7*13*31*37*211*241*2161*3607*3803*2906161

クエリを処理するサーブレットを作成する方法は考えられますが、同じ JVM でデーモン/独立して実行されるサービスを実装するにはどうすればよいでしょうか?

編集:上記の例で、私がやりたいことは、作業キューを使用して自律的に実行され、素数を因数分解し、Tomcat サーブレットが公開するために使用できる操作をサポートする Java インターフェイスを持つバックグラウンド アプリケーションを用意することです。ウェブへのサービス。これで、バックグラウンド アプリの Web インターフェイスや HTTP について心配する必要がなくなり、サーブレットでのマルチスレッドの問題や素因数分解について心配する必要もなくなりました。

4

1 に答える 1

1

同じ JVM にいる必要がまったくない場合 (つまり、オブジェクトに直接アクセスするパフォーマンスが必要ない場合) は、別の Tomcat アプリケーションを作成し、他のアプリケーションが HTTP 経由で localhost と通信するようにすることができます。実際には、たまたま同じマシンで実行される Web サービスを作成することになります。(他の方法で複数の Tomcat アプリケーションが相互に認識できるかどうかはわかりません。これは Enterprise Java Beans が解決する問題ですが、あなたにとっては重すぎる解決策かもしれません。)

これを行う必要がある Tomcat アプリケーションが 1 つしかない場合は、ワーカー スレッドを作成し、すべての要求が通信できるアプリケーション コンテキストに配置します。

特定の問題に関しては、O'Reilly の「Restful Web Services」本で Asynchronous Job パターンのようなものを説明しているようです。これは、「202 Accepted」ステータス コードを使用して、処理が完了していないことを示します。この本の第 8 章の「非同期操作」を参照してください。

http://www.amazon.com/RESTful-Web-Services-Leonard-Richardson/dp/0596529260/ref=sr_1_1?ie=UTF8&s=books&qid=1255555328&sr=8-1

于 2009-10-14T21:23:14.343 に答える