원격 메소드를 호출하기 전에 클라이언트 측에서 시간 제한을 설정할 수 있도록 RMI 연결 팩토리를 사용하는 응용 프로그램을 작성 중입니다. 클라이언트가 미리 정해진 시간 동안 원격 메서드에 대한 호출을 기다리고 나서 호출을 포기하고 포기할 수 있도록이 작업을 수행하려고합니다.RMI 스텁에서 소켓 팩토리를 가져올 수없는 것 같습니다. 왜 그래야만하지?
이 메커니즘을 용이하게하는 소켓 팩터 리를 만들었습니다. UnicastRemoteObject.exportObject(Remote, int, RMIServerSocketFactory, RMIClientSocetFactory)
으로 리모트 스텁을 작성하여 클라이언트가 두 디바이스 모두에 알려진 클래스 정의 인 사용자 정의 된 소켓 팩토리와 함께 스텁을 사용할 수있게합니다.
클라이언트의 소켓 팩토리가 서버를 호출하기 전에 제한 시간을 설정해야합니다. 클라이언트는이 시간 제한의 길이를 결정합니다. 이 방법으로 작동하는 소켓 팩터를 만들 수 있습니다. 그러나 원격 스텁이이 사용자 지정된 소켓 팩토리를 가지고 있다는 것을 클라이언트에서 보장 할 수 없어서 클라이언트 소켓 팩토리가 제한 시간을 가진 클라이언트 소켓을 만들 수 있는지 확인할 수 없습니다.
나는 Remote.getClientFactory()
이 작동해야한다고 생각하는 방식으로 작동하는 방법이 있는지 궁금합니다. 이것은 내가 RMI 스펙에서 다루지 않는 분명한 특징으로 보인다. 이 메소드가 없다면 클라이언트에서 클라이언트의 소켓 팩토리를 검색하기 위해 잘 사용되는 '해킹'이있을 수 있으므로 타임 아웃을 지정할 수 있습니까?
EJP. 나는 옵션 4에 강한 경향이있다. 나는이 옵션을 사용하는 무언가를 만들 것 같고, 업데이트 된 RMI 스펙이 장난 꾸러기다고 말할 때까지 기다릴 것이다. –
'sun.rmi. *'클래스를 사용하는 것은 이미 엉터리입니다. RMI에서 변경 사항이있을 때까지 기다리지 않아도됩니다. 012에서 2004 년에 1.5가 나온 이래로 아무 일도 일어나지 않았습니다. – EJP
흠 ...'RemoteStub'는 더 이상 사용되지 않습니다 ... 나는 진정한 경우의 내용이 이전 버전과의 호환성을 위해 있다고 가정합니다 ... 나는 이것을 통합하지 않았습니다. 논리를 내 솔루션으로 나는 최신 자바로 내 일을 처리하는 것에 관심이있다. –