OSGi捆绑从类路径错误中获取资源

时间:2012-09-21 09:12:03

标签: hibernate java-ee osgi

我正在编写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寻求帮助!

1 个答案:

答案 0 :(得分:3)

Hibernate在包含jar库的其他包中找不到任何资源.Hibernate不知道OSGI清单文件而忽略它们,因此清单文件是否正确无关紧要或不。

请参阅my answer in this thread,我在那里提供的解决方案也应该解决您的问题。