Динамический выбор источника данных для среды выполнения сущностей - PullRequest
1 голос
/ 10 июня 2010

У меня есть объектный компонент, который будет представлять ожидаемый результат для нескольких баз данных / источников данных, а также могут выполняться разные запросы, но всегда возвращается один и тот же результат. Таким образом, bean-компонент повторно используется для различных источников данных, которые должны иметь возможность динамического выбора.

Можно ли с помощью JPA выбрать во время выполнения источник данных, который будет использоваться для выполнения запроса, и вернуть тот же тип бина сущности? Кроме того, нужно ли моему ejb / application определять источники данных, которые будут использоваться? Или я всегда могу указать через jndi, какой источник данных использовать? Модификация дескриптора и повторное развертывание приложения при каждом создании нового источника данных - не вариант.

Извините, если вопрос не имеет смысла на 100%, довольно сложно понять идею.

Ответы [ 2 ]

0 голосов
/ 16 января 2014

Вы можете изменить источник данных JPA во время выполнения, но подход хитрый (самоанализ, специфическая реализация JPA, ...).

Я реализовал собственную реализацию javax.persistence.spi.PersistenceProvider, которая переопределяет org.hibernate.ejb.HibernatePersistence и устанавливает источник данных в Map и PersistenceUnitInfo PersistenceProvider непосредственно перед созданием EntityManagerFactory.Таким образом, мой EntityManagerFactory имеет источник данных, который был настроен во время выполнения.Я сохраняю свой EntityManagerFactory до тех пор, пока приложение не будет развернуто.

Вы можете использовать один и тот же подход и создать N разных EntityManagerFactory, каждый со своим конкретным источником данных.Однако имейте в виду, что каждый ÈntityManagerFactory использует много памяти.

0 голосов
/ 10 июня 2010

Возможно ли с помощью JPA во время выполнения выбрать источник данных, который будет использоваться для выполнения запроса, и вернуть объектный компонент того же типа?

Вы не можете изменитьисточник данных единицы сохраняемости во время выполнения.Однако вы можете настроить несколько единиц персистентности и использовать ту или иную EntityManagerFactory.Возможно, JPA не подходит для вашего случая использования.

Изменение дескриптора и повторное развертывание приложения при каждом создании нового источника данных - не вариант.

И как приложение узнает о «доступных источниках данных»?

...