如何避免 jboss EAP 中端点 url 中的部署文件名

问题描述 投票:0回答:1

我们在 JBoss 服务器上部署了多个 war 文件,如果我没有在 jboss-web.xml 中设置以下属性,则默认情况下在端点 url 中包含 war 文件名:

<context-root>/</context-root>

但我无法对所有 war 文件执行此操作,因为它们都是不同的项目(每个项目都有自己的 jboss-web.xml)。如果我这样做,它会给出重复的异常..

JBWS022102: Cannot stop endpoint in state UNDEFINED: jboss.ws:context=*****

ERROR [org.jboss.msc.service.fail] (MSC service thread 1-5) MSC000001: Failed to start service jboss.deployment.unit."*************-webservices-1_0.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."*************-webservices-1_0.war".INSTALL: WFLYSRV0153: Failed to process phase INSTALL of deployment "*************-webservices-1_0.war"
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:189)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1739)

这种情况下如何避免war文件名?

jboss endpoint
1个回答
0
投票

默认情况下,WildFly 使用部署的名称作为部署上下文名称。正如您所指出的,您可以使用

jboss-web.xml
来覆盖它。您无法使用相同的上下文部署多个应用程序,因此使用
<context-root>/</context-root>
不起作用。

每个部署都需要它自己的上下文名称。最好使用众所周知的名称。您可以使用

/api
/webservices
/web
等上下文。您还可以使用不带版本名称的项目名称。

您可以像这样进行硬编码:

<context-root>/webservices</context-root>

每次部署都有不同的

context-root
。这可以通过使用 Maven 过滤
jboss-web.xml
资源和如下条目来实现自动化:

<context-root>/${project.artifactId}</context-root>

另一种选择是在 POM 的

<finalName>
部分中使用
<build>
配置参数。

<build>
    <finalName>${project.artifactId}</finalName>
    ....
</build>

最后一个选项是在部署时覆盖运行时名称。这取决于您如何部署应用程序。

使用 CLI:

/deployment=webservices:add(content=[{url=file:///path/to/webservies-1.0.war}], runtime-name=webservices.war)
/deployment=webservices:deploy

使用 WildFly Maven 插件

<plugin>
    <groupId>org.wildfly.plugins</groupId>
    <artifactId>wildfly-maven-plugin</artifactId>
    <version>${version.plugin.wildfly}</version>
    <configuration>
        <runtime-name>webservices.war</runtime-name>
    </configuration>
</plugin>

如果您通过 Web 控制台进行部署,您应该会看到覆盖运行时名称的方法。

© www.soinside.com 2019 - 2024. All rights reserved.