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

时间:2011-09-07 07:00:12

标签: db2 osgi connection-pooling

在为Websphere平台开发Web应用程序多年之后,我最近一直在研究OSGi,特别是与RAP(RichAjayPlatform)项目有关。

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

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

是否有任何示例,教程?

2 个答案:

答案 0 :(得分:10)

OSGi当然没有“内置”来建立连接池,但实现起来非常简单。

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

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

答案 1 :(得分:2)

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

我只是使用JPA + JNDI进行设置,但是我在创建和导出连接池时所采取的步骤将是这样的:

  1. 在捆绑激活器中手动创建连接池(c3p0,dbcp等)。
  2. 使用捆绑上下文将连接池注册为服务。
  3. 在需要连接的服务中,获取对连接池的引用(我使用声明性服务)并从池中获取连接。