2009-03-09 32 views
11

私は、いくつかのコマンドライン引数を取り、いくつかのハードコア計算を行い、その結果をいくつかのファイルとともにファイルに書き出すjarファイルにパッケージ化したスタンドアロンJavaアプリケーションを作成しました結果を含むファイルがどこにあるのかを示すデフォルトの出力ストリームに出力します。Webサーバー上でJavaを実行する

私はこの技術を取り巻くウェブサイトを作りたいと思っています。ユーザーはHTMLフォームに記入してWebページに投稿し、Javaアプリケーションを呼び出し、Javaアプリケーションから結果を解析してユーザーに表示することができます。

現在、私はポスト要求からデータを収集するためにPHPを少し使用していて、そしてちょうどexecを呼び出し使用:

java -jar -Xmx128m myapplication.jar command-line-arguments

することは、この悪いですか?

私のウェブサイトは毎日数千回訪問しており、Javaアプリケーションの実行には1分30秒以上かかる可能性があるため、過度に非効率になりたくはありません。すべての要求に対してJavaを直接呼び出さなければならないよりも優れた解決策があるようです。

私はJavaサーブレット、Bean、Tomcat、Glassfishな​​どのことを聞いていますが、私はそれらが何で、どのように私に利益をもたらすのか分かりません。これらは私に何を与えるのですか?アプリケーションを実行するたびにJava JVMを作成する必要がないため、結果が速くなりますか?少ないメモリ使用量?私は明らかに可能な限り小さなメモリフットプリントで可能な限り高速に動作させたいと思っています。

ここで私が取ることができる最良のアプローチは何ですか?私は多くのコードがあるので、私のアプリケーションの深刻な書き換えをしたくありません(CやC++への書き換えは問題ありません)。


ありがとうございます。

答えて

12

[OK]サーブレットは、コンテナの内部で実行するように設計されているスマイルなアプリケーションです。 Tomcatのような単純なサーブレット・コンテナ、またはglassfishのようなフル機能のアプリケーション・サーバーのいずれかにJavaコードを挿入するための拡張ポイントを提供します。アプリケーションサーバーがHTTPのやりとりを扱うのが難しくなり、セキュリティ、ログ、セッション管理、エラー処理などの機能が提供されるため、これを実行する必要があります(servlet specificationを参照)。

アプリケーションをconaner(他のすべての機能を備えたWebサーバー)内に置くと、アプリケーションのライフサイクルをよりよく管理できます。 Webサーバーをシャットダウンしたり、再デプロイしたり、他のインスタンスを起動したりすることなく、アプリケーションの起動と停止を行うことができます。また、その素晴らしい第2アプリケーションを思いついたら、最初のアプリケーションのすぐ隣にドロップするのも簡単です。また、複数のマシンをクラスタリングして、冗長性とロードバランシングを容易にすることもできます。

これはほんの始まりですが、コンテナベースのアプリケーションを作成するのに役立つ多くの機能、テクノロジ、フレームワークがあります。 Servlet tutorial

0

おそらく、Webアプリケーションから直接Javaアプリケーションを呼び出すことは望ましくありません。あなたが言ったように、Javaプロセスが実行に30秒かかる場合、あなたのWebサーバーは、特にあなたのサイトが激しくなっている場合は、邪魔になるだろう。

バックエンド処理要求をディスパッチするWebサービス(および場合によってはメッセージキュー)を調べることができます。 PHPページはサーバー上のWebサービスを呼び出すことができ、処理要求をキューに入れたり、非同期でjavaアプリケーションを起動することができます。処理中にユーザーがハングしたブラウザしか持たず、HTTPリクエストがタイムアウトする可能性があるため、HTTPリクエストでJavaアプリケーションが終了するのを待たせたくありません。

Javaアプリケーションが終了すると、データベーステーブルが更新され、ユーザーはWebサイトからアクセスできます。

2

[これは私にはわかりますか?]アプリケーションを実行するたびにJava JVMを作成する必要がないため、結果が速いのですか?

はい。

- ボーナス - PHPを置き換えて、サイト全体が単一の言語(Java)になるようにすることができます。

また、ワンショットで30秒~60秒という痛みを感じないようにユースケースを修正することも考えられますが、ユーザーと対話的に実行されるより迅速な手順が必要な場合があります。

2

サーブレットコンテナ内でコードを実行します。

ウェブサイトをPHPで保つ必要があり、マシンにJavaがインストールされている場合は、無料のサーブレットコンテナ(Apache TomcatやJettyなど)をインストールするだけです。未使用のポートでサーブレットコンテナを実行するように設定します。 (8080)がデフォルトです。

これらのサーブレットコンテナは、実際にはJavaベースのWebサーバーで、Apacheと同じように、Javaコードを扱うのに特化しています。

各リクエストの新しいjava.exe呼び出しではなく、Java Webサーバーを使用することの最も明白な利点は、Java仮想マシン(jvm)が常に「ホット」で稼動していることです。 java.exe(jvm)を新規に起動すると、余分な時間がかかります。

サーブレットコンテナを使用するもう1つの利点は、コンテナによって、新しい要求ごとにjvm内の新しいスレッドでコードを実行できることです。 1日に何千人ものユーザーにサービスを提供することに問題はありません。おそらく、あなたが1つではなく数百のJavaインスタンスを起動する場合、マシンはクラッシュします。

サーブレット内にコードを配置します。それは本当に新人にとっても簡単です。 HTTP(サーブレットのdoGetメソッドまたはdoPostメソッド)を介してサーブレットと通信します。 phpリクエストフォームをこのサーブレットに渡し、サーブレットにページ、jsonオブジェクト、xml、プレーンテキストのいずれかを返します。

0

最も簡単なことは、Webサーバーをアプリケーションに組み込むことです。 Jettyをご覧ください。

関連する問題