Я пишу фреймворк, который нужно связать с единицей сохранения, предоставленной пользователем. Ранее менеджер объект был введен с использованием @PersistenceContext
аннотацию, но это статический способ:Как внедрить EntityManager динамически?
public class MyItemReader implements ItemReader {
@PersistenceContext(unitName="myPU")
private EntityManager em;
...
}
Теперь я хочу, назначение быть динамичным. Таким образом, независимо от того, что такое имя единицы продолжительности, связанный с ним менеджер объектов все еще может быть найден. Вот моя реализация:
public class MyItemReader implements ItemReader {
private EntityManager em;
@Inject @BatchProperty
private String persistenceUnitName;
@Override
public void open(Serializable checkpoint) throws Exception {
String path = "java:comp/env/" + persistenceUnitName;
em = (EntityManager) InitialContext.doLookup(path);
...
}
...
}
Моя реализация работает в WildFly, но я не уверен, что он работает в другом контейнере Java EE. И я не уверен, что это работает, когда исходный контекст изменился.
Итак, моя реализация - хороший подход?
Это хорошо, только будьте осторожны, что некоторые контейнеры имеют различное JNDI опубликовать имя, но вы можете связать путь базы JNDI к свойству @Resource инициализировано с дескрипторами развертывания – fantarama