2011-02-09 2 views
3

jetty6을 (서블릿이 아닌) 웹 이외의 응용 프로그램을 시작하도록 구성하려면 어떻게해야합니까? 내 Java 응용 프로그램은 tcp를 통해 ampq 메시지를 수신하는 rabbitmq 소비자입니다. 부두 init()에 내 메인 진입 점을 호출 할 수 있습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?부두에 웹 응용 프로그램을 내장하지 않음

답변

2

init() 메서드를 제공하고 그 내부에서 응용 프로그램을 호출하는 간단한 서블릿을 제공하지 않는 이유는 무엇입니까? 즉, 아무것도하지 않는 서블릿 래퍼 (servlet wrapper) 내에 랩핑 (wrap)한다.

그것은 당신이 아마 유용을 찾아 간단한 HTML 페이지를 통해 응용 프로그램의 상태를보고 거라고하지만 GETs/POSTs 등에 응답이없는 않습니다.

2

완전한 대답을 원하지만 제안 할 수있는 몇 가지 방법이 있습니다. 다른 행동을 줄 수 있습니다 (유스 케이스에 맞는 것을 선택해야합니다)

jetty.xml 파일에 올바른 코드를 입력하기 만하면됩니다. XML 파일은 매우 완전한 실행 언어이므로 객체에 대한 메서드를 간단하게 호출 할 수 있습니다. <call> 태그와 함께 적절한 정적 메소드가 트릭을 수행해야합니다.
부작용은 실제로 부두에서 어떤 것도 얻지 못한다는 것입니다. 즉, 부두가 사용하는 것과 동일한 시작 프로세스로 시작 메소드를 묶는 것입니다.

2 빌드는 부두 LifeCycle 인터페이스를 구현하는 구성 요소는 다음 부두가 시작될 때 당신이 당신의 포트를 열 수 있습니다 Server.addLifeCycle()
, 종료 깨끗하게 부두 전화 (당신의 최선의 선택은 AbstractLifeCycle을 확장하는 것입니다) , 중지, 등등.
하지만 당신이 얻는 것은 그 수명주기입니다. 배포와 관련하여 아무 것도 얻을 수 없습니다.

3. 옵션 1과 동일,하지만 당신은 WAR 파일의 배포로 묶어 할 수있는 jetty-web.xml (또는 jetty-env.xml)에 넣어.
옵션 1보다 많이 구입하지는 않지만 기존의 Jetty 설치에 응용 프로그램을 배포하려는 경우 도움이 될 수 있습니다.

4. 옵션 1과 동일하지만 jetty-web.xml을 사용합니다. 내가 얼마나 잘 작동하는지 모르겠다. 나는 LifeCycleWebAppContext에 붙일 수 있다고 생각하지 않기 때문에, 괜찮을 수도있다. 더 많은 조사가 필요할 것이다.

5.Brian's solution 당으로, 단순히 init() 방법 서블릿을 작성하고 initialise-on-startup 후 어떤 URL을 매핑하지 않습니다. 진입 방법에 대한 전화를 init 안에 넣으십시오.

관련 문제