0

MySQL データベースへの接続を取得しようとしましたが、 OSGI の Class Loader Hiracie が原因で、 Class.forname() を使用した通常の方法が機能しません。私はそれを行う方法がわかりません。

4

2 に答える 2

0

OSGi では、バンドルのクラスローダーは、バンドルのマニフェストで明示的にインポートされたパッケージのみを表示できます。そのため、Class.forname は、インポートされていないパッケージでは機能しません。

簡単な解決策は、com.mysql.jdbc パッケージのマニフェストに Import-Package ヘッダーを追加することです。(たとえば) com.mysql.jdbc.Driver をロードしようとすると、動作します。

JDBC ドライバーに明示的な Import-Package を追加すると、import-package ヘッダーを変更せずにドライバーを切り替えることができなくなります。このために、DynamicImport-Package: * の使用を検討できます。これにより、バンドルはバンドルの配線後にクラスを見つけることができます。ほとんどの場合、これは決して使用しないでください。これは、OSGi が通常は防止する実行時のクラスローディング例外の可能性に戻っているためです。ただし、JDBC の場合は、これが適切なソリューションになる可能性があります。

于 2013-08-25T20:30:15.150 に答える