2011-07-31 24 views
3

私は、ソケット内の任意の要求に対してバックグラウンドポーリングで連続して実行される「メインメソッド」を持つスタンドアロンのJavaプログラムを持っています。サーブレットからスタンドアロンJavaプログラムを呼び出す

また、スタンドアロンJavaプログラムによって開かれたソケットに接続するクライアントに特定のデータを渡す必要のあるWebアプリケーションもあります。私のサーブレットからこのjavaプログラムを直接呼び出す方法はありますか?それとも、javaコードがJamによって実行され、サーブレットがサーブレットコンテナによって管理されているため、これはまったく不可能ですか?

これができない場合は、他の提案が非常に役に立ちます。

おかげで、 V

+0

あなたはどのようにして問題を解決しましたか? – Thomas

答えて

1

次の2つのプロセス間で通信することができます任意のソリューション/ JVMがサーブレットとスタンドアロンのJavaプロセス間で通信できるようになる - 例えばソケット。スタンドアロンプ​​ロセスがすでにソケット接続を受け入れている場合は、サーブレットからの接続もリスンします。

更新:javaコマンド(サーブレットコンテナが行う)を呼び出すたびに、新しいJVMを起動します。同じマシン上の2つのJavaプロセスは、他の2つのプロセスと同様に通信できます。彼らはファイルに書き込み、共通のデータベースに通信することができます。 Javaプロセスであるため、JMXを使用して通信することもできます。他にも壁のないオプションがたくさんあります。あなたは本当にあなたの想像力によってのみ制限されています。私がそれをやっていたら、おそらくスタンドアロンプ​​ロセスに軽量HTTPサーバーを埋め込み、HTTPを通信に使用するのは単なる単純なことだからです。簡単に組み込み可能なサーバーには、Simple,Jetty、およびGrizzlyがあります。

+0

サーブレットとJavaプログラムの両方が、同じマシンにあっても、別のJVM上で実行されることはありますか?ソケットを使用せずにこれを達成する方法はありますか?ありがとうございます。これが役に立ちます。 – Vicky

+0

@Vicky:私の答えを更新しました。それがあなたの質問に答えるかどうかを教えてください。 –

+0

ありがとうございます。それはありますが、私はまだ質問があります。申し訳ありませんが、私は愚かなことを鳴らしている場合。そのマシンにインストールされているJava仮想マシン。 Javaプログラムはバイトコードに変換され、すべてのスタンドアロンプ​​ログラムに対して同じJVMによって実行されます。サーブレットはこのJVMを使用しませんか?サーブレットコンテナで実行されていても、同じJVMで実行されると思っていました。私の仮定は間違っていますか? Simple、Jetty、Grizzlyは、本格的なアプリケーションサーバーではなくTomcatサーバーを使用することで使用できますか?ありがとう、私は間違いなくあなたから提案されたオプションを試してみます。 – Vicky

関連する問題