そこで、私はこのトピックについて多くの調査を行ったので、その結果を皆さんと共有したいと思います。
1 つのオプション (技術的な観点から非常に魅力的) は、Java と .Net の間の商用ブリッジを使用することです。確かに、最も人気のある製品はJNBridgeとJavanet です。. どちらの製品も非常に使いやすく、サポートも充実しており、非常に洗練されているようです。特に、JNBridge はすでに Java と Mono 間のブリッジもサポートしているため、上記の主な要件の 1 つである非 Windows OS への移植も可能です。Javaonet も Mono を統合したいと考えており、この機能を間もなくリリースする予定です。ただし、どちらのソリューションも商用であり、それぞれの機能とそれぞれのコストを比較検討する必要があります。それでも、純粋に技術的な観点から見ると、それらは見栄えがよく、Java と .Net 間の非常に高速な通信 (Web サービスよりも高速) を可能にすると述べています。
もう 1 つのオプションは、Java と .NET を COM 経由で接続することです。COM は一般にプラットフォームに依存しないように定義されているため、これは複数の OS で動作する可能性があります。EZJCOM、J-Interop、JACOB、JCOM など、このような実装に使用できるオープン ソース プロジェクトは多数あります。主な制限 (特に私たちのプロジェクトの場合) は、Mono が (まだ) Windows での COM 相互運用性のみをサポートすることです。したがって、これは私たちにとって実際には選択肢ではありません。しかし、Windows のみで Java と .NET の相互運用性を実現したい場合は、これが良い方法です。
Java と C# を統合する簡単な方法は、Java Native Interface (JNI) を使用することです。また、JNI をより使いやすくするさまざまな実装を見つけることもできます。最も人気のある実装は、おそらくjni4netであり、非常にアクティブで頻繁に使用されるプロジェクトのようです。しかし、カフェイン、エスプレッソ、csjni など、特定の長所と短所があるものもあります。最後に、JNI は 100% プラットフォームに依存しません。さまざまなプラットフォームに適用できますが、プラットフォーム固有のコードを生成する必要があるため、この目的には明らかに使いにくくなります。アプリケーションを Windows に制限する場合は、jni4net が非常に適しているようです。
3 番目のオプションは、共通言語ランタイム内で Java と .Net の両方の部分を実行することです。そのため、 Ikvm.netは 1 つの可能性があり、非常に人気のあるソリューションです (上記の Samuel Audet による説明)。このオプションの欠点は、JDK の機能と効率が失われることです。
最後で確実に最も一般的な代替手段は、Java と .Net の世界の間に Web サービスをセットアップすることです。このソリューションでは、オブジェクトを Java および .Net との間でシリアライズ/デシリアライズするための適切な方法を見つける必要があります。利用可能なそのための多様な可能な解決策があります。RenniePet は、Protocol Buffers に基づく洗練されたソリューションについて言及しました。http://java-cs-bridge.sourceforge.net/など、他にも存在します。このオプションには、通信の実行時間を考慮すると潜在的な欠点があるかもしれませんが、私たちにとっては良い方法かもしれません。
これが、将来同じ問題に直面する人に役立つことを願っています。