2009-12-04 1 views
0

나는 Wicket을 처음 사용하고 있으며 정리, DB 업데이트, 복구 등을 수행하기위한 유지 관리 페이지를 사용하여 내부에서 웹 응용 프로그램을 유지 관리하려고합니다. 데이터 바인딩을 위해 Hibernate 나 그와 비슷한 것을 사용할 계획이기 때문에이 액션들을 실행할 수있는 모든 사람에게 Tomcat 관리자 암호를 제공하지 않으면 내부에서 응용 프로그램을 완전히 재부팅하려고합니다.Wicket 응용 프로그램이 관리자 암호없이 자체적으로 다시 시작될 수 있습니까?

내가 아는 한, 관리자 암호없이 Java 웹 응용 프로그램을 다시 시작할 수있는 쉬운 방법이없는 것 같습니다. 그러나 관리자 패널에는 이러한 재시작 기능이있는 많은 Java 웹 응용 프로그램이 있으므로 특정 서블릿 컨테이너 또는 일부 웹 프레임 워크에서 다시 시작을 트리거 할 수 있어야한다고 가정합니다. 그들은 어떻게 든 그 트릭을해야만합니까? (또는 처음부터 다시 시작하지 않고 다시 시작하지 않고 재시작하지 마십시오.)

Wicket 또는 Tomcat이 종료되었을 때 응용 프로그램에서 종료 및 재시작 할 수있는 항목을 찾을 수 없습니다. Wicket의 내부 메소드가 그렇게 할 수 있을까요? (공개적으로 액세스 할 수 있지만 내부 용도로만 사용되기 때문에 JavaDoc은 이에 대해 조언합니다.)

보안 관점에서 보면 응용 프로그램이 자체 코드에서 이러한 재시작을 요청할 수 없어야하는 이유를 알 수 없습니다 .

이 작업을 수행 할 수 있습니까? 그렇다면 응용 프로그램에서 다시 시작해야 할 작업은 무엇입니까?

편집 : 정확하게 질문하십시오 : 사용자와 응용 프로그램 모두 Tomcat 관리자 인터페이스에 액세스하는 데 사용할 수있는 암호가 없어야합니다. 어떤 메소드를 호출하거나 서블릿 컨테이너가 특정 어플리케이션을 재시작하도록 트리거되도록 설정할 플래그를 생각하고있었습니다. 내 생각에 응용 프로그램은 서블릿 컨테이너에서 실행 중이므로 종료하고 다시 시작해야합니다. Java App 서버에서 일반적으로 가능하지 않은 경우, 실행중인 모든 스레드를 종료하고 가능한 한 많이 정리하고 다시 시작하기 위해 기본 프레임 워크 (이 경우 Wicket)를 호출하여 응용 프로그램 수준에서 수행 할 수있는 방법이있을 수 있습니다 프레임 워크를 사용하는 응용 프로그램; 앱 스택의 "소프트 재부팅"과 같은 것입니다.

답변

2

귀하의 앱이 개찰을 사용한다는 것은 귀하의 질문과 관련이 없습니다. 그것은 Wicket 프레임 워크를 사용하는 자바 웹 애플리케이션입니다. Tomcat 컨테이너를 사용하여 웹 응용 프로그램을 다시 시작하는 방법을 찾고 있습니다. 다른 웹 응용 프로그램 컨테이너 (부두 등)를 선택하면 절차를 변경해야합니다.

앱을 시작하려면이 URL을 누르십시오 : http://localhost:8080/manager/start?path=/myapphttp://localhost:8080/manager/stop?path=/myapp 앱을 중지하십시오./myapp를 응용 프로그램 컨텍스트로 변경하면 제어를 시작/중지 할 수 있습니다.

그런 다음 코드에서 내부적으로 암호 문제를 처리 할 수 ​​있습니다.

명확한 점을 고려하면 this tomcat documentation을보고 JMX를 사용할 수 있습니다. 그러나 JMX조차도 암호로 보호됩니다. 웹 애플리케이션에서 컨테이너 컨트롤을 가져 오는 표준은 없습니다.

+0

하지만 사용자가 관리자 암호 (물론 포트 8080에 대한 직접 액세스를 차단하고 HTTP 인증을 사용하는 Apache를 통해 프록시하므로 관리자 인터페이스에 액세스하는 두 번째 계정이 있어야합니다). 질문 제목이 정확하지 않을 수 있습니다. 사용자가 앱을 다시 시작할 수 있어야하지만 관리자 비밀번호를 사용하여 앱 자체도 사용자도 관리자에게이 방법으로 액세스해야합니다. getServletContext()와 같은 것을 생각하고있었습니다. restartApplication(); (그러한 이름은 분명히 존재하지 않습니다) – Energiequant

+0

HttpClient와 같은 URL을 사용하면 사용자의 암호를 입력 할 수 있으므로 사용자는 암호를 입력 할 필요가 없으므로 입력 할 필요가 없습니다. 웹 응용 프로그램의 컨테이너 컨트롤에 액세스 할 수 없습니다. –

+0

cron 작업과 wget이 문제를 잘 해결할 것입니다. wget --save-cookies cookies.txt \ --post-data 'user = admin & password = mypassword'\ http : // localhost : 8080/manager/stop? path =/myapp 스크립트는 root 만 읽을 수있게 만들고 암호를 잊어 버릴 염려가 없습니다. wget --load-cookies cookies.txt \ -p http : // localhost : 8080/manager/start? path =/myapp – perilandmishap

1

다른 웹 프레임 워크가 실제로 이것을 지원하는지 생각하고 있습니다. Jim은 솔루션의 올바른 수준을 가리키고 있다고 생각합니다. 웹 컨테이너가 사용되는 프레임 워크에 관계없이 포함 된 웹 응용 프로그램을 다시 시작할 수 있어야합니다. Tomcat은 관리자 응용 프로그램을 사용할 수 있어야합니다. Jetty는 JMX MBeans를 통해이 기능을 제공합니다. 따라서 다시 시작 기능은 컨테이너간에 이식 할 수 없습니다.

프레임 워크를 이식성있게 만들려면 재시작에 필요한 것들을 분리해야한다고 생각합니다. 최대 절전 모드 인 경우 세션 팩터 리를 다시 초기화하십시오. 스프링 구성이라면 확실히 방해가 될 수 있지만 콩을 교체하거나 다시 구성하는 것이 좋습니다. i18n 또는 마크 업 자원 wicket이라면 이미 도움이 될 것입니다.

0

또한 JMX를 살펴 보는 것이 좋습니다. 이 경우 JMX에 대한 인증을 끌 수 있습니다.이 경우 JMX 포트가 인터넷에서 연결할 수 없는지 확인하십시오 (호스트 기반 방화벽의 포트를 필터링하거나 로컬 IP 주소에만 바인드하십시오). JMX는 Java EE 세계에서 애플리케이션, 컨테이너의 원격 모니터링 및 제어를 표준화하기 위해 계획되었으므로 어느 정도 찾고있는 인프라를 제공합니다.

또는 다른 웹 컨테이너 (포함 된 것이 좋음)를 사용하고 Java 코드에서 컨테이너를 다시 시작하는 경우조차도 처리하십시오.