Jakarta ee TOME中的主机相关资源

Jakarta ee TOME中的主机相关资源,jakarta-ee,apache-tomee,Jakarta Ee,Apache Tomee,我正在TomEE中使用EJB开发一个web应用程序 为了分离应用程序的开发、测试和生产环境,我在server.xml中使用了不同的条目。因此,可以通过不同的URL选择环境,如dev.myapp.example.tld和test.myapp.example.tld 资源(此时数据库连接)在tomee.xml中定义为 <Resource id="myappDatabaseDevelopment" type="DataSource"> ... <Resource id="myapp

我正在TomEE中使用EJB开发一个web应用程序

为了分离应用程序的开发、测试和生产环境,我在
server.xml
中使用了不同的
条目。因此,可以通过不同的URL选择环境,如
dev.myapp.example.tld
test.myapp.example.tld

资源(此时数据库连接)在
tomee.xml
中定义为

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

<Resource id="myappDatabaseTest" type="DataSource"> ...
。。。
...
现在,测试主机中的应用程序将访问测试数据库,dev主机和dev数据库也是如此。但这是一个笨拙的解决方案,因为这两个资源具有不同的
id
s,所以我必须在Java代码中决定选择哪个持久化单元,这取决于它运行的环境。最好通过容器配置对此进行管理。但是我找不到任何方法在TOME配置文件中指定哪个主机将使用哪个资源
server.xml
有主机,
tomee.xml
有资源,但无法从一个资源引用另一个资源

然而,不知何故,托米似乎认出了不同的主人。当我在同一主机下部署同一应用程序的两个版本,但应用程序(上下文)名称不同时,我会因为重复的部署ID而出错,另外由于在两个应用程序之间混合容器管理的bean而带来很多麻烦。使用不同的主机(以及不同的
appBase
s)可以消除这些错误


有没有办法让一个资源有多个配置,具有相同的
id
,具体取决于主机?

看看,在部署id中添加主机就足够了。

看看,在部署id中添加主机就够了。

我使用这个,服务器允许我部署同一个应用两次,所以。但是如何配置
tomee.xml
中定义的每个数据库资源,以便一个用于这些应用程序中的一个(开发),另一个用于另一个(测试)?使用resources.xml可以是一种选择,但另一种更简单的方法是一次性部署应用程序,并使用动态路由器从过滤器中选择要使用的数据库:根据您引用的“dynamic Datasource”示例,动态路由器方法允许我在Java代码中编码决定使用哪种资源。这就是我刚才所做的(以一种更简单的方式),但它意味着将环境知识放入应用程序代码中。我想把它处理掉。类似地,
resources.xml
方法意味着部署不同的配置文件,具体取决于我部署到的环境。我正在寻找一种在容器中配置所有环境知识的方法,而不是在我的Java代码或IDE中。这是事实的一半,因为此代码可以部署在容器中(通常是tomee/lib中的jar和conf/web.xml中的过滤器,以强制租户/数据源使用),这就是线索,谢谢。希望我能做对,否则我会带着更多的问题回来。我使用这个,服务器允许我部署同一个应用两次,因此。但是如何配置
tomee.xml
中定义的每个数据库资源,以便一个用于这些应用程序中的一个(开发),另一个用于另一个(测试)?使用resources.xml可以是一种选择,但另一种更简单的方法是一次性部署应用程序,并使用动态路由器从过滤器中选择要使用的数据库:根据您引用的“dynamic Datasource”示例,动态路由器方法允许我在Java代码中编码决定使用哪种资源。这就是我刚才所做的(以一种更简单的方式),但它意味着将环境知识放入应用程序代码中。我想把它处理掉。类似地,
resources.xml
方法意味着部署不同的配置文件,具体取决于我部署到的环境。我正在寻找一种在容器中配置所有环境知识的方法,而不是在我的Java代码或IDE中。这是事实的一半,因为此代码可以部署在容器中(通常是tomee/lib中的jar和conf/web.xml中的过滤器,以强制租户/数据源使用),这就是线索,谢谢。希望我能答对,否则我会带着更多的问题回来。