Java EE Wildfly извлекает EntityManager из JNDI без persistence.xml

Недавно я перешел на Java EE (Wildfly) и хотел бы найти EntityManager в JNDI. В настоящее время я определяю источник данных в своем файле standalone.xml и успешно извлекаю его через JNDI, но это дает мне только источник данных, а не Entity Manager.

Я знаю, что могу создать файл persistence.xml и использовать @PersistenceContext, но я действительно ищу способ избежать знания имени JNDI во время компиляции, поэтому вместо этого хочу выполнить поиск на основе информации времени выполнения, чтобы получить соответствующий Entity Manager.


person John Dalton    schedule 09.03.2016    source источник


Ответы (1)


К сожалению, единица персистентности, из которой получен менеджер сущностей, не может быть определена переносимым способом без использования файла persistence.xml.

Если это важно для вас, проголосуйте за JPA_SPEC-114 и добавьте комментарий. там.

Вы можете более или менее сделать блок сохраняемости независимым от окончательного имени JNDI, используя ссылка-ресурса. Ресурсная ссылка действительно заставляет ваш код зависеть от конкретного механизма контейнера для переключения того, на что указывает resource-ref.

Альтернативой, к сожалению, со своими недостатками, является использование переключаемого источника данных. Затем вы можете определить источник данных, используя фиксированное имя JNDI и сослаться на него из файла persistence.xml, а затем использовать любой метод, используемый вашим переключаемым источником данных для перехода к фактическому источнику данных. Затем это может быть либо прямая реализация источника данных (например, как показано в ссылке), либо, возможно, выборка другого источника данных из JNDI (который эффективно делает то, что делает ресурс-ссылка, но затем использует ваш собственный механизм для переключения)

person Arjan Tijms    schedule 13.03.2016
comment
Спасибо, это то, что мои исследования и попытки привели меня к мысли, что я просто надеялся, что у кого-то есть какой-то волшебный способ обойти это :) - я мог бы использовать ресурс-ссылку, чтобы разрешить некоторую косвенность. - person John Dalton; 14.03.2016