"WFLYJMX0012: params and description have different lengths" 以编程方式停止 Wildfly 时

"WFLYJMX0012: params and description have different lengths" when stopping Wildfly programmatically

在我的代码中,我曾经像这样以编程方式停止 Wildfly (16.0.0.Final):

[...]
Thread shutdownThread = new Thread(){
    @Override
    public void run() {
        try {
            MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
            try {
                logger.info("Stopping server...");
                ObjectName objectName = new ObjectName("jboss.as:management-root=server");
                mBeanServer.invoke(objectName, "shutdown", new Object[] { false, 60 }, new String[] { boolean.class.getName(), int.class.getName() });
            } catch ( InstanceNotFoundException | ReflectionException | MBeanException | MalformedObjectNameException e ) {
                logger.error("Failed to stop server, error msg is: " + e);
            }
        } catch ( Exception e ) {
            logger.error(e.getMessage(), e);
        }
    }
};
[...]

奇怪的是,这停止工作了。我收到以下错误消息:

WFLYJMX0012: params and description have different lengths: java.lang.IllegalArgumentException: 

有什么想法吗? 非常感谢, 凯

在 wildfly 16 中,他们添加了第三个参数用于正常关闭。

 mBeanServer.invoke(objectName, "shutdown", new Object[] { false, 60, 60 }, new String[] { boolean.class.getName(), int.class.getName(), int.class.getName() });

虽然第三个参数被列为可选参数,但在添加它之前我们遇到了同样的错误。

https://wildscribe.github.io/WildFly/17.0/index.html了解更多信息。

该错误表明为 JMX 操作提供的实际参数与操作本身的签名不匹配。

总的来说,它可以被激励,因为你从standalone配置切换到domain配置。

至少,如果你使用CLI,你会发现类似的问题:在这种情况下,你需要指示要关闭的主机名作为调用的第一个参数,其余参数,是否重新启动和不同的超时,保持不变。

但在这个具体案例中,也许,我读你的问题并不清楚,你从以前的版本切换到 Wildly 版本 16.0。0.Final。

正如您在 WildFly 16.0 Model Reference 中看到的,或者如果您使用 JConsole 或其他类似工具检查由 JMX 树公开的 mbean,shutdown 操作签名如下:

正如我们还提到的,虽然这三个参数不是必需的,但 mbean 签名定义了它们,并且应提供所有参数。