1

私は hibernate dto-mapping osgi bundle (glassfish 用) を書いていますが、このバンドルはクラスパスからのリソースを認識しませんでした。

マニフェスト ファイル:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Model
Bundle-SymbolicName: com.test.spm.model
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.test.spm.model.Activator
Bundle-Vendor: TEST
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: org.osgi.framework;version="1.3.0"
Require-Bundle: org.hibernate.core;bundle-version="4.1.7"
Export-Package: com.test.spm.model,
 com.test.spm.model.dto,
 com.test.spm.model.dto.base,
 com.test.spm.model.util
Bundle-ClassPath: .,
 lib/sqljdbc4.jar

sqljdbc4.jar からファイルにアクセスできません。エラー:

Caused by: java.lang.ClassNotFoundException: Could not load requested class : com.microsoft.sqlserver.jdbc.SQLServerDriver

ただし、このライブラリはエクスポートされたjarファイルに存在します。

また、クラスパスを介して休止状態の構成ファイルとマッピングファイルにアクセスできません(クラスが見つからず、リソースが見つからないという例外もありました)。しかし、次のコードは機能します:

            sessionFactory = new Configuration().configure(HibernateUtil.class.getClassLoader().getResource("hibernate.cfg.xml"))
                    .addURL(HibernateUtil.class.getClassLoader().getResource("mapping/Project.hmb.xml"))
                    .buildSessionFactory();

召喚してみた

System.out.println(HibernateUtil.class.getClassLoader().getResource("hibernate.cfg.xml")); 

そしてsys outでこれを見てください:

bundle://376.0:1/hibernate.cfg.xml

バンドル クラスパス オプションを検索しましたが、私のマニフェストは問題ないようです。バンドルにクラスパス リソースを表示させるには、特定のバンドル クラスパス プロパティが必要ですか? 助けてくれてありがとう!

4

1 に答える 1

3

Hibernate は、jar ライブラリが含まれているバンドル以外のバンドルにリソースを見つけることができません。Hibernate は OSGI マニフェスト ファイルを認識せず、それらを無視するため、マニフェスト ファイルが正しいかどうかは問題ではありません。

このスレッドで私の回答を参照してください。そこで私が提供した解決策は、あなたの問題にも役立つはずです。

于 2012-09-21T09:34:37.433 に答える