Je dois déployer mon application d'entreprise sur un Websphere Application Server (8.5).Pourquoi Hazelcast ne peut pas s'arrêter sur mon serveur d'applications?
Afin de gérer le cycle de vie de Hazelcast I préparé l'objet moniteur suivant:
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;
}
}
}
Maintenant, mon Ejb est comme ceci:
public class MyEjb{
@PostConstruct
pulic void init(){
HazelMonitor.getInstance();
}
@PreDestroy
public void close(){
HazelMonitor.shutdown();
}
}
Tout semble fonctionner, sauf lorsque je tente d'arrêter mon serveur : Hazelcast ne semble tout simplement pas pouvoir s'arrêter et, à la fin, le serveur se bloque et me force à tuer le processus. Une fois que j'ai tué le processus, je reçois une exception de nièce sur une classe non trouvée. Noeud 2.
Qu'est-ce que je fais mal? Comment s'assurer que Hazelcast s'éteint gracieusement avec mon application?
avez-vous confirmé que l'EJB '@ PreDestroy' est en fait invoqué et la'. shutdown() 'appel se passe? –
Je suppose que le classloader est déjà tué lorsque la méthode 'PreDestroy' est appelée. Essayez de l'envelopper dans un bloc try/catch, consignez toute exception qui se produit. – noctarius