Зависимые от хоста ресурсы в TomEE

Я разрабатываю веб-приложение с использованием EJB в TomEE.

Чтобы разделить среды разработки, тестирования и производства приложения, я использую разные записи <Host> в server.xml. Таким образом, среды можно выбирать по разным URL-адресам, например dev.myapp.example.tld и test.myapp.example.tld.

Ресурсы (на данный момент соединения с базой данных) определены в tomee.xml как

<Resource id="myappDatabaseDevelopment" type="DataSource"> ...

<Resource id="myappDatabaseTest" type="DataSource"> ...

Теперь приложение на тестовом хосте должно получить доступ к тестовой базе данных, то же самое для хоста разработки и базы данных разработки. Но это неуклюжее решение, так как два ресурса имеют разные id, поэтому я должен решить в коде Java, в зависимости от среды, в которой он работает, какую единицу персистентности выбрать. Было бы предпочтительнее управлять этим с помощью конфигурации контейнера. Но я не могу найти способ указать в файлах конфигурации TomEE, какой ресурс должен использоваться на каком хосте. У server.xml есть хосты, у tomee.xml есть ресурсы, но нет возможности ссылаться друг на друга.

Однако TomEE каким-то образом распознает разные хосты. Когда я развертываю две версии одного и того же приложения на одном хосте, но с разными именами приложений (контекста), я получаю ошибки из-за повторяющихся идентификаторов развертывания, а также много проблем из-за смешивания управляемых контейнеров bean-компонентов между двумя приложениями. Использование разных хостов (и разных appBase) устраняет эти ошибки.

Есть ли способ иметь несколько конфигураций ресурса с одним и тем же id в зависимости от хоста?


person TAM    schedule 22.05.2016    source источник


Ответы (1)


взгляните на https://issues.apache.org/jira/browse/TOMEE-1449 достаточно добавить узел в идентификатор развертывания.

person Romain Manni-Bucau    schedule 23.05.2016
comment
Я использую это, и поэтому сервер позволяет мне развернуть одно и то же приложение дважды. Но как настроить каждый ресурс базы данных, определенный в tomee.xml, чтобы один использовался в одном из этих приложений (разработка), а другой — в другом (тест)? - person TAM; 23.05.2016
comment
использование resources.xml может быть вариантом, но альтернативой, которая действительно проще, является развертывание приложения один раз и использование динамического маршрутизатора для выбора базы данных для использования из фильтра: tomee.apache.org/dynamic-datasource.html - person Romain Manni-Bucau; 23.05.2016
comment
Подход с динамическим маршрутизатором, согласно приведенному вами примеру с динамическим источником данных, позволяет мне кодировать решение о том, какой ресурс использовать в моем коде Java. Это то, что я сейчас делаю (в более простом виде), но это означает, что знания среды должны быть включены в код приложения. Я хотел бы избавиться от этого. Точно так же подход resources.xml будет означать развертывание другого файла конфигурации в зависимости от среды, в которой я развертываю. Я ищу способ настроить все знания среды в контейнере, а не в моем Java-коде или IDE. - person TAM; 23.05.2016
comment
это наполовину верно, поскольку этот код может быть развернут в контейнере (обычно jar в tomee/lib и фильтр в conf/web.xml для принудительного использования арендатора/источника данных) - person Romain Manni-Bucau; 23.05.2016
comment
Это подсказка, спасибо. Надеюсь, я все сделаю правильно, иначе я вернусь с новыми вопросами. - person TAM; 24.05.2016