我正在從Jenkins構建服務器作爲構建管道的一部分自動部署到遠程JBoss AS 7.1.1服務器,並且有一個我從螞蟻調用的小型jar文件(基於this)。如何查詢JBoss AS 7上的現有應用程序?
我的問題是如何知道應用程序是否已安裝?如果已經部署了應用程序,那麼執行部署計劃將失敗(我可以捕獲拋出的異常,但這不是很好)。
我正在從Jenkins構建服務器作爲構建管道的一部分自動部署到遠程JBoss AS 7.1.1服務器,並且有一個我從螞蟻調用的小型jar文件(基於this)。如何查詢JBoss AS 7上的現有應用程序?
我的問題是如何知道應用程序是否已安裝?如果已經部署了應用程序,那麼執行部署計劃將失敗(我可以捕獲拋出的異常,但這不是很好)。
您可以在部署前閱讀資源。從那裏你可以重新部署它,也可以不做任何事情。
這是一個可以在獨立服務器上工作的例子。
private boolean exists(final ModelControllerClient client, final String deploymentName) {
final ModelNode op = new ModelNode();
op.get(OP).set("read-children-names");
op.get("child-type").set(ClientConstants.DEPLOYMENT);
final ModelNode result;
try {
result = client.execute(op);
// Check to make sure there is an outcome
if (result.hasDefined(ClientConstants.OUTCOME)) {
if (result.get(ClientConstants.OUTCOME).asString().equals(ClientConstants.SUCCESS)) {
final List<ModelNode> deployments = (result.hasDefined(ClientConstants.RESULT) ? result.get(ClientConstants.RESULT).asList() : Collections.<ModelNode>emptyList());
for (ModelNode n : deployments) {
if (n.asString().equals(deploymentName)) {
return true;
}
}
} else if (result.get(ClientConstants.OUTCOME).asString().equals(ClientConstants.FAILED)) {
throw new IllegalStateException(String.format("A failure occurred when checking existing deployments. Error: %s",
(result.hasDefined(ClientConstants.FAILURE_DESCRIPTION) ? result.get(ClientConstants.FAILURE_DESCRIPTION).asString() : "Unknown")));
}
} else {
throw new IllegalStateException(String.format("An unexpected response was found checking the deployment. Result: %s", result));
}
} catch (IOException e) {
throw new IllegalStateException(String.format("Could not execute operation '%s'", op), e);
}
return false;
}
如果您使用的是maven,那麼您也可以使用maven plugin。
一種替代方案:
ModelNode res = AS7CliUtils.executeRequest("/deployment=* /:read-resource", ctx.getAS7Client());
{
"outcome" => "success",
"result" => [{
"address" => [("deployment" => "jboss-as-wicket-ear-ear.ear")],
"outcome" => "success",
"result" => {
"content" => [{"hash" => bytes { ... }}],
"enabled" => true,
"name" => "jboss-as-wicket-ear-ear.ear",
"persistent" => true,
"runtime-name" => "jboss-as-wicket-ear-ear.ear",
"subdeployment" => {
"jboss-as-wicket-ear-ejb.jar" => undefined,
"jboss-as-wicket-ear-war.war" => undefined
},
"subsystem" => {"datasources" => undefined}
}
}]
}
JBoss AS中CLI客戶LIB包含了一些API,現在不能找到它。
這是查詢解析的原始實現(不支持嵌套值,不關心轉義等)。
/**
* Parse CLI command into a ModelNode - /foo=a/bar=b/:operation(param=value,...) .
*
* TODO: Support nested params.
*/
public static ModelNode parseCommand(String command) {
return parseCommand(command, true);
}
public static ModelNode parseCommand(String command, boolean needOp) {
String[] parts = StringUtils.split(command, ':');
if(needOp && parts.length < 2) throw new IllegalArgumentException("Missing CLI command operation: " + command);
String addr = parts[0];
ModelNode query = new ModelNode();
// Addr
String[] partsAddr = StringUtils.split(addr, '/');
for(String segment : partsAddr) {
String[] partsSegment = StringUtils.split(segment, "=", 2);
if(partsSegment.length != 2) throw new IllegalArgumentException("Wrong addr segment format - need '=': " + command);
query.get(ClientConstants.OP_ADDR).add(partsSegment[0], partsSegment[1]);
}
// No op?
if(parts.length < 2) return query;
// Op
String[] partsOp = StringUtils.split(parts[1], '(');
String opName = partsOp[0];
query.get(ClientConstants.OP).set(opName);
// Op args
if(partsOp.length > 1){
String args = StringUtils.removeEnd(partsOp[1], ")");
for(String arg : args.split(",")) {
String[] partsArg = arg.split("=", 2);
query.get(partsArg[0]).set(unquote(partsArg[1]));
}
}
return query;
}// parseCommand()
沒有maven,只是螞蟻。謝謝你明天會試試看。這種事情的文件在哪裏? – blank 2012-03-14 18:59:26
@BedwyrHumphreys大部分是在這裏https://docs.jboss.org/author/display/AS71/Management+API+reference。其他你只是需要探索的結構。你可以看到一個概述,如果你執行$ JBOSS_HOME/bin/jboss-cli.sh --connect「/:read-resource」>> output.txt – 2012-03-15 00:11:22
幾點 - 我認爲op.get(OP)應該是op。得到(ClientConstants.OP)和ClientConstants.FAILED似乎不存在org.jboss.as.controller.client.helpers.ClientConstants – blank 2012-03-15 07:54:51