依赖于消息传递引擎可用性的应用程序
如果应用程序要求消息传递引擎可用,那么必须先启动消息传递引擎,然后才能运行该应用程序。
如果要让应用程序服务器自动启动应用程序,那么必须将应用程序开发为测试任何必需的消息传递引擎是否已启动,并根据需要等待消息传递引擎启动。如果在启动 Bean 中使用此技术,那么启动 Bean 方法应该在独立的线程中执行此工作(测试和等待),并且使用标准 WorkManager 方法,以便不会延迟启动应用程序服务器。
要获取用于测试和等待消息传递引擎的代码示例,请参阅以下代码段:
import java.util.Iterator;
import javax.management.ObjectName;
import com.ibm.websphere.management.AdminService;
import com.ibm.websphere.management.AdminServiceFactory;
String messagingEngineName = "messagingEngineName";
// Messaging engine to check if started? for example "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) {
// You have found messaging engine MBean, which means it is initialized,
// now check if it is in Started state?
meStarted =
((Boolean) adminService.invoke(objectName, "isStarted", null, null)).booleanValue();
}
if (!meStarted) {
// messaging engine is not started yet so sleep (wait) for a bit...
Thread.sleep(5000);
}
}