質問

私はオスギーが新しいですが、それは面白いです。 OSGIバンドルとJavaアプリケーションの間で対話することは可能ですか?可能であれば、どうやって?ありがとう!

コンテキストは、私が多くの依存関係を持つ大きなJava SEアプリケーション(著者は別のプログラマー)を持っているということです。最初に私の目標は、新しい機能と2番目のアーキテクチャを追加することです。 OSGIを使用しようとしますが、コードを2回書きたくありません。そのため、今すぐ新しいコードをバンドルとして書きたいと思います。ただし、古いアプリケーションからこの新しい機能を使用します。

役に立ちましたか?

解決

OSGIは構造化技術と考えています。これを使用して、アプリケーションのコンポーネント構造を定義できます。そのため、すべてのアプリは事実上OSGIバンドルのコレクションです。したがって、相互作用は問題ではなく、通常の方法でアプリの別のビットだけです。

次のコメントの明確化を編集しました。

基本的な決定があります。OSGIコードは、元のプロセスと同じプロセスまたは別々のプロセスで実行されますか?

分離とは、OSGIを悪用するが、通信の複雑さとパフォーマンスのオーバーヘッドを処理するコストで、あなたが望むように新しいコードを構築する自由を意味します。何らかの形でリモートをサポートするために、既存のアプリに大幅な変更を加えることになる可能性が高いです。あなたのOSGIコードがたまたま他のリモートクライアントが使用するある種の再利用可能なサービスでない限り、私はこれを素晴らしいアプローチとは見なしません。

同じプロセスで、弾丸を噛んで、これがOSGIアプリケーションになると言う必要があると思います。既存のアプリを採用してOSGIで実行するための努力の量は、過剰である必要はありません。

既存のアプリケーションを1つの巨大なOSGIバンドルとして扱ったとしますか?初期化にはいくつかの作業がありますが、残りは「ただ機能する」でしょうか?これを最初のステップとして行うと、既存のアプリの実際の再編成とモジュール化が延期されます。次に、新しいモジュールが必要とするインターフェイスを公開するだけで、必要に応じて新しいモジュールが提供するサービスを消費します。すぐに、依存関係を構築することによりOSGIのメリットが得られます。

他のヒント

はい!はい!はい!これは、OSGIを利用してサービスベースのアプリケーションに向かって進化するのに最適な方法です。

使用しているフレームワークの実装さえ知らずに、4.2ランチャーAPIを使用してフレームワークを作成することは些細なことです。フレームワークオブジェクトを取得し、実際にはOSGIバンドルであり、BundleContextを提供できます。これを使用してバンドルをインストールできます。これはすべてスペックに記載されていますが、Felixで多くの具体的で優れた例を見つけることができます。 http://felix.apache.org/site/apache-felix-framework-launch-and-embedding.html. 。 Felixは、初日からアプリに埋め込まれたことを明示的に宣伝しています。

このアプローチの難しい部分は、モジュール性とその制限に慣れることです。役立つには、OSGIバンドルとアプリケーションの間でクラスを共有する必要があります。これには、org.osgi.framework.systempackages.extraプロパティを使用して、これらの共有パッケージをアプリケーションから明示的にエクスポートする必要があります。このプロパティは、アプリケーションのエクスポートパッケージヘッダーです。

Javaのクラスロードモデルのため、フレームワークでバンドルからパッケージをインポートすることは不可能です。これは、アプリケーションコードがこれらのサービスのパッケージがアプリClassPathにあるフレームワークからのみサービスを使用できることを意味します。

この結果、新しい機能は、完全な可視性があるバンドルにドリフトする傾向があります。エクスポートされたアプリパッケージとバンドルの両方です。しかし、これはおそらくあなたが望むものです。

したがって、この潜在的な落とし穴に注意してください。埋め込み、その後、すべてのコードをバンドルに移行して、アプリケーションがOSGIランチャーのみになるようにします。ただし、2つの環境間で共有されているパッケージに非常に注意してください。

頑張って、これがどうなるか教えてください。

OSGIを使用したアプリケーションビルドは、2つの通常(Java)アプリケーションと同じ方法で相互作用できます。したがって、ファイルをロード /保存することにより。または、そのうちの1つがOSGI HTTPサーバーとして作成されている場合、その(OSGI)サーバーとHTTPを介して通信するだけです。 OSGIが含まれていないように、以前のように考えてみてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top