加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Hazelcast线程阻止TomEE停止

发布时间:2020-12-15 00:46:30 所属栏目:Java 来源:网络整理
导读:上下文 我们希望在TomEE中使用Hazelcast作为我们的JCache实现.由于我们不需要疯狂的性能,目前我们希望将Hazelcast节点作为我们应用程序的一部分运行. 我们使用Hazelcast 3.7和TomEE 7.0.1. 问题 当停止TomEE时,它会抱怨警告 – Web应用程序[APPLICATION_NAME
上下文

我们希望在TomEE中使用Hazelcast作为我们的JCache实现.由于我们不需要疯狂的性能,目前我们希望将Hazelcast节点作为我们应用程序的一部分运行.

我们使用Hazelcast 3.7和TomEE 7.0.1.

问题

当停止TomEE时,它会抱怨警告 – Web应用程序[APPLICATION_NAME]似乎已经启动了一个名为[SOMENAME]但未能阻止它的线程.这很可能造成内存泄漏.多次,VM不会正常停止,而是继续运行.

解决方法显然是在它看起来空闲时立即终止进程.毋庸置疑,这正在推动我们的开发人员和开发人员疯狂.

单独的Hazelcast节点

为了排除在TomEE内部运行Hazelcast节点引起问题的可能性,我尝试启动一个独立的Hazelcast节点并将我们的应用程序更改为仅使用Hazelcast客户端连接到所述节点.行为保持不变.据我所知,从几个网络搜索中,Hazelcast客户端也启动了几个线程,与服务器节点进行通信.

没有重复的Hazelcast会阻止JVM终止

这个问题与Hazelcast prevents the JVM from terminating不重复,因为我们完全依赖于Hazelcasts JCache实现.我们不直接访问Hazelcast实例,因此,我们无法调用shutDownAll().

测试用例

我创建了一个small test case on GitHub来重现问题.

问题

>我们可以在Java EE应用程序中将Hazelcast用作JCache后端吗?
>我们需要做些什么来让应用程序正常停止?
>我们还可以将Hazelcast节点作为我们应用程序的一部分运行吗?如果不是:为什么这是一个坏主意?

解决方法

Hazelcast使用自己的线程并且它们并不总是守护进程,您可以确保通过像 https://issues.apache.org/jira/browse/TOMEE-1723那样的生产者关闭hazelcast实例(客户端或节点)

在hazelcast通过CDI扩展修复其实例的生命周期之前,它可能是最干净的.

注意:这也可以使用tomee内部服务器API来提前启动实例,但在大多数情况下不需要

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读