【问题标题】:Host dependent resources in TomEETomEE 中的主机依赖资源
【发布时间】:2016-05-22 11:51:27
【问题描述】:

我正在使用 TomEE 中的 EJB 开发一个 Web 应用程序。

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

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

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

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

现在,测试主机中的应用程序应该访问测试数据库,对于开发主机和开发数据库也是如此。但这是一个笨拙的解决方案,因为这两个资源有不同的ids,所以我必须在 Java 代码中决定,取决于它运行的环境,选择哪个持久性单元。最好通过容器配置来管理它。但是我找不到任何方法来在 TomEE 配置文件中指定要在哪个主机中使用哪个资源。 server.xml 有主机,tomee.xml 有资源,但无法相互引用。

不过,TomEE 似乎可以识别不同的主机。当我在同一主机下部署同一应用程序的两个版本,但应用程序(上下文)名称不同时,由于部署 ID 重复而出现错误,并且由于在两个应用程序之间混合容器管理的 bean 会带来很多麻烦。使用不同的主机(以及不同的appBases)可以消除这些错误。

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

【问题讨论】:

    标签: jakarta-ee apache-tomee


    【解决方案1】:

    看看https://issues.apache.org/jira/browse/TOMEE-1449,在部署ID中添加主机就足够了。

    【讨论】:

    • 我使用这个,因此服务器允许我部署相同的应用程序两次。但是如何配置tomee.xml 中定义的每个数据库资源,以便一个用于其中一个应用程序(开发),另一个用于另一个应用程序(测试)?
    • 使用 resources.xml 可以是一种选择,但更简单的替代方法是一次性部署应用程序并使用动态路由器从过滤器中选择要使用的数据库:tomee.apache.org/dynamic-datasource.html
    • 动态路由器方法,根据您引用的“动态数据源”示例,让我编写决定在我的 Java 代码中采用哪个资源的决定。这就是我刚才在做的事情(以更简单的方式),但这意味着将环境知识放入应用程序代码中。我想摆脱它。同样,resources.xml 方法意味着部署不同的配置文件,具体取决于我部署到的环境。我正在寻找一种在容器中配置所有环境知识的方法,而不是在我的 Java 代码或 IDE 中。
    • 这是对的一半,因为此代码可以部署在容器中(通常是 tomee/lib 中的 jar 和 conf/web.xml 中的过滤器以强制使用租户/数据源)
    • 这就是线索,谢谢。希望我能做对,否则我会带着更多问题回来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2014-08-18
    • 2019-01-17
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多