2013-08-03 2 views
0

JNDI를 사용하여 원격 서버에서 객체를 가져 오는 경우 객체를 로컬 JVM에 직렬화 할 수 있습니다.이 방법으로 RMI없이이 객체의 메소드를 로컬에서 호출 할 수 있다고 가정합니다. RMI가 필요한 이유는 무엇입니까?JNDI를 로컬 JVM에 직렬화 할 수있는 경우 RMI에서 메소드를 호출해야하는 이유는 무엇입니까?

+0

RMI가 항상 필요한 것은 아닙니다. 필요한 경우 RMI 서비스를 사용했기 때문입니다. 많은 JNDI 검색은 다른 리소스를 반환합니다. – erickson

답변

4

JNDI은 조회 및 디렉토리 서비스입니다. 일부 컨텍스트 내에서 이름으로 자원을 확보하는 표준화 된 방법을 제공합니다. 일반적으로 응용 프로그램 서버 컨텍스트에서 공유 리소스를 얻는 데 사용되지만 구현에 따라 원격 리소스를 나타내는 표준화 된 방식으로 항목을 조회 할 수도 있습니다.

RMI은 Java 플랫폼에 내장 된 원격 메소드 호출 기술입니다. 그것은 바이너리 프로토콜을 통해 원격 java 객체 메소드를 호출 할 수있게 해준다. Java의 내장 직렬화 처리를 사용하여 네트워크를 통한 원격 호출 및 매개 변수 전달을 투명하게 보입니다. RMI는 주어진 JNDI 구현과 통합되거나 자체 JNDI 구현과 통합되지 않는 자체 디렉토리/룩업 서비스를 요구합니다. (일반적으로 통합되어 있지는 않습니다.)

이 모든 것을 염두에두고 궁금한 점은 질문이 명확하지 않은 이유입니다. 은 JNDI를 통해 원격 RMI 서비스를 검색합니다. 은 원격 RMI 참조를 디스크에 저장 (직렬화) 한 다음 나중에 다시 사용하기 위해 재구성 할 수 있습니다 (이는별로 좋은 생각은 아니지만).하지만 JNDI와 RMI는 서로 다릅니다.

1

것은 우리가 RMI

없음 않고 로컬 객체의 메소드를 호출 할 수 있다고 가정하고, 당신이 원격 메소드 호출을 할 때 두 개의 별도의 객체를 필요로한다는 것을 이해하는 것이 중요하다. 클라이언트 측에서 실행되는 스텁과 서버 측에서 실행되는 스켈레톤 이러한 개체는 필요한 낮은 수준의 작업을 수행합니다.

클라이언트가 원격 메서드를 호출하면 절대로 개체를 직접 호출하지 않고 대신 Stub 개체를 사용합니다.

따라서 JNDI 서비스에서 얻은 것은 원격 객체가 아닌 스텁입니다. 나는 원격 서버에서 개체를 얻기 위해 JNDI를 사용하는 경우, 객체가 로컬 JVM에 직렬화 할 수

+0

1998 년부터 해골을 필요로하지 않았습니다. – EJP

1

, 나는 우리가 RMI없이 로컬 객체의 메소드를 호출 할 수 있다고 가정하고 이런 식으로, 왜 우리가 필요로하는 RMI?

따라서 메서드를 원격으로 호출 할 수 있습니다. 로컬 JVM으로 직렬화 해제 된 객체가 JVM에서 실행됩니다. 로컬 JVM에서 원격 객체를 호출하더라도 원격 객체는 원격 JVM에서 실행됩니다.