根据 EJB 规范 的规定,锁定并发管理访问的 EJB 的访问超时可以通过
@AccessTimeout
注释进行设置。
如果没有此注释另外指定,Payara 中访问锁定的 EJB 的超时是无限的。
这非常不方便,因为它在死锁期间不会在应用程序服务器日志上生成任何堆栈或日志跟踪。它只是挂起依赖的服务,使它们没有响应。
我们的团队希望在开发服务器上修改此默认值,以便每次 bean 或 bean 方法被锁定访问的时间超过应有的时间时,bean 都会抛出
jakarta.ejb.ConcurrentAccessException
。
我从过去与 JBoss/Wildfly 的合作中知道,这应该可以通过应用程序服务器配置实现。不过,我们尚未找到为 Payara/Glassfish asadmin 执行此操作的相关文档。
有没有办法在 Payara 上设置默认的并发 EJB 访问超时?如果没有,那么有什么可行的替代方案可以轻松识别我们的开发服务器中发生的死锁?
显然有这个不错的 Payara cdi-event-bus-notifier 我们可以设置来收集有关占用和卡住线程的指标,然后我们可以对其设置警报:
https://blog.payara.fish/the-health-check-service-in-depth-payara-server
这比设置默认访问超时更好地满足我们的用例需求(例如,我们甚至可以最终在生产中启用它)。
尽管如此,最好知道是否可以设置默认访问超时(例如,这可以让我们在进行本地开发部署时更方便地查看服务器日志而不是指标)。