MySQL データベースへの接続を取得しようとしましたが、 OSGI の Class Loader Hiracie が原因で、 Class.forname() を使用した通常の方法が機能しません。私はそれを行う方法がわかりません。
2699 次
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 に答える