Java 使用org.jboss.dmr.ModelNode更改数据源属性

Java 使用org.jboss.dmr.ModelNode更改数据源属性,java,wildfly,datasource,jboss-cli,Java,Wildfly,Datasource,Jboss Cli,我在standalone.xml中有非常常规的数据源定义 <subsystem xmlns="urn:jboss:domain:datasources:2.0"> <datasources> <datasource jndi-name="java:jboss/datasources/MYDS" pool-name="MYDS" enabled="true" use-java-context="true"> <

我在standalone.xml中有非常常规的数据源定义

<subsystem xmlns="urn:jboss:domain:datasources:2.0">
    <datasources>
        <datasource jndi-name="java:jboss/datasources/MYDS" pool-name="MYDS" enabled="true" use-java-context="true">
            <connection-url>jdbc:hsqldb:file:MYDB</connection-url>
            <security>
                <user-name>superman</user-name>
            </security>
        </datasource>
   </datasources>
</subsystem>
结果:

{
    "outcome" => "success",
    "response-headers" => {
        "operation-requires-reload" => true,
        "process-state" => "reload-required"
    }
}
{
    "outcome" => "failed",
    "failure-description" => "JBAS014746: name may not be null",
    "rolled-back" => true,
    "response-headers" => {"process-state" => "reload-required"}
}
但是使用modelnodeapi,这让我抓狂

ModelNode request = new ModelNode();
request.get(ClientConstants.OP_ADDR).add("subsystem", "datasources");
request.get(ClientConstants.OP_ADDR).add("data-source", "MYDS");
request.get(ClientConstants.OP).set(ClientConstants.WRITE_ATTRIBUTE_OPERATION);
request.get("connection-url").set("achooo");
myCliExecutor.executeCliCommandWithResult(request);
结果:

{
    "outcome" => "success",
    "response-headers" => {
        "operation-requires-reload" => true,
        "process-state" => "reload-required"
    }
}
{
    "outcome" => "failed",
    "failure-description" => "JBAS014746: name may not be null",
    "rolled-back" => true,
    "response-headers" => {"process-state" => "reload-required"}
}

你说的DMR不太正确。对于
写入属性
操作,需要定义
名称
属性。它应该看起来更像:

final ModelNode address=new ModelNode().setEmptyList();
地址。添加(“子系统”、“数据源”);
地址。添加(“数据源”、“示例”);
ModelNode请求=新建ModelNode();
获取(ClientConstants.OP_ADDR).set(地址);
request.get(ClientConstants.OP).set(ClientConstants.WRITE_属性_操作);
request.get(“name”).set(“连接url”);
request.get(“value”).set(“achooo”);
myCliExecutor.executeCliCommandWithResult(请求);
org.wildfly.core:controller客户端
中还有一个
操作
帮助程序,应该会有所帮助

final ModelNode address=Operations.createAddress(“子系统”、“数据源”、“数据源”、“MYDS”);
最终模型nod op=Operations.createWriteAttributeOperation(地址,“连接url”,“achooo”);
myCliExecutor.executeCliCommandWithResult(op);

什么版本的WildFly?DMR不太正确,但是有一些帮助器方法可以利用我得到java.lang.IllegalArgumentException,因为writeOp对象只有
protected=false
value=“write attribute”
。我没有像Operations.createAddress这样的API,可能是因为我使用了Wildfly 8.2Ah是的,对不起。直到后来才引入
createAddress()
。我认为
Operations.createWriteAttributeOperation()
应该存在。不过,我将编辑并修复较长的示例。我为此道歉是不对的。