메시징 엔진 가용성에 종속성이 있는 애플리케이션
애플리케이션이 사용 가능한 메시징 엔진에 종속되는 경우 메시징 엔진은 애플리케이션이 실행 가능하기 전에 시작되어야 합니다.
애플리케이션 서버가 애플리케이션을 자동으로 시작하도록 하려면 애플리케이션이 필수 메시징 엔진이 시작되었는지 테스트하고 필요한 경우 메시징 엔진 시작을 대기하도록 개발해야 합니다. 이 기술이 시작 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);
}
}