В настоящее время у нас есть веб-приложение, загружающее контекст приложения Spring, который создает стек бизнес-объектов, объектов DAO и Hibernate. Мы хотели бы поделиться этим стеком с другим веб-приложением, чтобы избежать нескольких экземпляров одних и тех же объектов.
Мы рассмотрели несколько подходов; экспонирование объектов с использованием JMX или JNDI или EJB3.
У разных подходов есть свои проблемы, и мы ищем легкий метод.
Есть предложения, как это решить?
Редактировать: я получил комментарии с просьбой немного уточнить, так что здесь:
Основная проблема, которую мы хотим решить, заключается в том, что мы хотим иметь только один экземпляр Hibernate. Это связано с проблемами с отключением кэша 2-го уровня Hibernate при запуске нескольких клиентских приложений, работающих с одним и тем же источником данных. Кроме того, бизнес-стек / DAO / Hibernate становится довольно большим, поэтому не имеет смысла дублировать его.
Сначала мы попытались выяснить, как один бизнес-уровень может быть представлен другим веб-приложениям, и Spring предлагает JMX-упаковку по цене небольшого количества XML. Однако нам не удалось связать сущности JMX с деревом JNDI, поэтому мы не смогли найти объекты в веб-приложениях.
Затем мы попытались связать бизнес-уровень непосредственно с JNDI. Хотя Spring не предлагал никакого метода для этого, использование JNDITemplate для их связывания также было тривиальным. Но это привело к нескольким новым проблемам: 1) Менеджер безопасности запрещает доступ к загрузчику классов RMI, поэтому клиенту не удалось, как только мы попытались вызвать методы на ресурсе JNDI. 2) Как только проблемы безопасности были решены, JBoss выдал IllegalArgumentException: объект не является экземпляром объявления класса. Немного чтения показывает, что нам нужны реализации заглушки для ресурсов JNDI, но это кажется большой проблемой (возможно, Spring может помочь нам?)
Мы еще не слишком изучили EJB, но после первых двух попыток мне интересно, возможно ли то, чего мы пытаемся достичь.
Подводя итог, что мы пытаемся достичь: один экземпляр JBoss, несколько веб-приложений, использующих один стек бизнес-объектов поверх слоя DAO и Hibernate.
С уважением,
Nils