Glassfish:在部署期间修改EAR的部署描述符
经过几天的搜索,尝试和头撞,我把这个问题发布到了SO虽然似乎已经回答了。
这是场景:我有一个EAR应用程序,包含(目前)一个WAR和一个EJB模块。 EJB模块使用JPA(persistence.xml),一些无状态会话Bean通过Web服务公开。 Web服务使用带有jdbc领域的基本身份validation。 Web模块使用具有相同领域的表单身份validation。
要求 :我需要能够在不同的服务器(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中的context-root(如果它有任何不同,我可以将它移动到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?
我的意思是在部署期间或使用类似于部署计划jar的东西。 仅使用修改后的.xml文件维护ejb.jar或war的多个副本不是一种选择。
需要明确的是,需要使用相同的应用程序来建立不同的数据库(在开发的不同阶段或不同的客户)。 该应用程序使用一个持久性单元,但它需要指向不同的数据库(因此jta-data-source)。 领域是一个jdbc领域(在同一个数据库上),每个应用程序实例也需要不同。
任何帮助或指针将不胜感激。
您是否考虑过为部署描述符准备模板,并在构建期间使用属性文件中的值填充它们? 如果您使用的是ant,则可以使用expandproperties
filter。
您可以使用部署计划jar执行所有这些操作。
看起来部署计划jar的内容被推送到应用程序的归档/目录树中,然后发生与部署相关的任何繁重工作。
看到
和