私はむしろ単純なシナリオを持っています:OSGiまたはURLClassLoader?
私のアプリケーションには、アプリケーションのロジックを含むコアjarファイルがあります。このコアjarは、実行時に動的にフォルダを監視する必要があります。プラグインjarがそこにドロップされると、ロードされて使用する準備ができます。多くのプラグインジャーがあります。
この機能を実装するには、最も早くメンテナンス可能な方法は何ですか?私は2つの提案を持っています:
1)いくつかのOSGiコンテナ、Apache Felix File Install(新しいバンドルのためにdirを監視するため)。コアジャーはコンテナに束ねて設置されます。
1.1コア・ジャーが新しくインストールしたバンドルをプラグインとして検出する方法は問題ですか?追加されたすべてのバンドルを監視し、 "kalazplugin"のような私のユニークな文字列で何らかの設定を探す方法はありますか?言い換えれば、私のプラグインバンドルをどう区別するのですか?
2)ディレクトリの変更を監視し、jarがドロップされたときに、URLClassLoaderで動的にロードし、自分で実装します。私はいくつかの設定を指定するいくつかの設定ファイルを各プラグインに要求することができます...
ありがとう私はFelixによってiPOJO implementatinoを使用するつもりです。しかし、標準のBundleActivatorクラスを使用することで、ほぼ同じ機能を(理論的に)達成できると思いますが、私のすべての「拡張機能」は同じインターフェースを実装しています。エクステンダのパターンとのトレードオフ(より多くのコードを除く)はありますか? –
はい、BundleActivatorでも同じことができますが、200個のプラグインがあれば、200個のBundleActivatorsになります。プラグイン登録プロセスを変更するには、200個のプラグインバンドルを変更して再デプロイする必要があります。あなたは写真を手に入れます。 –
エクステンダーのパターンはおそらく最良の選択ではありませんが、OPはインストール後にライブラリーで実際に何をしたいのかを指定しません。おそらくあなたはそれからクラスをロードしたいですか?クラスではなくオブジェクトでこれを行う方が良いです。つまり、OSGiサービスレジストリを使用してください。インターフェイスを定義し、プラグインのJARがそのインターフェイスのインスタンスを公開できるようにするだけです。 –