数据库
首页 > 数据库> > java – 如何将数据库驱动程序发布为OSGi包

java – 如何将数据库驱动程序发布为OSGi包

作者:互联网

我有两个或更多非特定的JDBC驱动程序.我希望在OSGi容器中使用它们.某些驱动程序来自同一第三方,只有版本差异和一个或多个冲突类,包括驱动程序类和连接URL.

解释如何从每个捆绑包中制作OSGi包.

我正在使用JBoss Fuse 6.2.1.redhat-117,Red Hat JBoss Developer Studio 10.4.0.GA(带有Fuse集成的Eclipse),Maven 3.3.9,Eclipse Maven集成,Windows 7.

我尝试使用两步过程为每个JDBC驱动程序生成自己的bundle.

>将驱动程序部署到Maven存储库.
>使用osgi:install -s wrap:mvn:group / artifact / version将驱动程序加载到Fuse中.

这不够好.仅当JDBC驱动程序是OSGi中安装的唯一冲突驱动程序时,它才有效.

我能说的最好,我所描述的问题是OSGi创建的问题.因此,我相信有一个解决方案.

我愿意竭尽全力解决这个问题(缺乏硬编码,与通用实施不同),因为迄今为止付出的投资和解决方案所需的服务.

解决方法:

在OSGi中使用JDBC驱动程序的正确方法是实现the JDBC service.这很容易实现,因为代码几乎完全是通用的.

DataSourceFactory接口有四种生成方法

>司机
> DataSource
> ConnectionPoolDataSource
> XADataSource

如果您的工厂无法提供这些类型中的一个或多个,则抛出SQLException是完全合理的.

然后,您的DataSourceFactory实现包应该包装JDBC驱动程序jar(例如,如果它还不是OSGi包),或者从JDBC驱动程序导入必要的包,以便它可以实现DataSourceFactory方法(例如,如果驱动程序已经有OSGi元数据,但没有提供必要的服务).然后应将DataSourceFactory注册为服务,可以使用bundle activator(H2 does this)或使用Declarative Services之类的容器轻松实现.此服务使用服务属性通告它提供的驱动程序类以及版本和供应商信息.

可以使用相同的模板项目为同一驱动程序的不同版本生成多个不同的包,或者通过更改引用的实现.使用诸如bnd-maven-plugin之类的工具将确保您的OSGi元数据正确无误.

已经有一些项目,例如PAX-JDBC,它们试图为JDBC驱动程序提供这些类型的包装器.

标签:java,osgi,jdbc,fuseesb,jbossfuse
来源: https://codeday.me/bug/20190828/1747463.html