문제

Dynamic Proxy Stub 구현이 실제로 현장 뒤에서 어떻게 수행되는지 이해하고 싶습니다. 내가 읽은 내용에 따르면, 사전 생성 된 스터브 클래스가 발견되지 않으면 원격 객체가 내보낼 때까지 RMI 런타임은 스터브 역할을하는 동적 프록시를 생성합니다. 그런 다음 해당 스텁은 RMI 레지스트리에 바인딩되고 나중에 일부 RMI 클라이언트가 액세스 할 수 있습니다.

문제는 스텁이 실제로 동적으로 생성 된 프록시이기 때문에 클라이언트 측에서 클래스 정의를 사용할 수 없게되면 클라이언트가 어떻게 RMI 레지스트리에서 스터브를 검색 할 수 있습니까? 현장 뒤에서 어떤 종류의 역동적 인 클래스로드가 일어나고 있습니까? 아니면 RMI가 다른 기술을 사용하여이를 해결합니까?

도움이 되었습니까?

해결책

java.lang.reflect.proxy는 직렬화 가능하며 ObjectOutputStream 및 ObjectInputStream을 특별히 지원합니다. 기본적으로 구현 된 인터페이스와 호출 핸들러는 직렬화되며, 새로운 동적 프록시는 사막화 중에 그로 구성됩니다.

다른 팁

RMI는 동적 클래스 로딩을 사용합니다. 클래스 경로는 클라이언트가 클래스를로드하는 '클래스 경로 주석'으로 호출과 함께 전송됩니다. 더 많은 정보를 보려면 RMI 구현을 살펴볼 수 있습니다. JDK 소스의 일부로 사용할 수 있습니다. 특히, 클래스 ObjectOutputStream 및 rmiclassloader.

업데이트 : RMI는 HTTP 서버를 시작하지 않습니다. 실제로이를 위해서는 사용자 정의 솔루션이 필요합니다. 언급 한 바와 같이 그 중 하나는 실행중인 HTTP 서버 일 수 있고, 서버를 통해 클래스를 사용할 수있게하고, 스터브에 HTTP 서버의 주소/포트를 사용하여 코드베이스를 전달하여 클라이언트를 다운로드 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top