2

私は次のことをしたいと思います:

ファイルをディスクに書き込みます。次に、シェル コマンドを実行します。シェル コマンドは、このファイルを読み取り/操作し、ネットワーク経由で要求を送信し、応答を別のファイルに書き込み、値を返し、終了します。

シェル コマンドを実行するために、ProcessBuilder と Runtime.exec() について読みました。

上記の機能をどのように正確に実装しますか。担当する webapp (struts) は、Jbossas 7.1 でホストされます。

io と EJB は推奨されないため、JCA のようなものが必要ですか (ただし、私の場合は 1 つのサーバーのみが使用されます)。単純に POJO (Struts アクション) を使用できますか?Struts アクションは「スレッドセーフ」ですが、複数のスレッドを処理する方法がわかりません。

前もって感謝します、

複数のリクエストを並行して処理するためにスレッドのプールを使用する場合、これが JCA を使用する理由になります。

4

2 に答える 2

2

Apache Camel フレームワーク (http://camel.apache.org/index.html) を参照してください。これは非常に便利で、学習/使用が容易な統合フレームワークです。必要なすべてのコンポーネントが含まれています。

  • ファイル - http://camel.apache.org/file2.html - ファイルの生成/消費、ファイルが作成されたなどの通知も
  • Exec - http://camel.apache.org/exec.html - システム コマンドを実行します。
  • 並列処理 - http://camel.apache.org/parallel-processing-and-ordering.html - 複数のリクエストを処理できます。

あるプロジェクト (JBoss AS 7.1 + JSF2/Richfaces) の Java EE 環境で使用しましたが、とても気に入っています。

于 2012-09-26T13:40:52.233 に答える
1

そのようなコンテキストでの 2 フェーズ コミット トランザクションの伝播が適切ではなく、実装が明らかに難しいと思われない限り、JCA と EJB を気にする必要はないことを確認します。

File.createTempFileスレッド間のファイル名の衝突を回避し、シェル スクリプトをProcessBuilder.

技術的に言えば、このような実装の最も難しい点は、リソースを解放するためのエラー処理です: 一時ファイル、スタックしたプロセス:

  • 使用try/finally後にファイルを削除するために使用
  • File.deleteOnExit長時間実行されているサーバーには関係ないため、予期しない障害の後に残った一時ファイルを消去する定期的なジョブを実装する必要があります
  • タイマー ウォッチ ドッグは、遅延して応答しなかったスクリプト プロセスを強制終了する必要があります。何らかの理由でスタックしているプロセスもあります。

ところで、一時ファイルの問題を回避してパフォーマンスを向上させるために、コードが Unix システムで実行される場合は、stdin/stdoutプロセス間でリクエストとレスポンスを渡すために を使用し、できるだけファイル アクセスが少なくなるようにスクリプトを設計することをお勧めします。

ただし、システムがいくつかの制限を引き上げる場合があります。新しいプロセスを作成するために必要なリソースとスクリプトの処理時間により、プロセスの戻りを待機する JBoss スレッドに加えて、オペレーティング システムに数千のプロセスが存在する可能性があります (そのため、使用可能なスレッドが少なくなります)。短い Web 要求を処理します)。クラッシュを回避するために、ウォッチドッグは作成されるプロセスの数を常に制限する必要があります。そのしきい値は、ベンチマークのおかげで定義する必要があります。

于 2012-09-24T20:42:51.383 に答える