2012-08-01 78 views
1

我有以下用例。DB连接关闭监视器

我们的客户端应用程序将执行一个数据库调用客户端应用程序后,返回一个Java结果集的API(这是我)调用。我想知道客户端何时完成使用结果集,以便我可以关闭结果集与其关联的连接。所以我认为的设计是将结果集发送到一个新的对象中,该对象具有关闭结果集的行为以及与之关联的连接。这个清理方法必须由客户端调用。现在,由于某种原因,如果这个清理方法从未被客户端应用程序调用过,那么我们将最终打开一个打开的连接和未释放的数据库资源。有没有一种方法可以更好地监控这一点,并确保所有数据库资源都能及时释放。此外,如果有任何设计模式可能有助于此用例,请让我知道。

谢谢。

回答

1

一种方法是使用幻影引用清理对象的结果集/连接(我宁愿使用finalize) - 这样,您应该能够清理对象并将其简单地返回给池。根据您的使用情况,您也可以查看超时。

此外,如果可能的话,同意关于未通过结果集的其他建议。
希望它有帮助。

+0

超时是我最初想到的,但我不想冒这个机会,因为我不知道客户端应用程序可能需要多少时间来保持结果集。我会试着去探索你所做的幻影参考建议。 – Bharath 2012-08-01 16:44:18

2

不要将昂贵的数据库资源(如ResultSet)返回到API以外的位置,因为这会导致您失去所有控件。而应将其映射到List<Map<String, Object>>或其他可重复使用的内容并将其返回。

+0

是的,你是非常正确的,那就是我们的API是如何编写的。但是我们的客户端应用程序的性能至关重要,他们希望避免从结果集创建另一个数据结构的成本,而是直接希望它们。 – Bharath 2012-08-01 16:52:36

+2

如果性能如此重要,只需将其设置为私有API或创建一个新的'ResultSet'或其他昂贵的DB资源不会公开暴露。即使客户端应用程序更紧密地连接到数据库,而不需要大量的抽象层。 – BalusC 2012-08-01 16:57:14