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