代码之家  ›  专栏  ›  技术社区  ›  Péter Török

如何从Maven启动和停止JBoss服务器,绑定到与本地主机不同的地址?

  •  0
  • Péter Török  · 技术社区  · 14 年前

    我正在处理遗留Java企业服务器项目,目前我正在尝试建立夜间构建。我们使用的是Maven2、JBoss4.2和竹子。我们的想法是在一个dev服务器上有一个bamboo代理,maven构建被配置为硬部署生成的.ear文件,然后重新启动服务器。(我们不能使用Soft Deploy,因为我们的旧应用程序使用了一个库,在取消部署期间会导致异常…我们将在某个时刻,但不是现在,摆脱这个该死的库。)当我在自己的机器上运行maven构建时,这很好地工作:服务器停止并用最新的构建重新启动。

    但是,在dev服务器上,我们有多个jboss服务器实例,绑定到不同的IP地址。我使用的MavenJBoss插件只能启动和停止绑定到本地主机的服务器(默认)。我刚刚下载了它的源代码,它只是执行jboss bin目录中的run和shutdown脚本,如下所示:

    launch( "run", "-c " + serverName );
    

    launch( "shutdown", "-S" );
    

    分别。 因此,正如您看到的,没有使用主机绑定(-b)参数来启动,关闭也不能杀死除在端口localhost:1099(默认JNDI端口)侦听的服务器以外的任何其他服务器。

    我认为启动的解决方法是直接在jboss配置文件中配置所需的主机地址。(默认行为是这些配置文件包含类似 ${jboss.bind.address} ,并且在启动时,jboss动态地将它们替换为实际主机地址,该地址被指定为运行脚本的-b参数,或者默认为localhost)。因此,如果我将确切的IP直接放在这些配置文件中,理论上,服务器将绑定到该IP,而不管缺少-b命令行参数。此外,我想使用 0.0.0.0 因为主机名也可以解决停止问题…如果我们在同一台机器上没有其他服务器。然而,这可能在另一台完全为夜间构建保留的服务器上工作。我们只需要迁移竹剂等…几个小时的额外工作。当然,我们没有源源不断的未使用的服务器,所以一旦我们需要为我们的发布分支构建另一个夜间版本,我们就可以回到square 1了。

    另一种选择是尝试使用Cargo插件…我还不知道它是否有这种能力。

    最后但同样重要的是,我可以扩展jboss插件来处理主机绑定——我认为这将花费我几个小时的时间,但最终解决了这个问题。到目前为止,这似乎是最可行的选择。

    有人能就这些或其他解决方案提供任何具体的经验/意见吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Pascal Thivent    14 年前

    maven cargo插件允许声明 <systemProperties> 在jvm中设置系统属性,因此可以这样配置插件:

    <container>
      ...
      <systemProperties>
        <jboss.bind.address>192.168.1.10</jboss.bind.address>
      </systemProperties>
    </container>
    

    看看这个 this page 另一个例子。

    注意有 CARGO-405 关于使用 <系统属性> 对于 jboss.bind.address 但目前的状况还不清楚。

    就我个人而言,我只需要花时间在cargo中测试这个插件,设置这个插件不会花那么多时间(比扩展jboss插件要少)。查看 Maven2 Plugin Reference Guide 以及 Maven2 Plugin Getting Started .

        2
  •  0
  •   Péter Török    14 年前

    嗯,我扩展了这个插件来处理非默认的主机名和命名端口。至少这个问题现在已经解决了。

    我把补丁交给了科德豪斯。

    更新: 它将在1.4.1版中正式发布。

    同时,如果有人急需补丁插件版本,请告诉我。