Я разрабатываю веб-приложение с использованием 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
в зависимости от хоста?