Applications dépendant de la disponibilité d'un moteur de messagerie
Si une application dépend de la disponibilité d'un moteur de messagerie, celui-ci doit démarrer avant qu'il soit possible d'exécuter l'application.
Si vous souhaitez que le serveur d'applications lance une application automatiquement, développez l'application de façon à ce qu'elle vérifie que le moteur de messagerie requis a démarré et, le cas échéant, qu'elle attende le démarrage du moteur de messagerie. Si vous utilisez cette technique dans un bean d'amorçage, la méthode de bean d'amorçage doit exécuter le travail (tester et attendre) dans une unité d'exécution distincte et utiliser les méthodes WorkManager standard pour que le démarrage du serveur d'applications ne soit pas différé.
L'exemple suivant est un fragment de code pour le test et l'attente d'un moteur de messagerie :
import java.util.Iterator;
import javax.management.ObjectName;
import com.ibm.websphere.management.AdminService;
import com.ibm.websphere.management.AdminServiceFactory;
String messagingEngineName = "messagingEngineName"; // Moteur de messagerie dont on vérifie le démarrage, par exemple "node01.server1-bus1"
boolean meStarted = false;
AdminService adminService = AdminServiceFactory.getAdminService();
while (!meStarted) {
String filterString = "WebSphere:type=SIBMessagingEngine,name=" + messagingEngineName + ",*";
boolean foundBean = false;
ObjectName objectName = null;
try {
ObjectName objectNameFilter = new ObjectName(filterString);
Iterator iter = adminService.queryNames(objectNameFilter,null).iterator();
while (iter.hasNext()) {
objectName = (ObjectName) iter.next();
foundBean = true;
break;
}
} catch (Exception e) {
e.printStackTrace();
}
if (foundBean) {
// Un MBean de moteur de messagerie a été trouvé, ce qui signifie qu'il est initialisé,
// maintenant, vérifiez s'il est à l'état Démarré (Started).
meStarted = ((Boolean) adminService.invoke(objectName, "isStarted", null, null)).booleanValue();
}
if (!meStarted) {
// Veuillez patienter car le moteur de messagerie n'a pas encore démarré
Thread.sleep(5000);
}
}