Как асинхронно запускать серверное приложение JBoss из Java - PullRequest
0 голосов
/ 02 апреля 2019

В моем Java-приложении мне нужно запустить сервер Jboss с файлом standalone.bat.

Я попытался ProcessBuilder, и хотя он и запустил сервер, мое приложение заблокировано в ожидании сбоя сервера

    @RequestMapping(value = "api/project/liststart", method = RequestMethod.POST)
    public HttpEntity<Boolean> postListServer(@RequestBody ListStart modules) throws Throwable {

        String cmd = "";
        Boolean response = false;

        ProcessBuilder processBuilder = new ProcessBuilder();

        String path = "C:\\jboss-as-7.1.1.Final\\bin\\";
        String command = standelone.bat+ " >sometext.txt"  ;

        processBuilder.command("cmd.exe", "/c", command);
        processBuilder.directory(new File(path));

        Process process = processBuilder.start();
        BufferedReader reader =
                new BufferedReader(new InputStreamReader(process.getInputStream()));
        String ligne;
        while ((ligne = reader.readLine()) != null) {
            System.out.println(ligne);
        }


        int exitCode = process.waitFor();
        System.out.println("\nExited with error code : " + exitCode);



        String F = path + "\\SomeFile.txt";
        System.out.println("------------------------file: " + F);
        File file = new File(F);
        Scanner scanner = new Scanner(file);

        //now read the file line by line...
        int lineNum = 0;
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            lineNum++;
            if (line.contains("Started server")) {
                response = true;
                System.out.println("-------------------------------------" + response.toString());

            }
        }

        ResponseEntity responseEntity = new ResponseEntity<Boolean>(response, HttpStatus.OK);
        return responseEntity;
    }


}

Я ожидаю, что приведенный выше метод вернет значение true, но оно блокируется до того, как значение может быть возвращено.

1 Ответ

0 голосов
/ 03 апреля 2019

Похоже, что scanner.hasNextLine () не может выйти из цикла while, поэтому попробуйте так:

     while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                lineNum++;
                if (line.contains("Started server")) {
                    response = true;
                    System.out.println("-------------------------------------" + response.toString());

     return new ResponseEntity<Boolean>(response, HttpStatus.OK);
                } else {
     return new ResponseEntity<Boolean>(response, HttpStatus.OK);
}
            }
...