2011-06-20 21 views
5

シェルスクリプト(Linuxベースのアプリケーションから呼び出された)からjavaアプリケーションに情報を渡す必要があります。JavaはSystem VのLinuxメッセージキューと対話できますか?

名前付きパイプは、パイプの読み込み/書き込みの両端に複雑な影響を考慮せずにどちらのサービスも開始/停止できないため、痛みがあります()。

ソケットは厳しいですためのリスニングプロセスには、キューイングメカニズムがありません再開され、簡単な実装は新しいソケットは常に他のシェルスクリプトをチェックし、再始動ソケットと非常に複雑になります(作成、およびキューイングすることが必要な場合コード)。

私は最近、これらについて読んでいたシステムV/POSIXのLinuxメッセージキュー。私はFedora 12を実行しています。これらのメッセージキューを設定するには良い方法があり、はJavaからそれらとやりとりすることができますか?

+1

[Java Posix IPCの可能な重複はありますか?](http://stackoverflow.com/questions/2278208/java-posix-ipc-is-there-an-api) – bdonlan

+0

どのように対話するつもりですか彼らとシェルスクリプトから? – Gabe

+1

シンプルなCラッパーを書いて、JNIにバインドするよりもposixメッセージキューにバインドする方が簡単です... – bdonlan

答えて

1

これらを直接使用することはできません。JNIウィザードを使用してそれらを相互にインターフェイスする必要があります。

パイプではどのような問題がありますか? Javaはそれらを単に汎用ファイルと見なします。私はそれらを広範囲に使用していませんが、Pipesには本当の問題はありませんでした。プロデューサーが追いついていない場合、パイプリーダーがパイプを継続的に開く必要があるという唯一の詳細があります。

一方の側で障害が発生した場合、もう一方の側では、もう一方の側が回復するのを待ってブロックします。

パイプからのバッファ読み込みには注意が必要です。パイプからバッファに読み込んだ後に失敗すると、そのデータは失われます。

+0

名前付きパイプとの戦いが終わった。パイプのもう一方の端が開いているまで、入出力ストリームクラス全体がコンストラクタでブロックされるという点でちょっと奇妙だったので、これを回避する必要があります。 EOFを慎重に監視して、再度開いてください。それを正しくするために必要な3つまたは4つの癖を見つけ出すのにはちょっとした猿の動きがありましたが、私は今それらを手に入れたと思います。ちょうどエレガントに見えず、物事はちょっと直感的でした。スクリプトを正しいものにしようとすることは別の大きな問題でした。もう一方の端が開いたり閉じたりすると、cat、tee、およびその他の一般的なユーティリティが非常に奇妙な動作をします。 –

関連する問題