Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Glassfish:在部署期间修改EAR的部署描述符_Java_Jakarta Ee_Glassfish_Java Ee 6_Glassfish 3 - Fatal编程技术网

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

Java Glassfish:在部署期间修改EAR的部署描述符,java,jakarta-ee,glassfish,java-ee-6,glassfish-3,Java,Jakarta Ee,Glassfish,Java Ee 6,Glassfish 3,经过几天的搜索、尝试和努力,我把这个问题发到了SO,尽管它似乎已经得到了回答 以下是场景: 我有一个EAR应用程序(目前)包含一个WAR和一个EJB模块。EJB模块使用JPA(persistence.xml),一些无状态会话bean通过Web服务公开。web服务使用jdbc领域的基本身份验证。web模块使用同一领域的表单身份验证 要求: 我需要能够将此应用程序部署在不同的服务器(dev/test/prod)上,或者使用不同的部署描述符部署在相同的服务器(或集群)上。每个应用程序实例中需要不同的部

经过几天的搜索、尝试和努力,我把这个问题发到了SO,尽管它似乎已经得到了回答

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

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

  • persistence.xml中的jta数据源
  • web.xml中的域名
  • web.xml中的javax.faces.PROJECT_阶段
  • glassfish-ejb-jar.xml中的webservice端点\端点地址uri和登录配置\领域
  • application.xml中的上下文根(如果有什么不同,我可以将其移动到web.xml,见下文)
  • glassfish-application.xml中的领域
在我的研究过程中,我做到了以下几点:

  • 我可以使用
    asadmin set web context param
  • asadmin部署期间,我可以使用部署计划覆盖glassfish-ejb-jar.xml中的所有设置
  • 这同样适用于glassfish-application.xml
  • 我可能可以在
    asadmin deploy
    期间覆盖上下文根目录(我不知道EAR中的多个web模块如何工作)
到目前为止还不错。这给我留下了以下问题:

  • 如何轻松修改web.xml中的域名
  • 如何在persistence.xml中轻松修改jta数据源
简单地说,我的意思是在部署期间或使用类似于部署计划jar的东西。仅使用修改后的.xml文件维护ejb.jar或war的多个副本不是一个选项

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


非常感谢您的帮助或指点。

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

您可以使用部署计划jar完成所有这些事情

看起来部署计划jar的内容在与部署相关的任何繁重工作发生之前被推送到应用程序的归档/目录树中


谢谢你的回答,我会调查的。我正在使用Netbeans,所以我想这应该很容易。经过几次搜索,我设法在build.xml可重写目标中使用expandproperties。通过这种方式,我可以修改我需要的任何xml文件,包括web.xml或persistence.xml。谢谢你的精彩指点。对于每个部署场景(即customerA-UAT.properties和customerB Production.properties),我都有一个属性文件,并根据project.properties中的设置加载每个文件。谢谢您的回答!根据这一点,我认为部署计划jar只能覆盖特定于glassfish的部署描述符。我将尝试对web.xml和persistence.xml使用相同的方法并发布结果。我所有重写web.xml或persistence.xml的尝试都失败了,所以在Netbeans中构建ear期间,我将坚持使用ant的操作。