上下文
我們希望在TomEE中使用Hazelcast作爲JCache實現。由於我們不需要瘋狂的性能,目前我們希望運行Hazelcast節點作爲我們應用程序的一部分。Hazelcast線程阻止TomEE停止
我們使用Hazelcast 3.7
和TomEE 7.0.1
。
問題
當停止TomEE,它抱怨WARNING - The web application [APPLICATION_NAME] appears to have started a thread named [SOMENAME] but has failed to stop it. This is very likely to create a memory leak.
幾次和VM不會停止正常,但繼續運行。
解決方法顯然是一旦看起來空閒就終止進程。毋庸置疑,這正在推動我們的開發人員和開發人員瘋狂。
獨立Hazelcast節點
爲了排除被內部TomEE運行Hazelcast節點出現的問題的可能性,我試圖啓動一個獨立的Hazelcast節點,並改變了我們的應用程序只使用Hazelcast客戶端連接到所述節點。行爲保持不變。據我可以從幾個網頁搜索中得知,Hazelcast客戶端也啓動多個線程,以與服務器節點通信。
Hazelcast的無重複防止終止
的JVM這個問題不是Hazelcast prevents the JVM from terminating重複,因爲我們完全依靠Hazelcasts的JCache實現。我們不直接訪問Hazelcast
實例,因此我們不能撥打shutDownAll()
。
測試用例
我創建了一個small test case on GitHub重現該問題。
問題
- 我們可以使用Hazelcast作爲後端的JCache在Java EE應用程序?
- 我們必須做些什麼才能讓應用程序正常停止?
- 我們是否也可以將Hazelcast節點作爲我們的應用程序的一部分運行?如果沒有:爲什麼這是一個壞主意?
[Hazelcast可能會重複阻止JVM終止](http://stackoverflow.com/questions/18701821/hazelcast-prevents-the-jvm-from-terminating) –