gpt4 book ai didi

java - 是否可以构建连接自动关闭的 JCA 适配器?

转载 作者:行者123 更新时间:2023-11-30 11:48:35 25 4
gpt4 key购买 nike

我正在构建一个带有自定义“连接”类的 JCA 适配器。在我见过的所有示例中,您应该在连接类中放置一个“void close()”。然后在使用您的自定义连接类时,您必须在 finally block 中调用 close()。

我真的不相信开发人员会记得将 close 放在 finally block 中。此外,我不必在 EntityManager 上调用“close()”。容器自动管理 EntityManager 的打开和关闭。

有没有办法让容器自动关闭与我的 JCA 适配器的所有连接?我已尝试覆盖 finalize(),但 JVM 决定清理我的连接可能需要很长时间。

或者,如果有人知道如何为 findbugs 编写一个插件来识别自定义连接类在 finally block 中没有使用 close() 的任何地方......我可能会同意这一点。

最佳答案

如果您了解您的工作流程,您可以有一个后台线程监视您连接上的 Activity ,并在一定时间(10 秒、30 秒、2 小时,等等)后关闭任何东西。

正如您提到的,您还可以重写 finalize 方法。它是可用的,只是不能保证。但是在任何相当繁忙的服务器上,您可能会获得足够的 GC Activity 以使其及时关闭大部分连接。 finalize 不能保证的警告是简单地接受如果有人终止进程(或者它出错或其他),您的 finalize 将不会被调用。

最后,通过简单地创建一个新异常并填充其堆栈跟踪,可以直接捕获创建连接的位置。在打开的连接中保留该异常,当您检测到您“被迫”关闭它时(通过时间、最终确定或其他方式),您可以简单地将异常转储到您的日志中以找到有问题的“打开”行一个连接。

当连接器被销毁或取消部署时(即当模块从服务器中删除或服务器关闭时),您应该与 JCA 生命周期相关联。这可以告诉您在删除模块时哪些连接保持打开状态。

关于java - 是否可以构建连接自动关闭的 JCA 适配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8720327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com