2013-08-17 2 views
2

책에서 필자는 rmic를 사용하여 구현 클래스를 컴파일 할 때 스텁과 스켈레톤이라는 두 개의 객체를 만듭니다. 하지만 서버 측 구현 클래스를 컴파일하면 스텁 객체 파일 만 생성됩니다. 코드는 다음과 같습니다.RMI에서 skeleton 객체는 언제 만들어 집니까?

import java.rmi.*; 
import java.rmi.server.*; 

public class ServerImp extends UnicastRemoteObject implements testRmi 
{ 
    ServerImp() throws RemoteException 
    { 
    } 

    public void getText(String gt) throws RemoteException 
    { 
     System.out.println(gt); 
    } 
} 

누가 스켈레톤 파일을 만들 었는지 말할 수 있습니까?

+1

더 이상 rmic, 스텁 또는 스켈레톤이 필요하지 않습니다. 지난 10 년 이내에 업데이트 된 자바 책을 찾으십시오. – jtahlborn

+0

책이 해골에 대해 이야기한다면 아마도 적어도 15 년이 걸릴 것입니다. –

답변

3

rmic 1.2 이후 버전에서는 Java가 더 이상 스켈레톤 클래스를 생성하지 않습니다. RMI 용으로 지원되는 새로운 JRMP 프로토콜은 스켈레톤 파일의 사용을 없앴습니다.

원격 객체 골격 실제 원격 객체 구현을 호출하는 메소드를 포함하는 JRMP 프로토콜 서버 측 엔티티 이다.

+1

참고, 스텁 및 스켈레톤이 없어졌으며 rmic가 필요하지 않습니다. – jtahlborn

+1

더 정확하게는 스켈레톤은 기본적으로 사용되지 않지만 스텁 인프라는 모두 그대로 남아있어 계속해서 혼란을 일으 킵니다. :-) –

+0

@StuartMarks Correct. 인프라는 여전히 레지스트리를 지원하기 위해 존재합니다. 레지스트리는 호환성을 위해 레지스트리를 여전히 사용합니다. LocateRegistry.getRegistry()에 의해 작성된 스텁은 여전히 ​​스켈레톤 프로토콜을 말하는 1.1 스텁입니다. – EJP

2

해골은 JDK 1.2 (1998 년 출시)의 일반 서버 쪽 디스패치 코드로 대체되었습니다. 정적으로 생성 된 스텁은 JDK 5 (2004 년 출시)의 동적 프록시로 대체되었습니다. RMI over JRMP를 실행하기위한 스텁 생성에 더 이상 rmic을 사용할 필요가 없습니다. (단, rmic은 여전히 ​​IIOP를 사용하는 데 필요합니다.)

rmic, 스텁 및 스켈레톤에 대해 묻는 stackoverflow에 대한 질문이 많습니다. 사람들은 아주 오래된 책과 오래된 웹 튜토리얼을보고 있어야합니다. 저자가 연락하여 구식 정보를 업데이트하거나 제거 할 수 있도록 링크가 일부에 게시 된 경우 유용합니다.

오래된 스텁 지원은 더 이상 지원되지 않습니다. 혼란을 피하는 데 도움이 될 수 있습니다.


편집 : 아, 아마도 질문에 대답해야 할 것 같습니다. :-)

편집 2 : 생성자 UnicastRemoteObject에 대한 잘못된 설명을 삭제했습니다.

정적으로 생성 된 스켈레톤은 더 이상 필요하지 않습니다. 위의 코드에서 원격 객체는 UnicastRemoteObject까지 확장됩니다. 개체가 생성되면 UnicastRemoteObject 생성자가 호출됩니다. 이것은 소켓 리스닝과 원격 메소드 디스패치를 ​​처리하는 RMI 내부 인프라에 객체를 연결합니다. 즉, 객체를 "내 보냅니다".