2012-09-21 43 views
1

我正在编写hibernate dto-mapping osgi包(对于glassfish),并且此包没有从类路径中看到资源。OSGi包从类路径错误中获取资源

清单文件:从sqljdbc4.jar

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 

广东话访问文件,错误:

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出:对于捆绑类路径选项

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

GOOGLE了,但我的表现似乎确定。 需要我一些特定的包类路径属性,使我的包看到类路径资源,或什么?感谢帮助!

回答

3

Hibernate在其他包中找不到包含jar库的资源。Hibernate不知道OSGI清单文件,它会忽略它们,因此,如果清单文件是正确与否。

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

+0

你是完全正确的,我添加了Hibernate库到这个包,所有的作品都是正确的!但是,你能解释我的下一件事:我的最后一个项目之一是RCP项目(OSGi(Equinox)捆绑插件系统),并且我分开了dto-mapping插件的hibernate libs插件,并且所有工作都很好! RCP捆绑系统和我的问题有什么不同? – Peter

+0

我无法解释,因为我不知道RCP编程,我不知道你的项目是如何安装的。主要的问题是,在hibernate.cfg.xml中指定的资源路径与被执行的bundle的主目录(即hibernate库所在的bundle)相关,并且没有标准的方法Hibernate将路径指定到另一个包中。 – Johanna