运行 批量处理 ModelControllerClient

Running ModelControllerClient in a Batch

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

我想 运行 我的更改作为 CLI 批处理,但找不到 API 。

简单地执行 new ModelNode().get("operation").set("batch"); 抛出 WFLYCTL0031: No operation named 'batch' exists at address [].

也许 batch 命令与其他 'convenience methods' 类似 data-source add 等?我将如何执行这些?

没有 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 内部使用的,它现在只是一个单独的模块,因此其他人可以使用它。