批量运行ModelControllerClient

时间:2016-10-28 05:49:58

标签: java wildfly wildfly-10

我正在使用ModelControllerClient(以及ServerDeploymentManager)通过Java API访问Wildfly CLI。

我想将我的更改作为CLI批处理运行,但无法为其找到API。

只需执行new ModelNode().get("operation").set("batch");就会抛出WFLYCTL0031: No operation named 'batch' exists at address []

也许batch命令就像data-source add等其他'便捷方法'一样?我该如何执行?

1 个答案:

答案 0 :(得分:1)

没有batch操作,它只是一个CLI命令。 ModelControllerClient接受DMR操作。 CLI将命令转换为DMR操作。您正在寻找的是复合操作。

org.wildfly.core:wildfly-controller-client依赖项中有一个帮助器。以下是使用CompositeOperationBuilder

的示例
import org.jboss.as.controller.client.ModelControllerClient;
import org.jboss.as.controller.client.Operation;
import org.jboss.as.controller.client.helpers.Operations.CompositeOperationBuilder;
import org.jboss.dmr.ModelNode;

public class ExampleOperation {

    public ModelNode executeCompositeOperation(final ModelControllerClient client, final ModelNode... ops) throws IOException {
        final CompositeOperationBuilder builder = CompositeOperationBuilder.create(true);
        for (ModelNode op : ops) {
            builder.addStep(op);
        }
        final ModelNode result = client.execute(builder.build());
        if (!Operations.isSuccessfulOutcome(result)) {
            throw new RuntimeException(Operations.getFailureDescription(result).asString());
        }
        return Operations.readResult(result);
    }
}

如果您还使用ServerDeploymentManager,则会有一个newish API,其中包含更多选项。这是wildfly-maven-plugin内部使用的内容,它现在只是一个单独的模块,因此其他人可以使用它。