我正在编写hibernate dto-mapping osgi bundle(对于glassfish),而且这个bundle没有看到来自classpath的资源。
清单文件:
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文件中。
此外,我无法访问hibernate配置文件,并通过类路径映射文件(未找到类和资源未找到异常)。但是下一个代码可以工作:
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
用Google搜索捆绑类路径选项,但我的清单似乎没问题。 需要一些特定的bundle classpath属性来让我的bundle看到classpath资源,或者是什么? Thanx寻求帮助!
答案 0 :(得分:3)
Hibernate在包含jar库的其他包中找不到任何资源.Hibernate不知道OSGI清单文件而忽略它们,因此清单文件是否正确无关紧要或不。
请参阅my answer in this thread,我在那里提供的解决方案也应该解决您的问题。