2016-10-31 2 views
0

J'ai rencontré un problème en essayant d'exécuter un processus avec Java .. Essayant spécifiquement d'exécuter un serveur Tomcat à partir de mon application Java. J'ai passé des heures à rechercher tous les messages disponibles à la fois sur stackoverflow et google, essayé les différentes solutions et rien ne fonctionne pour moi. Essentiellement, je construis un outil de test automatisé qui permet d'exécuter des tests sur différents sites. J'ai traité à la fois Process et ProcessBuilder pour exécuter cette tâche pour moi. Il existe trois méthodes pour essayer d'appeler le serveur tomcat qui sont présentés ci-dessous:Exécution d'un serveur Tomcat à partir d'une classe Java - ProcessBuilder

public void convertCouncilNameToExecutableProcess(String councilName) { 

    System.out.println("In convert method"); 
    if (councilName.equalsIgnoreCase("Manchester")) { 
     councilRunner = "claims_manchestertest"; 
     runCouncilProcess(councilRunner); 
    } else if (councilName.equalsIgnoreCase("Coventry")) { 
     councilRunner = "claims_coventrytest"; 
     runCouncilProcess(councilRunner); 
    } 

} 


private void runCouncilProcess(String councilName) { 

    try { 
     List<String> commandList = buildCommandList(councilName); 
     ProcessBuilder buildProcess = new ProcessBuilder(commandList); 
     buildProcess.start(); 
     String output = IOUtils.toString(buildProcess.start().getInputStream()); 
     System.out.println("In process method " + output); 
     System.out.println("Council: " + councilName + " is running successfully.."); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 


private List<String> buildCommandList(String councilName) { 
    List<String> command = new ArrayList<String>(); 
    command.add("sudo"); 
    command.add("/opt"); 
    command.add("/" + councilName); 
    command.add("/tomcat"); 
    command.add("/bin"); 
    command.add("/becs_tomcat"); 
    command.add(" console"); 
    return command; 

} 

Comme nous avons plusieurs conseils pour travailler avec, le code doit faire la différence entre ce qui tomcat doit être exécuté en fonction du site pour être testé ...

la sortie lorsque le code a exécuté est la suivante:

manchester 
In convert method 
In process method 
Council: claims_manchestertest is running successfully.. 

Chacune des méthodes sont exécutées, en me disant le code est frappé mais pas correctement exécuté ...

Je puis vérifier mon terminal pour voir si le serveur tomcat a été initialisées en utilisant:

ps -ax tomcat

Cependant, il n'y a pas de cas en cours d'exécution !? tomcat

Aidez s'il vous plaît! Si vous avez besoin de plus d'informations, s'il vous plaît demandez-moi. Merci.

Répondre

0
+0

Merci pour la réponse, mais ce n'est pas vraiment ce que im après (je ne pense pas). L'application n'est pas une application Web et de nombreux exemples que vous avez donnés utilisent des applications Web. – user3008643

0

Ive a trouvé une solution ... Exécuter un script shell semble fonctionner pour moi. Simplement en passant le chemin vers le ProcessBuilder du script shell et un paramètre. Le serveur Tomcat démarrera alors avec succès. Heres ma solution:

String runShellScriptPath = "/Users/joshuadunn/workspace/update/startTomcat.sh"; 



private void runCouncilProcess(String councilName) { 
    try { 
     ProcessBuilder buildProcess = new ProcessBuilder(runShellScriptPath, councilName); 

**** Specifically the line above - Takes the string path and the council name for the correct tomcat to be started **** 

     buildProcess.start(); 

     System.out.println("Council: " + councilName + " is running successfully.."); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
}