21

私はJavaプロジェクトのメッセージパッシングソリューションとしてzeromqを調査していますが、Javaバインディングの説明に従うのはやや難しいと思います。 http://www.zeromq.org/bindings:java

私はJavaバインディングに慣れていないので、これらはばかげた質問かもしれませんが、誰かが私を理解するのを手伝ってくれるでしょう:

  1. なぜ何かをインストールする必要があるのですか?
  2. あるマシンで構築したjarは、別のシステムでも機能しますか?このアプリケーションをポータブルにする必要があります。
  3. もしそうなら、なぜ私は最初に自分の瓶を作る必要があるのですか?

zeromqで提供されている手順では、不足しているCプロジェクトの構築に精通している必要があるように感じます。そのため、おそらく私は密集しているだけですが、これは大変な作業のようです。

4

3 に答える 3

27

ZeroMQのJavaバインディングの仲間のユーザーとして、私は同情します。ZeroMQは、間違いなく、管理が難しいJava依存関係の1つです。心の底から、ZeroMQはネイティブCコードであり、JavaバインディングはコアZeroMQライブラリへのJNIインターフェイスの(比較的)軽量なラッパーであり、これがデプロイが複雑な理由です。

余談ですが、ZeroMQがアプリケーションに適している場合は、これに似たものは実際にはないため、問題を解決する価値は十分にあります。残念ながら、これは、それが本当に必要なものであるかどうかを判断できるように、これらすべての手順を実行して機能させる必要があることを意味します。

ZeroMQ for Javaは、次の3つのコンポーネントに基づいています。

  • libzmq-コアZeroMQライブラリ(DLL-Javaだけでなく、すべての言語に必要)
  • jzmq-Javaバインディング(DLL)のネイティブ部分
  • zeromq.jar-Javaバインディング(JAR)のJava部分

あるマシンで構築したjarは、別のシステムでも機能しますか?このアプリケーションをポータブルにする必要があります。

はい。瓶は持ち運び可能です。どのマシンでもビルドして、他のマシンにデプロイできます。しかし、それは簡単な部分です。難しいのは、必要なさまざまなDLLを作成することであり、それらは移植性がありません。Windows、Mac、FedoraLinuxをサポートしたいとします。Windows、Mac、Fedoraのネイティブ開発環境が必要であり、サポートするプラットフォームごとにDLLを構築します。

Linuxについて、あるディストリビューション(たとえばFedora)で構築されたDLLが別のディストリビューション(たとえばDebian)で実行されるかどうかを判断するのに十分な知識はありません。そうでない場合は、さらに作業が必要です。

とにかく、アプリケーションは移植可能です-ZeroMQとJZMQは膨大な数のプラットフォームで実行できます-しかし、各プラットフォームをインストールするときにjarと適切なDLLのセットが確実に配置されるように、展開プロセスを厳密に制御する必要がありますインストールされ、適切な場所にインストールされます。

なぜ何かをインストールする必要があるのですか?

技術的にはそうではありません。しかしmake install、インクルードファイルとライブラリファイルがコンパイラーが期待する場所にあり、プログラムを実行するときにJavaがそれらをロードできるようにするために、この手順を実行することをお勧めします。

もしそうなら、なぜ私は最初に自分の瓶を作る必要があるのですか?

私はコミッターではないので、はっきりとは言えません。その一部は開発者の効率性だと思います。彼らは、自分でjarを作成できるユーザーのためにjarを作成するよりも、コードを改善したいと思っています。

さらに重要なのは、jarが十分ではなく、とにかくDLLをビルドする必要があるため、jarとDLLを一緒にビルドする方が理にかなっています。そうすれば、JNIラッパーには、Javaラッパークラスのネイティブ宣言と一致するようにCで実装された適切なネイティブメソッドがあることが確実になります。

幸運を。お役に立てれば。

于 2012-10-24T16:40:42.923 に答える
1

個人的には、事前に作成されたJARは、Javaで0MQを支援するのに大いに役立つと思います。私は多くのサイトでJavaで作業していますが、MSVSを提供しておらず、dllとjarを取得するためだけにこのような長いセットアップを実行する必要があることは私には逆効果のようです。

于 2015-04-01T10:55:32.853 に答える
1

JeroMQ(libzmqの純粋なJava実装)も見ることができます。

JeroMQは、ZeroMQと同じプロトコルとAPIを使用する完全なJavaスタックであり、コミュニティの公式プロジェクトです。JNIやC++を構築する必要がないため、Javaユーザーの作業が大幅に簡素化されます。これは、PGMマルチキャストを除いてZeroMQが行うすべてのことを行います。

于 2016-03-02T19:27:33.097 に答える