私はosgiバンドルを1日に4回リロードする必要があります。バンドルのリロードは、静的インスタンスBeanの再作成、ラクダルートの再ロード、スレッドプールの再作成と注入、データベース接続プールなどを意味します。私はsshでバンドルをリフレッシュしようとしましたが、残業時間が変わるバンドルIDが必要でした。だから、私はヘルパーバンドル【選択ヘルパーバンドルと一緒に3つのバンドルがあります。1日4回osgiバンドルのアップデートに関する問題
osgi impl : felix
container : apache-servicemix-4.4.1-fuse-03-06
Service Dependency spec : Blueprint
をシンボル名でバンドルを取得し、それらを更新しマネージャバンドルを書いたすべての共通 使われるクラスおよびサービスを提供していますインターフェイス。これら3つのバンドルの間でコードを共有することはありません(いずれもパッケージをエクスポートしません)。それらのすべてがcamelのVMエンドポイントおよびサービスを介して相互作用します。私は他の3つのバンドルをリフレッシュし、ヘルパーバンドルはサービスを提供しません。
問題は、起動してうまく動作するこれらの3つのバンドルのアップデートを行うときですが、これを行うたびにjconsoleで800-900クラスの増加が見られます。 gcを強制することも、これらのオブジェクトをクリーンアップしていないようです。だから、これらの古い有線オブジェクトは何ができますか?サービスの依存関係は自動的に更新され、バンドル間のコードの依存関係はありません。更新後と更新前のクラスの数の違いを確認しました。
私はいくつかのクラスのカウントが org.apache.activemq.camel.component.VmComponent、 私 org.apache.commons.dbcp.BasicDataSource ..etcといくつかのカスタム豆のように倍増している見ることができました私のラクダのルートで定義されています。私はキャメルコア、青写真、石英などのコンテナに依存しています。豆、VMエンドポイントなどには何が起こりますか?ラクラのコンテキストやblueprint-config xmlのアップデート時に定義されているコンポーネントです。バンドルを更新したら、FrameworkWiring.refreshBundles()を呼び出すことをお勧めします。しかし、私はバンドルの間でコード共有を持っていないと私は間違っていると思う他の依存関係のコンテナを処理する必要があります。そして、servicemixの現在のfelixフレームワークの実装がFrameworkWiring.refreshBundles()(ref)をサポートしているかどうかはわかりません。どうすればこの問題を解決できますか?
おかげ sanre6
古いバンドルインスタンスのスレッドがぶら下がっていますか? – artbristol
はい、その数は倍増しています。バンドルを更新する前に私のインスタンスを閉じてラクダのルートをシャットダウンする必要があると言っていますか? – sanre6
同じ問題が見つかりました。分かりにくい実装に切り替えると、この問題は消えてしまい、Felix OSGIコンテナの問題が疑われます。 –