首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使JDBC驱动程序在OSGi环境中可插拔?

如何使JDBC驱动程序在OSGi环境中可插拔?
EN

Stack Overflow用户
提问于 2009-10-13 09:05:27
回答 1查看 970关注 0票数 0

我有一个OSGi项目,其中包含一个带有JPA注释域模型的包和另一个使用Eclipselink作为持久化提供者的包。后者使用配置参数实例化EntityManager,以确定JDBC驱动程序的类名。

现在,包含模型的捆绑包需要能够看到JDBC驱动程序,我认为这是因为eclipselink使用模型类的类加载器来加载它。这有一个不想要的副作用,那就是我需要在模型的捆绑包中显式声明一个Import-Package指令来拉入驱动程序。然后,通过OSGi交换驱动程序就不再容易了(我需要重新生成清单),这就违背了最初使用OSGi的目的。

因为JDBC驱动程序都实现相同的接口,所以我想要做的是将数据库驱动程序放在它们自己的捆绑包中,在它们的公共接口名称下向OSGi容器注册它们,并让eclipselink使用任何可用的东西。但我不知道该怎么做,因为驱动程序似乎是由eclipselink实例化的,这意味着我不能把它安装在其他地方,让eclipselink忽略实际的类名。

这似乎是一件非常典型的事情。我想已经有解决方案了?

甲骨文的Shaun Smith在今年早些时候发布的This post表明,也许没有,但它也表明,对它的需求似乎是相当真实的。

EN

回答 1

Stack Overflow用户

发布于 2009-10-13 09:21:15

听起来像eclipselink的缺点。我建议为此提交一个bug/功能请求。

您的问题的解决方法是在图片中引入另一个包,该包从您的模型和JDBC驱动程序包导入,然后将eclipselink指向那个新包。

这意味着你的模型没有任何对JDBC的引用,你在一个新的捆绑包中建立了连接。缺点是每个受支持的JDBC驱动程序都需要这样一个包,但这些包几乎都是样板代码,所以在几分钟内创建另一个包应该很简单。

另一种解决方案可能是编写您自己的JDBC驱动程序,它只是包装了真正的驱动程序。在您的代码中,您可以使用OSGi发现来查找哪些真正的驱动程序是可用的,而eclipselink链接似乎没有任何变化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1559048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档