0

アプリケーションを作成しましたが、プラグインを準備したいと考えています。私は Apache Felix を使用することに決めましたが、チュートリアルを読んだ後、それが私が望んでいた選択であったかどうかはわかりません。

アプリケーションを変更して、最初にバンドルを /plugins フォルダからロードし、すべてのバンドルを JMenuItem として JMenu に追加したいと考えています。ClassLoader を使用してそれを行うこともできましたが、OSGi はまさに私が望んでいたものだと思っていましたが、いくつかの問題に遭遇しました。

  • OSGi 用のコマンド ラインがありますが、ユーザーの操作なしでアプリケーションに実装する必要があり、コードでデフォルトの動作をハード コードします。

  • バンドルが最初に呼び出すバンドル(start()およびstop()から継承されたメソッドorg.osgi.framework.BundleActivator)の動作がありますが、実際にはアプリケーションでアプリケーションで何かを行うためのバンドルではなく、バンドルで何かを行う必要があります。

それで、OSGi (Apache Felix など) を使用してそれを作成することが可能かどうか、または ClassLoader を使用して実装し、.jar プラグインのメイン クラスを JMenuItem に明示的に変換して JMenu に追加する必要があるかどうかを教えていただけますか (もっと悪いです)アプリケーションの動的な変更をサポートしておらず、OSGi を学ぶ機会を与えてくれません)。

編集: http://karussell.wordpress.com/2009/09/16/plugable-swing-a-hello-world-osgi-example/のような sth について考えていますが、チュートリアルが見つかりません。

4

1 に答える 1

3

ビューに存在するすべてのバンドルに対してメニュー項目を作成するのはなぜですか? それは本当に意味がありません。

GUI アプリを作成し、start() メソッドでコンテキストを永続化し、それを使用してシステム内のすべてのバンドルのリストを照会することで/できます/。おそらく、メニューが表示されたときにオンデマンドでそれを行いたいと思うでしょう (そのため、現在のリストが表示されます)。

しかし、あなたは本当に間違った方向に考えています。あなたがしたいことは、/services/ を探すことです。サービスが入ってくると、そのサービスを使用してメニュー項目に入力します。そうすれば、バンドルごとに複数のサービスを持つことができ、サービスは何らかの形式の相互作用を持つことができます。

Neil Bartlett と私は、Swing ベースのアプリケーション (登録された Action オブジェクトを使用しますが) に対するまさにこのアプローチについて話しました。デモとプレゼンテーションは、次の場所から引き続き入手できます。

http://www.eclipsezone.com/files/jsig/

これは OSGi v4 の時点で行われたため、インポート フレームワークのバージョンが一致しないためにインストールが失敗する可能性があることに注意してください。もしそうなら、ファイルをクラックして開き、それが何かを言っていないことを確認してくださいImport-Package: org.osgi.framework;version="[1.3.0,1.4.0)"- バージョン番号を取り除くと、今日でも問題なく動作するはずです.

于 2011-11-28T19:59:06.673 に答える