2011-02-15 5 views
2

자바 기반 TCP NIO를 사용하여 다양한 클라이언트 (웹/HTTP가 아니라 일부 고유하게 개발 된 미들웨어를 통해)에서 정보를 수집하는 독립형 Java 응용 프로그램이 있습니다. 이제 사용자가 HTTP를 통해 많은 쿼리를 수행 할 수있는 프론트 엔드를 개발해야합니다. 그래서 서블릿이이 애플리케이션에서 필요한 기능을 호출 할 수 있도록이 애플리케이션을 tomcat에 넣는 방법이 있습니까 ??? 그 일은 바람둥이 밖에서 미들웨어를 듣는 것과 동시에 바람둥이 내부에서 서블릿 서비스를하는 것입니다. 이 작업을 수행하는 방법 ??바람둥이 내부 자바 응용 프로그램?

이 응용 프로그램을 tomcat 외부에두고 RMI를 사용하는 것은 옵션이지만이를 원하지는 않습니다. 내 응용 프로그램에 tomcat을 포함시킬 수 있습니까 옵션 ???

답변

0

당신이 가고 싶은 방법은, 당신은 단지 웹 기능의 약간을 필요로하기 때문에 기존 응용 프로그램에 내장 된 웹 서버를 사용하는 것입니다.

다른 방법으로도 가능합니다. 서블릿 리스너를 사용하여 시작 및 중지 할 수 있으며 Tomcat이 존재하지 않는다는 사실을 모르기 때문에 시작할 스레드를주의 깊게 관리해야합니다.

1

Tomcat을 포함하는 것에 대해서는 잘 모르겠지만 embedded Jetty을 사용하여 애플리케이션 내에 서블릿 컨테이너를 내장 할 수 있습니다. 원하는 것이 있다면 기존 서버에 HTTP 인터페이스를 추가하는 것입니다.

Tomcat의 표준 서블릿에서 서버의 TCP 수신 대기 구성 요소를 실행하려면 완벽하게 작동해야합니다. 그런 다음 서블릿은 기존 응용 프로그램의 메소드를 직접 호출 할 수 있지만 일반 TCP 포트를 계속 수신합니다.

세 번째 옵션은 다른 클라이언트와 동일한 방식으로 기존 서버와 통신하는 서블릿을 작성하는 것입니다.

3

새 Tomcat 7의 내장 버전은 for download입니다.

+0

새로운 내용입니다. 재미있는 ... –

0

Traroth가 말했듯이, Jetty를 포함시키는 것은 Tomcat으로 동일한 작업을 수행하는 것보다 훨씬 좋은 옵션입니다. Jetty 웹 사이트에 예제와 작은 자습서가 있습니다. http://docs.codehaus.org/display/JETTY/Embedding+Jetty

요청이 복잡하지 않으면 언제든지 포트를 열어 수동으로들을 수 있습니다.

0

다른 방법을 고려 했습니까? 웹 응용 프로그램에 응용 프로그램을 포함시키는 것입니까?

봄을 사용하여 웹 응용 프로그램을 인스턴스화 한 다음 적절한 웹 클래스 (예 : struts2 작업)에 삽입 할 수 있습니다.

이렇게하면 웹 응용 프로그램을 응용 프로그램과 별도로 사전 구성된 모든 웹 서버에 배포 할 수 있습니다.

0

Tomcat을 사용해야하는 경우 응용 프로그램을 Tomcat이 실행될 때 코드를 배포하는 .war 파일로 만드는 것이 가장 좋습니다. 그런 다음 원하는 RMI/미들웨어에 연결할 수 있습니다.

0

메모리 공간에 대한 귀하의 의견을 이해할 수 있는지 잘 모르겠습니다.

  1. 이 appication 및 동일한 가상 기계의 웹 응용 프로그램을 실행 : 아주 기본적인 수준에서

    당신은 두 가지 선택이있다.

  2. 응용 프로그램을 실행하고 다른 가상 머신 에서 웹 응용 프로그램

당신이 방법 1을 경우, 당신은 서블릿과 통화에서 응용 프로그램 클래스의 인스턴스를 얻을 수있을 것입니다 그 (것)들에 방법.

  1. 응용 프로그램 안에 tomcat/jetty를 포함하십시오. 주 방법을 사용하여 응용 프로그램을 정상적으로 시작할 것입니다. 앱을 시작한 후에는 자신의 스레드를 시작할 tomcat/jetty 클래스의 인스턴스를 만들어야합니다.
  2. 응용 프로그램을 tomcat/jetty에 배포 할 war 파일에 포함하십시오. 이전 옵션과 마찬가지로 context listener에서 응용 프로그램을 시작해야합니다.

접근 방식 2를 선호하는 경우; tomcat/jetty를 시작하고 웹 응용 프로그램을 배포하고 응용 프로그램을 별도로 배포하십시오. 이제 두 개의 jvms가 실행됩니다. 이 두 프로세스간에 통신하려면 소켓 통신 형식을 사용해야합니다. OutputStream/InputStream over socket; RMI; JMX; JMS 등