2009-11-22 6 views
0

두 개의 서블릿 A & B가 있습니다. B에서 i는 A가 상태를 확인하기 위해 호출하는 isAvailable() 메소드를 갖습니다. 이 메소드가 true를 반환하면 객체는 B에 전달 될 것입니다.원격 서블릿 통신

약간의 독서를 할 때 나는 익숙하지 않은 몇 가지 옵션을보고 있습니다. 원격 EJB, RMI 또는 간단한 HTTP를 사용하는 JNDI (마지막 수행 방법은 확실하지 않음)

너희들은 어떻게 생각하니? 다른 옵션은 없습니까?

답변

0

인프라가 이미 HTTP를 사용하고 있다는 사실을 왜 사용하지 않습니까?

그래서 서블릿 A는 상태를 확인하기 위해 특정 경로에서 HTTP GET을 수행 할 수 있습니다 (객체를 보내거나 HTTP 응답 코드를 확인합니다 -이 후자의 방법은 상태 코드의 오용으로 보입니다). PUT/POST 필요에 따라서 오브젝트 여러 호스트에서 실행 중이며 시나리오에서 작동합니다.

개체는 표준 Java를 사용하거나 XML (예 : XStream을 사용하여 일련 번호로 표시)을 통해 직렬화 할 수 있습니다.

당신이 가지고있는 인프라를 활용하는 방법은 매우 간단합니다.

0

서블릿이 동일한 응용 프로그램 서버에서 실행되고 있습니까? 그렇다면 Spring을 사용하여 B를 A에 삽입하여 메서드를 직접 호출 할 수 있습니다.

서블릿이 다른 컨테이너에서 실행중인 경우에도 Remote 오브젝트로 서블릿을 노출하고 (마찬가지로 Spring을 사용하여) B에 A를 삽입 할 수 있습니다 (단, Spring 컨테이너가 원격 객체에 대한 프록시를 주입한다는 것을 제외하고는)). 이것은 코드에서 차지하는 공간이 거의 없습니다. 즉, 설정 파일에 의해 모두 정의되고 Spring이 모든 것을 처리합니다.

+0

마스터 호스트에는 하나의 서블릿 인스턴스가 있고 자체 tomcat 인스턴스가있는 자체 호스트에는 서블릿 B가 여러 개 있습니다. – wmitchell

0

서블릿 B의 isAvailable() 메소드는 Servlet에 저장된 일종의 "글로벌"데이터에 액세스하는 것처럼 보입니다. 이 객체를 개별 서블릿으로 추출하여 두 서블릿에서 모두 사용할 수 있습니까?

+0

isAvailable()이 기본적으로이 특정 호스트 (서블릿)의 CPU 오버 헤드를 확인했다고 생각했습니다. 해당 작업을 수락 할 수 있으면 true/특정 HTTP 응답 코드로 응답합니다. – wmitchell

+0

Servlet 클래스에서 isAvailable()을 구현해야하는 이유는 무엇입니까? 일반적인 "서비스 계층"패키지로 옮길 것입니다. – mjn

+0

True True .. mjustin. 부모 서블릿에서 어떻게 호출 할 수 있습니까? – wmitchell

0

가 마스터 호스트에서 서블릿 (A)의 하나 개의 인스턴스이며, 자신의 바람둥이의 인스턴스가 자신의 호스트의 각 서블릿 B의 많은.

java.net.URLConnection을 사용하면 프로그래밍 방식으로 HTTP 요청을 시작할 수 있습니다. 간단한 튜토리얼 here을 찾을 수 있습니다.

A가 B에게 HTTP 요청을 시작하고 B에서 요청을 수신하고 그에 따라 응답을 리턴하는 서블릿을 갖도록하자. 간단한 response.getWriter().write("ok"); 정도가 될 수 있습니다. XML 문자열 등을 반환 할 수도 있습니다. 그런 다음 URLConnectionInputStream에서이 값을 읽을 수 있습니다.