2017-03-05 13 views
0

エンタープライズアプリケーションをWebsphere Application Server(8.5)にデプロイする必要があります。 hazelcastのライフサイクルを扱うためにアプリケーションサーバーでHazelcastをシャットダウンできないのはなぜですか?

私は、次の監視対象を準備:

public class HazelMonitor{ 
    private static HazelcastInstance inst = null; 

    public static synchronized getInstance(){ 
    if(inst == null){ 
     inst = Hazelcast.getOrCreateInstance(...); 
    } 
     return inst; 
    } 

public static synchronized shutdown(){ 
     if(inst != null){ 
      inst.shutdown(); 
      inst = null; 
     } 
} 
} 

は今、私のEJBは、このようなものです:

public class MyEjb{ 
@PostConstruct 
pulic void init(){ 
    HazelMonitor.getInstance(); 
} 

@PreDestroy 
public void close(){ 
    HazelMonitor.shutdown(); 
} 
} 

すべては私がシャットダウンしようとする場合を除き、私のサーバーを作業と思われます:ヘイゼルキャストはシャットダウンできないように見えますが、結局サーバーがハングしてプロセスを強制終了します。 プロセスを終了すると、見つからないクラスに関するヘイルキャスト例外が発生しますノード$ 2

私は間違っていますか?私のアプリケーションと一緒にHazelcastが正常にシャットダウンする方法を教えてください。

+0

を経由してスレッドダンプを作成することができますが、あなたは 'PreDestroy' @ EJBが'実際に呼び出されていることを確認したとしています。 shutdown() 'コールが起きていますか? –

+0

'PreDestroy'メソッドが呼び出されたときにクラスローダーがすでに終了していると思います。 try/catchブロックにラップして、発生した例外を記録してください。 – noctarius

答えて

2

どのHazelcastバージョンをお使いですか?このような動作を引き起こす可能性のあるクラスローダーの漏れを3.8で修正しました(https://github.com/hazelcast/hazelcast/pull/9691参照)。

以前のバージョンを使用していた場合は、Hazelcast 3.8を試してみてください。さもなければ、スレッドダンプはHazelcastが何をしているかを見る大きな助けになります。

あなたは

jps -l 

経由で実行中のすべてのJavaプロセスを検索し、

jstack <PID> 
関連する問題