ОБНОВЛЕНИЕ: Как указал Престон, следующая проблема вполне может быть связана с (де) сериализацией объектов.Любые идеи о том, как оптимизировать это?
В настоящее время я исправляю некоторые вещи в старом приложении JavaEE.Он использует модуль EJB и клиентский модуль приложения.EJB обрабатывает все запросы к базе данных.Для этого примера рассмотрим метод getEnterprises(int year)
, который возвращает сущности «Предприятие» для данного года.В настоящее время это около 2500 записей.
Примечание: Я использую слово «Предприятия» только в иллюстративных целях.Классы реальных сущностей, вероятно, не будут иметь особого смысла для большинства;)
Теперь давайте предположим для этого примера, что сущность Enterprise имеет только два поля: code
и name
.Метод внутри удаленного компонента выглядит следующим образом:
public List<Enterprise> getEnterprises(int year){
return em.createQuery("SELECT e FROM Enterprise e WHERE e.year=:year")
.setParameter("year", year)
.getResultList();
}
В клиенте приложения есть строка, подобная этой:
List<Enterprise> result = requestBean.getEnterprises(1996);
Мне кажется, это правильно.Что странно для меня, это то, что вызов на клиенте занимает около 15 секунд, чтобы завершить!Поэтому я добавил некоторые записи:
public List<Enterprise> getEnterprises(int year){
logger.finest("Begin fetch on remote");
List<Enterprise> output = em.createQuery("SELECT e FROM Enterprise e WHERE e.year=:year")
.setParameter("year", year)
.getResultList();
logger.finest("End fetch on remote");
return output;
}
и ...
logger.finest("Begin fetch on client");
List<Enterprise> result = requestBean.getEnterprises(1996);
logger.finest("End fetch on client");
Из полученных временных меток я понял, что вызов на сервере завершается менее чем за секунду, в то время как наклиенту это занимает более 15 секунд.
Пример рукописный след:
2011-01-04 12:00 | FINEST | Begin fetch on client
2011-01-04 12:00 | FINEST | Begin fetch on remote
2011-01-04 12:01 | FINEST | End fetch on remote
2011-01-04 12:17 | FINEST | End fetch on client
Итак, я предполагаю, что проблема заключается в клиенте / серверекоммуникации.Обратите внимание, что в приведенном выше примере я не проверял, является ли связь между клиентом и сервером медленной, или связь с сервером.Я понял, что журналы сервера показывают «ожидаемое» время выполнения, тогда как на клиенте оно вяло.Другими словами, это также может быть что-то вроде этого:
2011-01-04 12:00 | FINEST | Begin fetch on client
2011-01-04 12:15 | FINEST | Begin fetch on remote
2011-01-04 12:16 | FINEST | End fetch on remote
2011-01-04 12:17 | FINEST | End fetch on client
Или даже:
2011-01-04 12:00 | FINEST | Begin fetch on client
2011-01-04 12:07 | FINEST | Begin fetch on remote
2011-01-04 12:08 | FINEST | End fetch on remote
2011-01-04 12:17 | FINEST | End fetch on client
Я не столько копался в этом.
Поскольку у меня не так много опыта работы с JavaEE, я немного потерялся в джунглях.Есть так много настроек, компонентов, которые мне приходится просматривать, и я не знаю, с чего начать.Это может быть настройка сервера?Проблема с самим бином?Как я называю боб?Я не знаю ...
... о ... он работает на Glassfish, а для тестирования - на localhost
.Так что сама сеть не проблема ...