Db2 如何在OSGi捆绑包中设置连接池?

Db2 如何在OSGi捆绑包中设置连接池?,db2,osgi,connection-pooling,Db2,Osgi,Connection Pooling,在为Websphere平台开发web应用程序多年之后,我最近一直在关注OSGi,特别是与RAP(RichAjayPlatform)项目相关的OSGi 在过去,我能够使用JNDI查找访问EAR中定义的连接池 如何在OSGi环境中创建和访问连接池?我已经创建了一个包含jdbc驱动程序的DB2包,但我不确定如何创建池。以前,这是EAR中的一个配置,由Websphere处理 有任何示例和教程吗?您必须将连接池管理器注册为OSGi服务。如果您添加ApacheAries JNDI包,您的所有服务也将通过JN

在为Websphere平台开发web应用程序多年之后,我最近一直在关注OSGi,特别是与RAP(RichAjayPlatform)项目相关的OSGi

在过去,我能够使用JNDI查找访问EAR中定义的连接池

如何在OSGi环境中创建和访问连接池?我已经创建了一个包含jdbc驱动程序的DB2包,但我不确定如何创建池。以前,这是EAR中的一个配置,由Websphere处理


有任何示例和教程吗?

您必须将连接池管理器注册为OSGi服务。如果您添加ApacheAries JNDI包,您的所有服务也将通过JNDI公开。由于类加载器的问题,一些连接池管理器在OSGi中不能很好地发挥作用,但是将驱动程序嵌入到配置连接池的同一捆绑包中通常可以解决这些问题

我只使用JPA+JNDI进行了设置,但创建和导出连接池的步骤如下:

  • 在bundle activator中手动创建连接池(c3p0、dbcp等)
  • 将连接池注册为绑定上下文中的服务
  • 在需要连接的服务中,获取对连接池的引用(我使用声明性服务)并从连接池获取连接

  • 您必须将连接池管理器注册为OSGi服务。如果您添加ApacheAries JNDI包,您的所有服务也将通过JNDI公开。由于类加载器的问题,一些连接池管理器在OSGi中不能很好地发挥作用,但是将驱动程序嵌入到配置连接池的同一捆绑包中通常可以解决这些问题

    我只使用JPA+JNDI进行了设置,但创建和导出连接池的步骤如下:

  • 在bundle activator中手动创建连接池(c3p0、dbcp等)
  • 将连接池注册为绑定上下文中的服务
  • 在需要连接的服务中,获取对连接池的引用(我使用声明性服务)并从连接池获取连接
  • 当然,OSGi没有“内置”任何连接池功能,但实现起来非常简单

    首先,客户机代码应该通过服务访问数据库,可能是
    javax.sql.DataSource
    (我建议使用声明性服务将其注入组件)

    然后,您需要一个捆绑包,该捆绑包将使用特定的驱动程序创建连接池,并注册
    数据源
    服务。我还将使用声明性服务构建它,包装Apache Commons DBCP库。

    当然OSGi中没有“内置”连接池,但它的实现非常简单

    首先,客户机代码应该通过服务访问数据库,可能是
    javax.sql.DataSource
    (我建议使用声明性服务将其注入组件)


    然后,您需要一个捆绑包,该捆绑包将使用特定的驱动程序创建连接池,并注册
    数据源
    服务。我还将使用声明性服务构建它,包装Apache Commons DBCP库。

    这是我设置JPA时采用的方法。OpenJPA中的DriverDataSource非常适合创建基于驱动程序的数据源。有没有关于如何使用dbcp实现这一点的示例代码?我找到了org.apache.commons.dbcp.poolgDataSource,这可能就是我们想要注册为OSGi服务的地方。OSGi之外还有一个例子,这就是我设置JPA的方法。OpenJPA中的DriverDataSource非常适合创建基于驱动程序的数据源。有没有关于如何使用dbcp实现这一点的示例代码?我找到了org.apache.commons.dbcp.poolgDataSource,这可能就是我们想要注册为OSGi服务的地方。在OSGi之外还有一个例子,您希望部署到WebSphereApplicationServer吗?如果是这样,所有数据源都可以在服务注册表中使用。您可以使用javax.sql.DataSource接口类型查找它们,并使用osgi.jndi.service.name服务属性,该属性将设置为全局jndi中对象的名称。@Alasdair-谢谢!是,应用程序将部署到WAS。我是否应该使用WAS安装构建目标定义以便进行测试?或者你有什么建议?顺便说一句,你的评论真的是一个答案。我想你应该把它复制成一个新的答案!您是否希望部署到WebSphereApplicationServer中?如果是这样,所有数据源都可以在服务注册表中使用。您可以使用javax.sql.DataSource接口类型查找它们,并使用osgi.jndi.service.name服务属性,该属性将设置为全局jndi中对象的名称。@Alasdair-谢谢!是,应用程序将部署到WAS。我是否应该使用WAS安装构建目标定义以便进行测试?或者你有什么建议?顺便说一句,你的评论真的是一个答案。我想你应该把它复制成一个新的答案!