2014-01-24 3 views
0

Основанный на коде, который я видел в Stackoverflow и других страницах в Интернете, я создал метод остановки и запуска tomcat в настоящий момент, когда я запустил процесс в своей системе, потому что мне нужно чтобы очистить память в моей ОС, я использую System.gc(), но все еще не достаточно, чтобы освободить память, это код:Запуск и остановка Tomcat из java-кода

Глобальная декларация:

private String server = "localhost"; 

Метод остановки запуска Tomcat:

public void tomcat(){ 
    try{ 
     Socket s = new Socket(server,8005); 
     if(s.isConnected()){ 
      PrintWriter print = new PrintWriter(s.getOutputStream(),true); 
      print.println("SHUTDOWN"); /*Command to stop tomcat according to the line "<Server port="8005" shutdown="SHUTDOWN">" in catalina_home/conf/server.xml*/ 
      print.close(); 
      s.close(); 
     } 
     Runtime.getRuntime().exec(System.getProperty("catalina.home")+"\\bin\\startup.bat"); /*Instruction to run tomcat after it gets stopped*/ 
    }catch (Exception ex){ 
     ex.printStackTrace(); 
    } 
} 

Строка кода для запуска tomcat работает отлично, но нет инструкций, чтобы остановить ее, потому что, когда я экземпляр сокета, дает мне следующее сообщение: Connection refused: connect.

Как я могу это решить? или, есть ли другой способ остановить tomcat?

Заранее спасибо.

+0

Звучит как проблема брандмауэра – MadProgrammer

+1

, если вы запустите 'netstat', можете ли вы увидеть, что 8005 открыт? –

+0

@ user2310289 Я запустил 'netstat -a', чтобы увидеть, был ли порт уже открыт, но ничего, даже когда я запускал приложение, результаты были одинаковыми. @MadProgrammer Я добавил порт в качестве TCP в брандмауэре, но у меня все еще такая же проблема. Даже я перезапускаю свой компьютер, чтобы проверить, были ли применены изменения. – Vlad

ответ

1
public static void shut_server(String lien) 
{ 
     try { 

     Process child = Runtime.getRuntime().exec(lien+"/shutdown.sh"); 
     System.out.println("Serveur est atteins"); 
    } catch (IOException ex) { 
     Logger.getLogger(Installation.class.getName()).log(Level.SEVERE, null, ex); 
     System.out.println("erreur de demarrage"); 
    } 
} 

селезенка = путь к TOMCAT бен файл
, например - /home/zakaria/Téléchargements/apache-tomcat-8.0.21/bin

+0

Добавьте правильные теги кода и текст с пояснениями. – Peanut

0

У меня был подобный вопрос. Я получаю сообщение об ошибке «Connection failed: connect» при создании сокета.

Однако мой вариант использования отличается от того, который был отправлен Владом. Когда сервер Tomcat запускается, мое приложение проверяет доступность некоторых ресурсов, а если нет, ему необходимо отключить сервер.

Я добавил 30 секунд спать как раз перед создающей розеткой линии:

try { 
    Thread.sleep(30000); 
} 
catch (Exception excp) {} 
Socket socket = new Socket("localhost", port); 

и он начал работать.

Я думаю, что когда Tomcat запускается, ему нужно некоторое время, чтобы порт выключения был готов к работе. Выбор из 30 секунд произволен, он может быть, вероятно, короче.

FYI, мой Tomcat работает как служба Windows.

Смежные вопросы