У меня странная проблема, вот быстрый снимок системы: у меня есть веб-приложение, которое вызывает локальный компонент EJB, позволяет вызвать локальный EJB «LocalEJB», этот EJB вызывает удаленный EJB - метод «RemoteEJB», который выполняет некоторую обработку на внешней системе и возвращает результат String. Все происходит в Weblogic 8.1
Вот пример обработки:
Веб приложение:
//create reference to the local bean
locHome = (LocalHome)ServiceLocator.getInstance().getLocalHome("ejb/localejb");
beanRef = locHome.create(); //call the bean method
String result = beanRef.updateSmth(data.getId(),data.getRelatedIds(),Integer.valueOf(data.getState()));
//print the result
LOG.debug("result is: " + result);
У меня включено ведение журнала для локального компонента внутри приложения ejb:
log.debug("state " + state);
res = session.updateSmth(id, relatedIds, state);
log.debug("result inside bean call: " + res);
Где «сеанс» — это ссылка на удаленный компонент.
Теперь, что происходит, запрос поступает в приложение, выполняется метод beanRef.updateSmth, этот метод вызывает внутри локального ejb, через секунду или две я вижу в файле журнала, что, например. 'результат внутри вызова bean-компонента: 0231423', что означает, что удаленный bean-компонент вернул результат, но иногда мне приходится ждать 5-6 минут, пока я не увижу результат внутри своего веб-приложения (оператор 'LOG.debug("result is: " + результат);'). Что занимает так много времени, чтобы передать результаты веб-приложению, это фиксация транзакции (локальный компонент имеет «Обязательно»)?
Я вижу в XML-файле конфигурации weblogic, что тайм-аут транзакции установлен на 1800 секунд, но действительно ли имеет значение, готовы ли результаты возвращаться сразу?