【问题标题】:Stop WildFly 10 programmatically以编程方式停止 WildFly 10
【发布时间】:2017-09-25 13:33:26
【问题描述】:

我正在从 JBoss 6.1.0_final 迁移到 WildFly 10。在某种情况下,我想停止我的服务器。喜欢:

if (condition == true) 
   System.exit(1);

以上代码在 JBoss 中运行良好,它会立即关闭服务器。 但是当我在WildFly10 中执行相同的操作时,服务器并没有立即停止。

它发送关闭信号,然后解除绑定datasource 然后JMX 等等。我发现可以由 MBeans 完成,但不能在这里工作:https://developer.jboss.org/thread/198579。这会产生一些错误,例如:

参数和描述的长度不同

我想立即停止我的 WildFly10 服务器。有人做过这样的事情吗?

【问题讨论】:

  • 你为什么不使用 jboss-cli 或管理 API 呢?
  • 我想以编程方式停止它。
  • 哼,调用rest API或者使用client helper java code不是程序怎么办?

标签: java wildfly wildfly-10 mbeans


【解决方案1】:

以下应该可以工作(只处理异常):

MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName objectName = new ObjectName("jboss.as:management-root=server");
mBeanServer.invoke(objectName, "shutdown", new Object[] { false, 0 }, 
        new String[] { boolean.class.getName(), int.class.getName() });

【讨论】:

  • 使用上面的代码,错误消失了,服务器停止了前面的处理。但是由于与 ActiveMQ 相关的所有线程都已启动,因此 java 仍在运行。并在 1000 毫秒后抛出超时异常。并且服务器仍在运行。 :-(
【解决方案2】:

您可以尝试直接使用 jboss-cli 命令停止 Wildfly 服务器。确保在您想要停止服务器时服务器已启动并运行。

try {
    String jbossBinDir =  System.getProperty("jboss.server.base.dir").replace("standalone", "bin");
    Runtime.getRuntime().exec(jbossBinDir+"/" + "jboss-cli.bat --connect --controller=192.168.1.2  -c command=:shutdown");
    } 
    catch(IOException e) 
    {
      e.printStackTrace();
    }

【讨论】:

    猜你喜欢
    • 2016-12-16
    • 1970-01-01
    • 2011-04-20
    • 2011-04-10
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多