【发布时间】:2010-12-06 06:05:53
【问题描述】:
我有一个 OSGi 项目,其中包含一个带有 JPA 注释域模型的包和另一个使用 Eclipselink 作为持久性提供程序的包。后者使用配置参数实例化EntityManager 以确定JDBC 驱动程序的类名。
现在,包含模型的捆绑包需要能够看到 JDBC 驱动程序,我认为这是因为 eclipselink 使用模型类的类加载器来加载它。这有不想要的副作用,我需要在模型包中显式声明 Import-Package 指令以拉入驱动程序。通过 OSGi 更换驱动程序不再容易(我需要重新生成清单),这首先违背了使用 OSGi 的目的。
由于 JDBC 驱动程序都实现了相同的接口,我想做的是将数据库驱动程序放在它们自己的包中,将它们注册到 OSGi 容器中,使用它们的通用接口名称,并让 eclipselink 使用任何可用的东西。但我不知道该怎么做,因为似乎驱动程序是由 eclipselink 实例化的,这意味着我无法在其他地方实例化它并且让 eclipselink 忘记实际的类名。
这似乎是一件非常典型的事情。我想已经有解决方案了?
Oracle 的 Shaun Smith 今年早些时候提出的This post 暗示可能没有,但这也表明对它的需求似乎相当真实。
【问题讨论】:
标签: jdbc osgi eclipselink