相依於傳訊引擎可用性的應用程式
如果應用程式有賴於傳訊引擎可供使用,在能夠執行應用程式之前,必須先啟動傳訊引擎。
如果您想要應用程式伺服器能夠自動啟動應用程式,您必須將應用程式開發成會測試任何必要的傳訊引擎是否已啟動,且在必要之時,會等待傳訊引擎啟動。 如果在啟動 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";
// 傳訊引擎檢查是否已啟動?例如 "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,這代表它已起始設定, // 現在檢查它是否在「已啟動」狀態中? meStarted =
((Boolean) adminService.invoke(objectName, "isStarted", null, null)).booleanValue();
}
if (!meStarted) {
// 傳訊引擎尚未啟動,因此,休眠(等待)一會兒...
Thread.sleep(5000);
}
}