Подобные темы были рассмотрены в других темах, но я не смог найти окончательного решения моей проблемы.
Мы пытаемся создать веб-приложение, способное:
- чтение конфигурации источника данных при запуске (файл XML, содержащий несколько определений источника данных, который находится вне файла WAR и не является файлом конфигурации приложения или контекста гибернации)
- создать фабрику сеансов для каждого из них (учитывая, что каждый источник данных является базой данных с другой схемой)
- переключение во время выполнения на разные источники данных на основе пользовательского ввода (пользователи могут выбирать, какой источник данных они хотят использовать)
- предоставить правильный объект dao для управления пользовательскими запросами.
На данный момент у нас есть объект DAO Manager, который может читать файл конфигурации источника данных и создавать экземпляры нескольких фабрик сеансов, сохраняя их на карте. Каждая фабрика сеансов создается с конфигурацией, содержащей надлежащие классы отображения гибернации (разные для каждой схемы базы данных). Более того, у нас есть несколько интерфейсов DAO с их реализациями, которые используются для доступа к «их базе данных».
На этом этапе нам потребуется способ получить от диспетчера DAO конкретный объект DAO, содержащий правильную привязанную фабрику сеансов, основанную на запросе пользователя (в основном вызов вышеупомянутой службы, содержащей идентификатор источника данных или пользовательский объект источника данных).
В идеале сервисный уровень должен использовать DAO Manager для получения объекта DAO на основе идентификатора источника данных (например), не заботясь о его фактической реализации: DAO Manager позаботится об этом, создав правильный объект DAO и добавление в него правильной фабрики сеансов на основе идентификатора источника данных.
Мои вопросы:
- Это хороший подход для подражания?
- Как использовать Spring для динамического внедрения в DAO Manager нескольких реализаций DAO для каждого интерфейса DAO?
- Как только фабрики сеансов созданы, есть ли способ позволить Spring обрабатывать их, как я обычно делал бы с внедрением зависимостей внутри application-context.xml?
- Будет ли кэш 2-го уровня работать для каждой фабрики сессий?