如何在OSGI中处理数据库连接失败?

时间:2014-06-30 19:02:06

标签: osgi datasource

  1. 如果我将DataSource公开为OSGI中的服务,我该如何处理数据库连接失败?我应该配置DataSource服务的拦截器,它会捕获数据库连接失败异常并取消注册DataSource服务吗?或者OSGI容器会为我处理异常吗?
  2. 我应该如何配置使用服务,以便它能够在DataSource服务不可用的情况下生存,并允许用户再次重新尝试该事务?

1 个答案:

答案 0 :(得分:0)

您应该像处理不使用OSGi时那样处理意外异常。

您应该使用连接池并将其注册为OSGi服务。它将为您处理连接失败。即使在使用该连接期间出现异常,您也必须始终关闭连接。 (在java 6之前的finally块中,在java 7之后使用try-with-resources块)。连接池通过实现DataSource接口提供其功能。

有许多连接池。你可以谷歌为他们。

我基于commons-dbcp实现了两个OSGi组件。一个用于池化常规DataSource,另一个用于池化XADataSources。该组件选择原始的DataSource / XADataSource OSGi服务,而不是注册新的池数据源OSGi服务。

您可以在此处找到该模块的来源:https://github.com/everit-org/commons-dbcp-component

可在maven-central这里找到:http://search.maven.org/#artifactdetails%7Corg.everit.osgi%7Corg.everit.osgi.jdbc.commons.dbcp%7C2.0.1%7Cbundle

将jar放入OSGi容器后,您将在WebConsole的Configuration页面上看到组件的配置可能性(如果您有webconsole)。