Anwendungen mit einer Abhängigkeit von der Verfügbarkeit der Messaging-Engine
Wenn eine Anwendung davon abhängig ist, dass eine Messaging-Engine verfügbar ist, muss die Messaging-Engine gestartet sein, damit die Anwendung ausgeführt werden kann.
Wenn der Anwendungsserver eine Anwendung automatisch starten soll, müssen Sie Ihre Anwendungen so entwickeln, dass sie prüfen, ob die erforderliche Messaging-Engine gestartet ist, und gegebenenfalls auf die Messaging-Engine warten. Wird diese Technik in einer Startup-Bean verwendet, muss die Methode der Startup-Bean diese Arbeit (testen und warten) in einem separaten Thread unter Verwendung von WorkManager-Standardmethoden ausführen, damit der Start des Anwendungsservers nicht verzögert wird.
Der folgende Codeauszug zeigt, wie geprüft wird, ob eine Messaging-Engine gestartet ist und
wie gegebenenfalls auf die Messaging-Engine gewartet wird:
import java.util.Iterator;
import javax.management.ObjectName;
import com.ibm.websphere.management.AdminService;
import com.ibm.websphere.management.AdminServiceFactory;
String messagingEngineName = "messagingEngineName";
// Prüfen, ob Messaging-Engine gestartet ist, z. B. "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) {
// MBean der Messaging-Engine wurde gefunden,
// d. h., die Messaging-Engine ist gestartet.
// Jetzt prüfen, ob sie auch wirklich im Status "Gestartet" ist.
meStarted =
((Boolean) adminService.invoke(objectName, "isStarted", null, null)).booleanValue();
}
if (!meStarted) {
// Falls die Messaging-Engine noch nicht gestartet ist, ein bisschen warten...
Thread.sleep(5000);
}
}