Pregunta

Estoy trabajando en la implementación automática de un servidor Remote JBoss como 7.1.1 de un servidor de construcción Jenkins como parte de una tubería de compilación y tiene un archivo de jar pequeño que llamo desde HND (basado en este ).

Mi pregunta es ¿cómo me enteré si una aplicación ya está instalada?Hacer un plan de implementación fallará si la aplicación ya está desplegada (podría atrapar la excepción que está lanzada, pero eso no es genial).

¿Fue útil?

Solución

Puede leer el recurso antes de hacer la implementación.Desde allí, puede volver a colocarlo o no hacer nada.

Aquí hay un ejemplo que funcionaría en un servidor independiente.

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;
}

Si está usando Maven, hay una plugin de maven Usted podría usar también.

Otros consejos

Una alternativa:

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 Client LIB contiene un poco de API para eso, no puedo encontrarlo ahora mismo.

Esta es una implementación primitiva del análisis de la consulta (no admite valores anidados y no le importa escapar, etc.).

/**
 *  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()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top