java - Glassfish:在部署期间修改 EAR 的部署描述符

标签 java jakarta-ee glassfish java-ee-6 glassfish-3

经过几天的搜索、尝试和头脑 Storm 后,我将这个问题发布到 SO,尽管它似乎已经得到了回答。

场景如下: 我有一个包含(目前)一个 WAR 和一个 EJB 模块的 EAR 应用程序。 EJB 模块使用 JPA (persistence.xml),一些无状态 session Bean 通过 Web 服务公开。 Web 服务使用带有 jdbc 领域的基本身份验证。 Web 模块使用具有相同领域的表单例份验证。

要求: 我需要能够在不同的服务器 (dev/test/prod) 或具有不同 部署描述符的相同 服务器(或集群)上部署此应用程序。每个应用程序实例中需要不同的部署设置是:

  • persistence.xml 中的 jta-data-source
  • web.xml 中的域名
  • web.xml 中的 javax.faces.PROJECT_STAGE
  • glassfish-ejb-jar.xml 中的 webservice-endpoint\endpoint-address-uri 和 login-config\realm
  • application.xml 中的上下文根(如果有任何不同,我可以将其移至 web.xml,见下文)
  • glassfish-application.xml 中的领域

在我的研究过程中,我管理了以下内容:

  • 我可以使用 asadmin set-web-context-param
  • 覆盖 javax.faces.PROJECT_STAGE
  • 我可以在 asadmin deploy 期间使用部署计划覆盖 glassfish-ejb-jar.xml 中的所有设置
  • 同样适用于 glassfish-application.xml
  • 我可以可能asadmin deploy 期间覆盖 context-root(我不知道这如何与 EAR 中的多个 Web 模块一起工作)

到目前为止一切顺利。这给我带来了以下问题:

  • 如何轻松修改 web.xml 中的域名?
  • 如何轻松修改 persistence.xml 中的 jta-data-source?

easily 我的意思是在部署期间或使用类似于部署计划 jar 的东西。仅使用修改后的 .xml 文件维护 ejb.jar 或 war 的多个副本不是一种选择。

需要明确的是,需要让不同的数据库(处于不同的开发阶段或针对不同的客户)使用相同的应用程序。该应用程序使用一个持久性单元,但它需要指向不同的数据库(因此需要 jta-data-source)。领域是一个 jdbc 领域(在同一个数据库上),每个应用程序实例也需要不同。

如有任何帮助或指点,我们将不胜感激。

最佳答案

您是否考虑过为部署描述符准备模板,并在构建期间使用属性文件中的值填充它们?如果您使用的是 ant,则可以使用 expandproperties 过滤器。

关于java - Glassfish:在部署期间修改 EAR 的部署描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11800738/

相关文章:

java - 我应该将 Struts 1 或 2 与 jQuery 一起使用吗?

java - 如何在log4j2中实现 "configureAndWatch"

postgresql - 生产服务器上类型时间戳的错误值

java - 在 JBOSS 7 或 Glassflish 中将属性文件放在哪里? (最佳实践)

java - 什么是从 Java 生成任意 XML 的好库?

java - 如何在 Activity 之间发送自定义对象数组?

java - 总的单元测试执行时间消失了

java - 使用数组和长数据类型会导致精度损失

java - 分别部署 WAR 和 EJB-jar 文件

java - 销毁 JSF 中的特定用户 session