Вопрос по – Jboss as 7 развертывается с использованием API управления HTTP

2

Как развернуть архив в Jboss как 7, используя API управления HTTP?

Я попытался использовать следующий код, который я создал из этих классов плагинов RHQ

открытый класс Main2 {

<code>public static final String MANAGEMENT = "/management";

public static void main(String[] args) throws ClientProtocolException, IOException {

    String runtimeName= "jboss-as-numberguess33.war";
    String filename = "/Users/mac/jboss-as-numberguess.war";
    String deploymentName="jboss-as-numberguess.war";
    File file=new File(filename);

    //STEP 1 UPLOADING
    ASUploadConnection uploadConnection=new ASUploadConnection("localhost", 9990,"username", "password");
    uploadConnection.getOutputStream(filename);
    JsonNode uploadResult = uploadConnection.finishUpload();


    if (ASUploadConnection.isErrorReply(uploadResult)) {
        System.out.println("Error reply");
    }
    else{
        JsonNode resultNode = uploadResult.get("result");
        String hash = resultNode.get("BYTES_VALUE").getTextValue();
        System.out.println(uploadResult);
        //--------------------------------------


        //STEP 2 DEPLOING
        System.out.println("Deploying [" + runtimeName + "] to server");


        Operation step1 = new Operation("add", "deployment", runtimeName);
        step1.addAdditionalProperty("hash", new PROPERTY_VALUE("BYTES_VALUE", hash));
        List<Object> content = new ArrayList<Object>(1);
        Map<String, Object> contentValues = new HashMap<String, Object>();
        contentValues.put("hash", new PROPERTY_VALUE("BYTES_VALUE", hash));
        content.add(contentValues);
        step1.addAdditionalProperty("content", content);

        step1.addAdditionalProperty("name", deploymentName);
        step1.addAdditionalProperty("runtime-name", runtimeName);
        CompositeOperation cop = new CompositeOperation();
        cop.addStep(step1);

        Operation step2 = new Operation("deploy", step1.getAddress());
        cop.addStep(step2);


        execute(cop);



    }
}

private static void execute(Operation operation) throws JsonGenerationException, JsonMappingException, IOException {
    long requestStartTime = System.currentTimeMillis();
    int timeoutSec=10;
    HttpURLConnection conn=null;
    OutputStream out;
    try {
        URL url = new URL("http", "localhost", 9990, MANAGEMENT);

        conn = (HttpURLConnection) url.openConnection();

        System.out.println(conn.getURL());
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.addRequestProperty("Content-Type", "application/json");
        conn.addRequestProperty("Accept", "application/json");
        conn.setInstanceFollowRedirects(false);

        int timeoutMillis = timeoutSec * 1000;
        conn.setConnectTimeout(timeoutMillis);
        conn.setReadTimeout(timeoutMillis);
        if (conn.getReadTimeout() != timeoutMillis) {
            System.out.println("Read timeout did not get set on HTTP connection - the JRE uses a broken timeout mechanism - nothing we can do.");
        }

        out = conn.getOutputStream();




        //------------------------------------------------------

        Authenticator passwordAuthenticator = new AS7Authenticator("username","password");
        Authenticator.setDefault(passwordAuthenticator);

        // read system property "as7plugin.verbose"
        Boolean verbose = true;

        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);



        String json_to_send = mapper.writeValueAsString(operation);

        // Check for spaces in the path, which the AS7 server will reject. Log verbose error and
        // generate failure indicator.
        if ((operation != null) && (operation.getAddress() != null) && operation.getAddress().getPath() != null) {
            if (containsSpaces(operation.getAddress().getPath())) {
                Result noResult = new Result();
                String outcome = "- Path '" + operation.getAddress().getPath()
                    + "' is invalid as it contains spaces -";
                if (verbose) {
                    System.out.println(outcome);
                }
                noResult.setFailureDescription(outcome);
                noResult.setOutcome("failure");
                JsonNode invalidPathResult = mapper.valueToTree(noResult);
                System.out.println(invalidPathResult);
            }
        }

        if (verbose) {
            System.out.println("JSON to send: " + json_to_send);
            System.out.println(conn.getInputStream());
        }

        mapper.writeValue(out, operation);

        out.flush();
        out.close();



        InputStream inputStream = (conn.getInputStream() != null) ? conn.getInputStream() : conn.getErrorStream();

        if (inputStream != null) {
            // Note: slurp() will close the stream once it's done slurping it.
            byte[] responseBodyBytes = StreamUtil.slurp(inputStream);

            ByteArrayInputStream arrayInputStream=new ByteArrayInputStream(responseBodyBytes);
            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(arrayInputStream));

            String responseBody="";
            while (bufferedReader.ready()) {
                responseBody+=bufferedReader.readLine()+"\n";
            }

            String outcome;
            JsonNode operationResult=null;
            if (!responseBody.isEmpty()) {
                outcome = responseBody;
                operationResult = mapper.readTree(outcome);
                if (verbose) {
                    ObjectMapper om2 = new ObjectMapper();
                    om2.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
                    String tmp = om2.writeValueAsString(operationResult);
                    System.out.println(tmp);
                }
            } else {
                System.out.println("Null stream");
            }
            System.out.println(operationResult);

        }

    } catch (IllegalArgumentException iae) {}

}

public static boolean containsSpaces(String path) {
    boolean includesSpaces = false;
    StringTokenizer components = new StringTokenizer(path, " ");
    if (components.countTokens() > 1) {
        includesSpaces = true;
    }
    return includesSpaces;

}
</code>

}

ШАГ 1 (загрузка) Я думал, что это работает хорошо, он возвращает ответ об успехе, также говорит

<code>06:18:37,551 INFO  [org.jboss.as.repository] (HttpManagementService-threads - 6) JBAS014900: Content added at location /servers/jboss-as-7.1.2.Final/standalone/data/content/da/39a3ee5e6b4b0d3255bfef95601890afd80709/content
</code>

Но этот файл содержимого пуст!

Также при запуске STEP 2 (развертывание) выдается следующая ошибка

Сервер вернул код ответа HTTP: 500 для URL:HTTP: // локальный: 9990 / управление

В стеке трассировки у меня есть

<code>07:19:35,870 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC00001: Failed to start service jboss.deployment.unit."jboss-as-numberguess33.war".STRUCTURE: org.jboss.msc.service.StartException in service jboss.deployment.unit."jboss-as-numberguess33.war".STRUCTURE: JBAS018733: Failed to process phase STRUCTURE of deployment "jboss-as-numberguess33.war"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:123) [jboss-as-server-7.1.2.Final-SNAPSHOT.jar:7.1.2.Final-SNAPSHOT]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [classes.jar:1.6.0_24]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [classes.jar:1.6.0_24]
at java.lang.Thread.run(Thread.java:680) [classes.jar:1.6.0_24]

Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS018740: Failed to mount deployment content
at org.jboss.as.server.deployment.module.DeploymentRootMountProcessor.deploy(DeploymentRootMountProcessor.java:92) [jboss-as-server-7.1.2.Final-SNAPSHOT.jar:7.1.2.Final-SNAPSHOT]
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:116) [jboss-as-server-7.1.2.Final-SNAPSHOT.jar:7.1.2.Final-SNAPSHOT]
... 5 more
Caused by: java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method) [classes.jar:1.6.0_24]
at java.util.zip.ZipFile.<init>(ZipFile.java:127) [classes.jar:1.6.0_24]
at java.util.zip.ZipFile.<init>(ZipFile.java:144) [classes.jar:1.6.0_24]
at org.jboss.vfs.VFSUtils.unzip(VFSUtils.java:845)
at org.jboss.vfs.VFS.mountZipExpanded(VFS.java:536)
at org.jboss.vfs.VFS.mountZipExpanded(VFS.java:567)
at org.jboss.as.server.deployment.DeploymentMountProvider$Factory$ServerDeploymentRepositoryImpl.mountDeploymentContent(DeploymentMountProvider.java:97) [jboss-as-server-7.1.2.Final-SNAPSHOT.jar:7.1.2.Final-SNAPSHOT]
at org.jboss.as.server.deployment.module.DeploymentRootMountProcessor.deploy(DeploymentRootMountProcessor.java:88) [jboss-as-server-7.1.2.Final-SNAPSHOT.jar:7.1.2.Final-SNAPSHOT]
</code>

Пожалуйста, ответьте, если у вас есть идеи по этому поводу.

Ваш Ответ

1   ответ
2

загрузить биты вhttp: // локальный: 9990 / Управление / добавление контента зарегистрируйте загрузку с именем на сервере для режима домена продвигаться на группы серверов.

Мы делаем это в RHQ как часть AS7 плагин Для первой части вы можете взглянуть на ASUploadConnection. Это вызвано из BaseComponent # deployContent, который после успешной загрузки также выполняет следующие два шага в # @ RunDeploymentMagicOnServ.

Не стесняйтесь копировать / повторно использовать этот код

Какой класс я должен использовать в качестве точки вечности и где я могу найти справку о том, как использовать эти классы. (Некоторая документация) Yerzhan Torgayev
Просто переходите по ссылкам, когда вы нажимаете на них, чтобы получить данные о классах и методах. Точкой входа для логики является BaseComponent # deployContent Heiko Rupp
Я перепробовал твои ссылки. Спасибо за ответ. Но у меня были некоторые проблемы. Я отредактировал свой вопрос и добавил детали. Что я сделал не так? Yerzhan Torgayev
Я рад, что ты нашел это - извини, что не нашел времени ответить. Heiko Rupp
Я решил свою проблему. Я забыл ту часть, где собственно файл загружается на сервер метода contentServices # downloadPackageBitsForChildResource. Сейчас все хорошо! Большое спасибо Yerzhan Torgayev

Похожие вопросы