2012-01-16 11 views
0

基本的には、JSPでWebページを使用したいので、Javaでは、Linuxサーバー上でさまざまなバックグラウンドプロセス(実行可能なもの)を実行します。Java Webサーバー上で個別のバックグラウンドプロセスを実行する

ウェブとは別のユーザーとして実行する必要があります。

私にはどのようなオプションがありますか?

ありがとうございました。


私はちょうど見られる "ランタイムRT = Runtime.getRuntime();プロセスPROC = rt.exec(" Linuxコマンド ");"働くかもしれない。

ちょうど始めた(子プロセス)プロセスがJavaサーブレットプロセスから完全に切り離されるかどうかわかりません。別のアカウントで実行することは可能ですか?

+0

どのJEEバージョンですか? JEE 6では、EJB JEE 5を使用して非同期サービスを作成するのは簡単ですが、メッセージ駆動型Beanを試してみることができます。 – Thomas

+0

Thx Thomas。私が理解していないことは、Javaワールドとは異なるアカウントのもとで完全に分離されたネイティブプロセスを開始する方法です。 – GaryX

+0

おそらくhttp://docs.oracle.com/javase/7/docs/api/java/lang/Process.htmlが必要です。私はあなたがJSPページから多くを行うことはできないと思っています。少なくともサーブレットが必要ですが、それでもセキュリティ上の制限があります。 – Viruzzo

答えて

0

おそらく生涯実行しているJava EE WebアプリケーションでRuntimeを使用することは悪い考えです。

最初に、Runtimeによって作成された新しいプロセスは、現在実行中のJava環境と同じくらい多くの新しいヒープメモリを割り当てます。これは、デフォルトで64MBなどを使用する単純なJavaアプリケーションの中で必ずしも害を及ぼすものではありませんが、通常はギガバイト単位でメモリを割り当てるJava EE Webアプリケーションでは、メモリが完全に無駄になります。

第2に、Java EE Webアプリケーション内でプロセスを管理しないプロセス/スレッドを起動したくないだけです。プロセス/スレッドが停止して永久に実行され、必要なときにJava EE Webアプリケーションをシャットダウン/再起動できない場合はどうなりますか(最初にすべてを終了する必要があります)プロセスがクラッシュし、それに沿ってJava EEランタイム全体が停止するとどうなりますか?

最後に、プロセスを実行しているユーザーを変更することはできません。常に実行中のJavaランタイムを実行したのと同じユーザーになります。

あなたは基本的に2つのオプションがあります。

  1. は、このすべてのJavaを使用しないでください。たとえば、UNIXベースのプラットフォームではCron、Windowsベースのプラットフォームではタスクスケジューラなど、プラットフォーム提供のバックグラウンドジョブマネージャを使用してジョブを実行します。

  2. 100%Javaで実行します。純粋なJavaを使用して同じ目標を実行します。プロセスを起動する必要はありません。必要に応じて、ExecutorService APIやQuartzのようなサードパーティライブラリを使用して、バックグラウンドジョブを管理することができます。これらのジョブでも100%の純粋なJavaコードを実行する必要があることに注意してください。

関連する問題