我对 OSGi 中的类可见性感到困惑。我正在运行 Apache Felix 并加载以下包:
- 来自 eclipselink的
antlr
,asm
,jpa
和bundlescore
javax.persistence
1.99的 OSGi-fied jar- 带有
com.mysql.jdbc
驱动程序的 OSGi-fied jar - 我自己的一个包,其中包含带注释的实体类和一个
persistence.xml
- 我自己的另一个捆绑包
Persistence.createEntityManagerFactory(String, Map)
现在,我很困惑的是哪个包必须能够看到 MySQL 驱动程序。我认为这将是创建 EntityManagerFactory 的包,但是当我在该清单中导入时出现 ClassNotFound 错误。接下来,我尝试从 eclipselinkjpa
包的清单中导入它,但又出错了。只有当我从包含持久性单元(实体类和)的包的清单中导入它时persistence.xml
,它才能工作。
所以,似乎数据库驱动程序是由类加载器查找 PU 包的,但这对我来说没有意义。这是怎么回事?
我似乎无法为此找到一个简单的文档。这些幻灯片提供了一些提示,但并不十分全面。