У меня странная проблема, вот краткий снимок системы: у меня есть веб-приложение, которое вызывает локальный 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, через секунду или две, которые я вижу в файле журнала, например, для. 'result inside call bean: 0231423', что означает, что удаленный bean-компонент возвратил результат, но мне иногда приходится ждать 5-6 минут, пока я не увижу результат в моем веб-приложении (оператор LOG.debug ("result is:" + результат);').
Что занимает так много времени, чтобы передать результаты веб-приложению, это фиксация транзакции (локальный компонент имеет значение «Требуется»)?
Я вижу в файле XML weblogic config, что тайм-аут транзакции установлен на 1800 секунд, но действительно ли имеет значение, готовы ли результаты сразу же вернуться?