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