2012-04-06 2 views
0

java를 통해 프로그래밍 방식으로 tomcat (로컬 호스트에서)을 관리하는 방법을 찾고 있습니다. Tomcat을 시작/중지하고 WAR를 배포하려고합니다.Java를 통해 Tomcat을 관리하는 방법

도움을 주시면 감사하겠습니다. 에

샘플 코드// 바람둥이 : -Dcatalina.home = c :를

+0

Tomcat은 Java 프로그램이다. 그냥 메인 클래스를 호출해야하고, 라이브러리와 인수에 대해 알고있는 스크립트를 참조하십시오. 진짜 질문은 무엇입니까? – Jayan

+0

봄 부츠를 시험해 볼 기회가 있습니까? – wdoering

답변

1

시작하는 방법/자바를 통해 바람둥이 중지하면 bootstrap.jar에서 실행 샘플 매개 변수 (클래스 런타임을 사용)를 호출하는 것입니다 자바에서 실행하는 방법을 외부 프로그램을 볼 수

http://ptrthomas.wordpress.com/2006/03/25/how-to-start-and-stop-tomcat-from-ant

샘플 코드 : 바람둥이 정지를 시작하는 방법 개미가 실행 참조 http://www.linglom.com/2007/06/06/how-to-run-command-line-or-execute-external-application-from-java/

1
당신은 호출하는 자바 런타임 클래스를 사용할 수 있습니다

박쥐 파일. 사용자가 java 프로세스를 실행하면 Tomcat을 시작하고 중지 할 수있는 권한이 있는지 확인하십시오.

try{ 
Runtime.getRuntime().exec("c:/program files/tomcat/bin/startup.bat"); 
} catch(IOException e) {System.out.println("exception");} 
0

당신은 어떻게 관리자 프로세스에게 배포 작업 내용의 소스를 tomcat manager를 사용하거나 볼 수 있습니다.

0

Tomcat을 프로그래밍 방식으로 관리하려면 Tomcat의 JMX 및 bulit-in MBeans 기능을 살펴볼 수 있습니다.

본질적으로 Java 기반 JMX 클라이언트를 작성하여 RMI를 통해 MBeans와 통신하거나 Manager 응용 프로그램에서 JMX Http 프록시를 활용하고 일반 오래된 HTTP 요청을 사용하여 tomcat 인스턴스를 스크립팅하고 관리 할 수 ​​있습니다 . JMX와 톰캣 6의 좋은 참고로

: http://www.datadisk.co.uk/html_docs/java_app/tomcat6/tomcat6_jmx.htm

관리자 응용 프로그램 및 JMX HTTP 프록시의 좋은 참고 : http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#JMX_Set_command

당신은 비교적 쉽게 배포 및 배포 취소 전쟁 할 수 있어야한다.

tomcat을 종료 할 수있는 기존 MBean이 있다고 생각하지 않지만 자신을 구현하고 System.exit()을 호출하는 것이 매우 쉽습니다.

2

앱에 임베드 된 Tomcat을 실행할 수 있습니다.

+0

두 배로, 임베디드 톰캣은 개발이 매우 편리합니다. 임베딩 예제 [here] (https://github.com/alx3apps/spring-embedded-tomcat)를 찾을 수 있습니다. – alexkasko

0

응용 프로그램이 실행되는 8843과 같이 개별 Tomcat 커넥터 즉, 포트 다시 시작을 다시 시작할 수 있습니다. 이것이 필요한 경우의 한 시나리오는 API를 통해 서명 된 인증서를 가져 오거나 신뢰 저장소를 수정하는 경우입니다.

다음은 인증서를 추가/삭제 한 후 tomcat 커넥터를 다시 시작하는 데 사용하는 전체 코드/방법입니다.

public void refreshTrustStore() throws Exception 
    { 
     try 
     { 
      //following line need to be replaced based on where you get your port. It may be passed in as argument 
      String httpsPort = configurationManager.getHttpsPort(); 
      String objectString = "*:type=Connector,port=" + httpsPort + ",*"; 

      final ObjectName objectNameQuery = new ObjectName(objectString); 

      for (final MBeanServer server : MBeanServerFactory.findMBeanServer(null)) 
      { 
       if (server.queryNames(objectNameQuery, null).size() > 0) 
       { 
        MBeanServer mbeanServer = server; 
        ObjectName objectName = (ObjectName) server.queryNames(objectNameQuery, null).toArray()[0]; 

        mbeanServer.invoke(objectName, "stop", null, null); 

        // Polling sleep to reduce delay to safe minimum. 
        // Use currentTimeMillis() over nanoTime() to avoid issues 
        // with migrating threads across sleep() calls. 
        long start = System.currentTimeMillis(); 
        // Maximum of 6 seconds, 3x time required on an idle system. 
        long max_duration = 6000L; 
        long duration = 0L; 
        do 
        { 
         try 
         { 
          Thread.sleep(100); 
         } 
         catch (InterruptedException e) 
         { 
          Thread.currentThread().interrupt(); 
         } 

         duration = (System.currentTimeMillis() - start); 
        } while (duration < max_duration && 
        server.queryNames(objectNameQuery, null).size() > 0); 

       // Use below to get more accurate metrics. 
      String message = "TrustStoreManager TrustStore Stop: took " + duration + "milliseconds"; 
      logger.information(message); 

      mbeanServer.invoke(objectName, "start", null, null); 

      break; 
     } 
    } 
} 
catch (Exception exception) 
{ 
    //Log and throw exception 
    throw exception 
} 

}

관련 문제