1

OSGiで開発しているときに、次の障害に遭遇しました。永続性を担当するバンドルの1つのセットは、com.mysql.jdbc.Driver別の(Springsource EBRプロビジョニングされた)バンドルによって提供されるクラスを使用します。別のバンドルでは、データベースをジョブストアとして使用するようにQuartzスケジューラライブラリを構成しています。これもMySQLドライバーを使用して行われます。ただし、実行すると、が表示されClassNotFoundExceptionます。永続性はまだ正しく機能しているため、これは奇妙です。さらに奇妙なことに、クラスを手動でロードしようとすると、Class.forName("com.mysql.jdbc.Driver")それを使用して正しくロードされ、クラスが実際にロード可能であることを意味します。

偶然かどうかにかかわらず、同じことがDroolsでも起こっているようです...私は最新のDrools jarのいくつかをOSGiバンドルとして再パッケージ化し、それらをデプロイし、再度実行するとClassNotFoundExceptionポップアップします。どちらの場合も、すべてのサプライヤバンドルがマニフェストの必要なバンドルに追加されます。

この奇妙な問題は何か鐘を鳴らしますか?それについて聞いてうれしいです...

4

1 に答える 1

2

これは、Equinox内のクラスローディングに関する問題のようです。DynamicImport-Packageとヘッダーを使用してこれを修正しようとしましEclipse-BuddyPolicyたが、あまり成功しませんでした。最終的に、最新バージョンのQuartzを自分でバンドルとして再パッケージ化し、バンドルにMySql jarを追加することで、これを修正しました。これは、最も美しく、最もエレガントなソリューションではありませんが、今のところはやらなければなりません。誰かがクラスローディングについてもっと教えてくれる場合は、遠慮なく返信してください!

于 2011-05-03T07:31:05.693 に答える