| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > JPA: как держать EntityFactory открытой? OSGI? |
| Автор: Andrey1 27.7.2011, 18:20 |
| Как-то давно я спрашивал про то, как решить проблему с тем, что при при любой перегрузки контекста веб-приложения с JPA перегружается тяжелая EntityManagerFactory. Советовали смотреть в сторону OSGI... Может кто-то может скачать что-то более конкретное? Или поделиться ценным опытом или другим сакральным знанием? В принципе проблема-то общая: есть ресурсы, которые нужно поднимать один раз, во время, когда поднимается сам сервер и дальше брать только инстансы от них. |
| Автор: COVD 28.7.2011, 05:23 | ||
Я сторонник интеграции: веб-приложение - JPA-приложение - АБВГД приложение ... И никаких OSGi на серверной стороне не понадобится. |
| Автор: Farmazon 28.7.2011, 06:31 |
| А шо, не такая уж дурная идея. Попырь Virgo RT. Добавлено через 35 секунд правда кое-какие сложности с пучками огребёшь... не всё портировано... |
| Автор: COVD 28.7.2011, 14:03 | ||
Любая технология интеграции. Я сейчас активно применяю распределенную память, т.е. data grid. В частности Hazelcast. Или реализации JMS. Все технологии относительно "горячего" схожи. В OSGi приложении перегружаемый модуль недоступен во время перегрузки остальным модулям. Точно также в распределенном приложении перезапуск одного из приложений делает его недоступным для остальных какое-то время. Везде надо как-то обрабатывать ситуацию временной недоступности. И выгрузка OSGi плагина и отключение приложения в распределенной системе осуществляются в два шага: 1. плагин или приложение должны завершить текущие и перестать получать новые запросы извне. 2. плагин или приложение должны завершить все внутренние асинхронные текущие задачи и освободить ресурсы. В OSGi п.1 делает OSGi контейнер ( вызовы-то между плагинами через контейнер идут). Потом выполняется п.2 путем синхронного вызова метода stop() в реализации BundleActivator модуля. Аналогично в Томкате, который по отношению к веб-приложениям (war'ы) ведет себя как OSGi контейнер. Удалением war из webapps начинается п.1. После завершения текущих запросов к удаляемому приложению выполняется п.2. Это обеспечивается синхронным вызовом contextDestroyed в лисенере, имплементирующем javax.servlet.ServletContextListener. Если, конечно, приложение его обьявило в web.xml. Аналогично в распределенной системе. Выключение одного из приложений начинается с п.1 - приложение сначала отключается от JMS или от datagrid или выключает RMI или закрывает сокеты. Потом п.2. Корректность "горячего" выхода компонента в том, чтобы он перестал брать новые и завершил текушие задачи. |
| Автор: Andrey1 19.9.2011, 10:39 |
| http://habrahabr.ru/blogs/java/128653/ Gemini JPA то что нужно? |