Есть ли способ использовать программную конфигурацию, предоставляемую Ejb3Configuration, с управлением контейнерными объектами?Я хотел бы динамически добавлять (дополнительные) аннотированные классы, которые были обнаружены через ServiceLoader после обработки файла persistence.xml.
Я попытался расширить HibernatePersistence, переопределяя метод createContainerEntityManagerFactory, где я добавил функциональность для добавления классов, но обнаружил две проблемы: 1) Когда я пытаюсь вызвать экземпляры EjbConfiguration, сконфигурируйте (PersistenceUnitInfo, Map) метод в новомPersistenceProvider, я получаю нулевое возвращение.2) Я получаю NPE сервером приложений (как GF 3.0.1, так и GF 3.1) при завершении работы приложения, происходящем из org.glassfish.persistsnce.jpa.JPAApplicationContainer.closeAllEMFs или org.glassfish.persistence.jpa.JPADeployer.closeEMFsсоответственно
Вот мой PersistenceProvider:
//left out createEntityManagerFactory for brevity
public class DynamicEntityProvider extends HibernatePersistence {
@Override
public EntityManagerFactory createContainerEntityManagerFactory
(PersistenceUnitInfo info, Map props) {
final Ejb3Configuration config = new Ejb3Configuration();
final Ejb3Configuration configured = config.configure(info, props);
if (configured != null) {
//never gets here, configured is always returned null
addDynamicEntities(configured);
return configured.buildEntityManagerFactory();
}
//logging code which notifies me that configured was null
return null;
}
//addDynamicEntities() method impl
Я просто заменяю тег в моем файле persistence.xml на класс, и он действительно вызывается, как и ожидалось ... просто спроблемы, перечисленные выше =)
Любые идеи будут с благодарностью!