2013-12-17 2 views
1

내 프로젝트에서 RMI를 사용하고 있으며 RMI 서버와 RMI 클라이언트가 있습니다. 클라이언트가 웹 응용 프로그램에 있으므로 일반적인 상수에 서버 참조가 저장됩니다.RMI 객체가 새로 고침되지 않습니다.

저는 알고 싶습니다. 서버 인스턴스가 필요할 때마다 레지스트리에서 서버를 조회하는 것이 얼마나 비쌉니까? 또는 한 번 올려보고 일정한 것으로 저장하는 것이 좋습니다.

상수에 저장하면 RMI 서버가 다시 시작되면 문제가 시작됩니다. 그 상수 변수가 오래된 참조를 보유하고 던지기 때문에 java.rmi.NoSuchObjectException: no such object in table

모든 환영합니다.

답변

1

클라이언트 응용 프로그램이 모든 서버 다시 시작을 견딜 수있게하려면 어쨌든 java.rmi.NoSuchObjectException을 포함하여 통신 실패로부터 서버를 보호해야합니다. 룩업과 요청 실행 사이에 서버가 다시 시작될 가능성은 크지 않지만 가능성이 있습니다. 이 경우 모든 요청 전에 조회를 했더라도 안전하지 않을 수 있습니다. 따라서 추천은 다음과 같습니다 :

  1. 한 번 조회하고 참조를 유지하십시오. 이것의 또 다른 이점은 응용 프로그램이 초기화시 잘못된 구성이나 다른 문제를 발견 할 수 있다는 것입니다.

  2. NoSuchObjectException이 발생하면 참조를 새로 고칩니다.

+0

일부 작업을 호출 할 때'NoSuchObjectException'이 발생하므로 중복 된 RMI 코드가 종료됩니다. – Mahendra

+0

@Mahendra 응용 프로그램을 제대로 작동시키는 데 필요한 코드에는 '중복'이 없습니다. 미학에 대한 임의의 아이디어로 인해 필요한 것을 구현하지 못하게하십시오.이를 표현하는 우아한 방법을 찾아보십시오. NoSuchObjectException에 대한 catch 블록에서 새 조회를 사용하여 do/while 루프로 구조화 할 수 있습니다. – EJP

관련 문제