Aplicativos com uma Dependência na Disponibilidade do Mecanismo do Sistema de Mensagens
Se um aplicativo depender de um mecanismo do sistema de mensagens estar disponível, o mecanismo do sistema de mensagens deverá ser iniciado antes da execução do aplicativo.
Se desejar que o servidor de aplicativos inicie um aplicativo automaticamente, você deverá desenvolver o aplicativo para testar se algum mecanismo necessário do sistema de mensagens foi iniciado e, se necessário, aguardar para que o mecanismo do sistema de mensagens seja iniciado. Se essa técnica for usada em um bean de inicialização, o método do bean de inicialização deverá executar o trabalho (testar e aguardar) em um encadeamento separado e usar os métodos WorkManager padrão), para que a inicialização do servidor de aplicativos não seja atrasada.
Para obter um exemplo de código para testar e esperar um mecanismo do sistema de mensagens, consulte
a seguinte extração de código:
import java.util.Iterator;
import javax.management.ObjectName;
import com.ibm.websphere.management.AdminService;
import com.ibm.websphere.management.AdminServiceFactory;
String messagingEngineName = "messagingEngineName"; // Mecanismo do sistema de mensagens para verificar se foi iniciado? por exemplo, "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) {
// Foi localizado o MBean do mecanismo do sistema de mensagens, o que significa que ele foi inicializado,
// agora verifique se ele está no estado Iniciado.
meStarted = ((Boolean) adminService.invoke(objectName, "isStarted", null, null)).booleanValue();
}
if (!meStarted) {
// o mecanismo do sistema de mensagens ainda não está iniciado, portanto, fique suspenso (espere) alguns instantes...
Thread.sleep(5000);
}
}