interactionSpec.setAltClientID(calloutQueueName);
interactionSpec.setInteractionVerb(com.ibm.connector2.ims.ico.
IMSInteractionSpec.SYNC_RECEIVE_CALLOUT);
interactionSpec.setExecutionTimeout(3600000);
Укажите значение тайм-аута для ожидания сообщения с запросом внешнего вызова в очереди блокировки. В этом примере указано большое значение тайм-аута выполнения.
Такое значение помогает минимизировать повторение циклов, обязательное в компоненте EJB внешнего вызова, где могут встречаться длительные периоды времени без запросов внешних вызовов. Продолжительность тайм-аута зависит от максимального времени, которое должно проходить между запросами внешних вызовов, и того, что необходимо делать компоненту EJB, если оно превышено. Следующий пример кода демонстрирует приложение Java, настроенное для получения внешних запросов.
// Поиск JNDI возвращает connFactory
InitialContext initCntx = new InitialContext();
ConnectionFactory connFactory =
(ConnectionFactory) initCntx.lookup("java:comp/env/ibm/ims/IMSTarget");
IMSConnectionSpec connSpec = new IMSConnectionSpec();
Connection connection = connFactory.getConnection(connSpec);
Interaction interaction = connection.createInteraction();
IMSInteractionSpec interactionSpec = new IMSInteractionSpec();
//задать режим фиксации и уровень синхронизации
interactionSpec.setCommitMode(0);
interactionSpec.setSyncLevel(1);
// Восьмисимвольное имя очереди, из которой будут извлекаться асинхронные сообщения
String calloutQueueName = new String ("CALLOUTQ");
// Задать имя асинхронной очереди для сообщения внешнего вызова
interactionSpec.setAltClientID(calloutQueueName);
// Задать interactionVerb для извлечения асинхронного вывода с тайм-аутом
interactionSpec.setInteractionVerb(com.ibm.connector2.ims.ico.
IMSInteractionSpec.SYNC_RECEIVE_CALLOUT);
interactionSpec.setExecutionTimeout(3600000);
for (;;) {
try {
// Выполнить взаимодействие
iteraction.execute(interactionSpec, null, calloutMsg);
// Дальнейшая обработка calloutMsg
:
} catch (Exception e) {
// если исключительная ситуация - это ошибка тайм-аута выполнения,
// можно либо ничего не предпринимать и продолжить повторение циклов,
// либо обработать ошибку и затем прервать цикл
break;
}
}
iteraction.close();
connection.close();