JBoss7在战争中的部署问题

JBoss7在战争中的部署问题,jboss,jboss7.x,Jboss,Jboss7.x,我们使用JBoss7和jboss作为maven插件来自动部署war文件。我们有一个web.xml,其contextRoot设置为我们的应用程序名。在插件中,我们将文件名配置为${project.build.finalName}.${project.packaging}。它部署得很好,但问题是当我们更改发布号时,war文件名会发生变化 例如,当我们准备发布下一个版本时,war从myproject-v1.0.1.war更改为myproject-v1.0.2.war。问题是当maven jboss插件

我们使用JBoss7和jboss作为maven插件来自动部署war文件。我们有一个web.xml,其contextRoot设置为我们的应用程序名。在插件中,我们将文件名配置为${project.build.finalName}.${project.packaging}。它部署得很好,但问题是当我们更改发布号时,war文件名会发生变化

例如,当我们准备发布下一个版本时,war从myproject-v1.0.1.war更改为myproject-v1.0.2.war。问题是当maven jboss插件运行并尝试部署war文件时。注意,我们将force设置为true,因此它应该取消部署旧应用程序并部署新应用程序

问题在于,在确定应用程序当前是否已部署时,它似乎要关闭war文件名,而不是webContext。因此,新版本无法部署,因为旧版本仍在运行。我们必须进入并手动取消部署以前的版本,然后重新部署。似乎旧应用程序的强制取消部署是基于war名称的,由于版本号发生变化,它不认为自己已部署,而让旧版本继续运行。这会导致它失败,因为webContext已被使用


我们试图将插件中的配置更改为通用的,并且可以正常工作(运行时名称和名称显示此名称,而不再显示war文件名)。但唯一的问题是,这似乎影响了jboss上的某些东西,尽管它说它已部署,但webContext是无效的,我们无法访问我们的应用程序。这很奇怪,因为webContext是在web.xml中设置的,但插件中的配置似乎会破坏它。

您可以定义一个
名称
配置属性。这将覆盖部署名称。如果未设置,则使用文件名


...
...
...
org.jboss.as.plugins
jboss作为maven插件
7.3.3最终版本
你的应用程序
...
...
...

因此,在玩了一段时间之后,我们找不到任何原因来解释为什么我们使用了它将部署的配置,但没有设置webContext。但当我们手动部署同一场战争时,它设置了webContext


所以最后。我们最后做的是把战争的名字改成一个通用的名字。所以我们把它改成了myapp.war,而不是myapp.war。这是一种痛苦,因为现在我们仅仅通过查看控制台就不知道部署了什么版本。我们需要点击显示版本号的应用程序。但通过这样做,它解决了我们取消部署旧应用程序的问题,但却产生了一个新问题,即通过控制台部署的版本不那么容易确定。

本文似乎回答了您的问题。

我在我自己的项目上尝试过,效果很好!基本上,创建一个jboss-web.xml(现在您的项目是特定的,一次编写就可以部署到任何地方)。让jboss-web.xml看起来像

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>  
    <context-root>/rmbMavenCounter</context-root>  
</jboss-web>  
这是从我的jboss web服务器控制台进行的部署

08:12:42,413 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-16) JBAS015876: Starting deployment of "mavenCounter2-0.0.1-SNAPSHOT.war"
08:12:42,606 INFO  [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-4) Initializing Mojarra 2.1.5 (SNAPSHOT 20111202) for context '/rmbMavenCounter'
08:12:42,663 INFO  [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-4) Monitoring jndi:/default-host/rmbMavenCounter/WEB-INF/faces-config.xml for modifications
08:12:42,665 INFO  [org.jboss.web] (MSC service thread 1-4) JBAS018210: Registering web context: /rmbMavenCounter
08:12:42,678 INFO  [org.jboss.as.server] (management-handler-threads - 30) JBAS018559: Deployed "mavenCounter2-0.0.1-SNAPSHOT.war"

我面临同样的问题:我想使用版本和内部版本号上传war,以便于识别,但同时根据其名称覆盖以前的服务(没有版本/内部版本号)

这似乎是maven Jboss插件的一个限制:。目前只支持“name”参数,该参数将覆盖JBoss管理控制台中的名称和运行时名称

  • 我想说,从长远来看,插件需要支持“runtimeName”,以及maven“deploy”目标的参数列表

  • 但是,您可以做的是首先使用“undeploy”目标取消部署服务,并使用“matchPattern”参数查找以前的服务,即使它包含版本/构建名称

  • 当然,缺点是你必须取消部署;这不太适合生产环境

    例如:

    <plugin>
      <groupId>org.jboss.as.plugins</groupId>
      <artifactId>jboss-as-maven-plugin</artifactId>
      <configuration>
        <port>${JBOSS_PORT}</port>
        <username>${JBOSS_USERNAME}</username>
        <password>${JBOSS_PASSWORD}</password>
        <force>true</force>
        <ignoreMissingDeployment>true</ignoreMissingDeployment>
      </configuration>
      <executions>
        <execution>
          <id>undeploy-MyProject</id>
          <phase>install</phase>
          <goals>
            <goal>undeploy</goal>
          </goals>
          <configuration>
            <hostname>${HOSTNAME}</hostname>
            <matchPattern>myproject.*\.war</matchPattern>
          </configuration>
        </execution>
        <execution>
          <id>deploy-MyProject</id>
          <phase>install</phase>
          <goals>
          <goal>deploy</goal>
          </goals>
          <configuration>
            <hostname>${HOSTNAME}</hostname>
            <name>myproject-${project.version}.war</name>
            <filename>target/myproject-${project.version}.war</filename>
          </configuration>
        </execution>
      </executions>
    </plugin>
    
    
    org.jboss.as.plugins
    jboss作为maven插件
    ${JBOSS_PORT}
    ${JBOSS_USERNAME}
    ${JBOSS_密码}
    真的
    真的
    取消部署MyProject
    安装
    解除部署
    ${HOSTNAME}
    myproject.*\.战争
    部署MyProject
    安装
    部署
    ${HOSTNAME}
    myproject-${project.version}.war
    target/myproject-${project.version}.war
    
    是的,我已经尝试过了,并部署了它,但它同时更改了运行时名称和新名称。我可以在jboss控制台中看到它与I set一起部署,控制台显示它正在运行。问题是,尽管jboss说它现在已经部署,但它没有注册webContext,我也不能再使用webContext通过浏览器访问应用程序了。在jboss-web.xml文件中设置。如果我从配置中删除该字段,它将以war文件名部署,并且我可以访问它。我在日志中没有看到任何错误。我确实对日志进行了grep。我看到,当未配置时,控制台会显示它正确注册了webContext,并且一切正常。我使用相同的war文件,但现在我在配置部分添加了,它使用这个名称部署它,但日志从未显示webContext的配置。这就像是因为某种原因而弄乱了网络内容。这很奇怪。您使用的是最新版本的插件7.3.Final吗?这可能不会真的有什么不同,但也许。我明天也会看一看,你可以做的一个选择是为旧版本添加一个取消部署的目标。我意识到这不太理想,但你至少可以保留版本号。是的,我也这么认为,但我们需要跟踪以前的版本,这也是一种痛苦。但如果我们这样做了,那也行。我继续为它创造了一个JIRA,我很高兴
    08:12:42,413 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-16) JBAS015876: Starting deployment of "mavenCounter2-0.0.1-SNAPSHOT.war"
    08:12:42,606 INFO  [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-4) Initializing Mojarra 2.1.5 (SNAPSHOT 20111202) for context '/rmbMavenCounter'
    08:12:42,663 INFO  [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-4) Monitoring jndi:/default-host/rmbMavenCounter/WEB-INF/faces-config.xml for modifications
    08:12:42,665 INFO  [org.jboss.web] (MSC service thread 1-4) JBAS018210: Registering web context: /rmbMavenCounter
    08:12:42,678 INFO  [org.jboss.as.server] (management-handler-threads - 30) JBAS018559: Deployed "mavenCounter2-0.0.1-SNAPSHOT.war"
    
    <plugin>
      <groupId>org.jboss.as.plugins</groupId>
      <artifactId>jboss-as-maven-plugin</artifactId>
      <configuration>
        <port>${JBOSS_PORT}</port>
        <username>${JBOSS_USERNAME}</username>
        <password>${JBOSS_PASSWORD}</password>
        <force>true</force>
        <ignoreMissingDeployment>true</ignoreMissingDeployment>
      </configuration>
      <executions>
        <execution>
          <id>undeploy-MyProject</id>
          <phase>install</phase>
          <goals>
            <goal>undeploy</goal>
          </goals>
          <configuration>
            <hostname>${HOSTNAME}</hostname>
            <matchPattern>myproject.*\.war</matchPattern>
          </configuration>
        </execution>
        <execution>
          <id>deploy-MyProject</id>
          <phase>install</phase>
          <goals>
          <goal>deploy</goal>
          </goals>
          <configuration>
            <hostname>${HOSTNAME}</hostname>
            <name>myproject-${project.version}.war</name>
            <filename>target/myproject-${project.version}.war</filename>
          </configuration>
        </execution>
      </executions>
    </plugin>