Есть ли способ использовать программную конфигурацию, предоставляемую Ejb3Configuration, с управлением объектами, управляемыми контейнером? Я хотел бы динамически добавлять (дополнительные) аннотированные классы, которые были обнаружены с помощью ServiceLoader после обработки файла persistence.xml.
Я попытался расширить HibernatePersistence, чтобы переопределить метод createContainerEntityManagerFactory, где я добавил функциональность для добавления классов, но обнаружил две проблемы: 1) Когда я пытаюсь вызвать метод configure(PersistenceUnitInfo, Map) экземпляров EjbConfiguration в новом PersistenceProvider, я получаю значение null. . 2) Я получаю NPE, созданный моим сервером приложений (как GF 3.0.1, так и GF 3.1) при завершении работы приложения, происходящем либо из org.glassfish.persistnce.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 на класс, и он действительно вызывается, как и ожидалось... только с перечисленными выше проблемами =)
Благодарим за любую идею!