2015-03-12 3 views
2

Я использую среду JPA/Eclipselink в средах Java SE (Oracle Java 7) и Java EE (Websphere Liberty).JPA в Java SE против производительности Java EE

У меня есть компонент, который вызывается как из Java SE, так и из Java EE (по компоненту I подразумевается один и тот же исходный код), который выполняет запросы JPA. (бег Java SE начинается с -javaagent:lib/eclipselink.jar парам)

Я провел 3 тестовых прогонов:

  1. в Java EE - код выполняется быстро (например, запрос занимает около 0,01 секунд)
  2. в Java SE - код работает медленно (2 секунды/запрос)
  3. сервер Java SE и Java EE работает под управлением - код работает так же быстро, как и в первом случае

Я немного PUZ zled; почему запуск Java EE-сервера приводит к тому, что код (работающий в другой JVM) ускоряется? И что я могу сделать для ускорения запросов в Java SE без запуска Java EE-сервера?

UPDATE

Эта проблема может быть связана с основной базой данных. Я запускать приложения в следующем порядке

  1. начал Java SE приложение - запросы медленно
  2. начал Java EE приложение - запросы в Java SE приложение быстро
  3. остановился Java EE приложение - запросы по-прежнему быстро в Java SE app

Итак, может существовать какой-то кеш базы данных (?), Который инициализируется Java EE-приложением, но приложение Java SE не работает - однако я ничего не вижу в журнале, что может быть связанными с этим. больше

Один редеет я видел, что эти два приложения используют другой драйвер базы данных (что может привести к некоторой разнице в производительности, но не объясняют, почему начиная оба приложений будут вызывать скорость до ...)

+0

подумал о том, чтобы посмотреть журнал, и что находится в CLASSPATH? –

+0

По classpath, вы имеете в виду класс класса приложения J2SE? Эти два приложения в основном представляют собой два разных проекта (в Eclipse), а проект J2SE ссылается на проект JEE (который содержит исходный код компонента) – krisy

+0

Журналы говорят ... ну, много чего :-) Что должно Я смотрю на? Я вижу такие сообщения, как «Имя столбца для элемента ...», «Обнаруженная база данных базы данных ...» и информация о подключении и т. Д. – krisy

ответ

2

Наконец, я понял:

  • в JEE enviroment JPA использовал пул соединений автоматически; но в среде JSE соединение с пулом недоступно
  • При подключении к любой базе данных db2 запускается несколько агентов (например, мониторинг, статистика сбора и т. д.); для запуска (и прекращения) этих агентов потребовалось около 2 секунд (эти агенты были видны в db2 get snapshot on all for database)
  • при запуске JEE, постоянное (объединенное) соединение поддерживалось в db2 scema; таким образом все агенты запускали
  • Когда приложение J2SE запускалось с запущенными агентами, накладные расходы на создание соединения с базой данных были очень маленькими; с другой стороны, если не было постоянного соединения, это накладные расходы были небольшими

Получил запросы на ускорение с помощью C3PO.