2011-01-19 4 views
3

대학 프로젝트를 위해 RMI를 살펴보고 약간의 문제가 생겼습니다. 읽은 ive에서 java 버전 5 이상은 필요한 스텁 파일을 자동으로 생성해야합니다 (이전에 추가 단계가 필요하다는 것을 알고 있습니다).javac가 RMI를위한 스텁을 생성하지 않습니다

이 튜토리얼을 여기에 따라 http://download.oracle.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.html을 작성하고 Javac으로 클래스를 컴파일하면, ive는 표준 클래스 파일과 내 스텁 파일의 서명 만 얻습니다.

이것은 프로젝트를 실행하려고 할 때 확인됩니다. 응용 프로그램이 충돌하여 스텁 파일을 찾을 수 없다는 메시지가 나타납니다. 내가 놓친 게 있니? 대신

RemoteInterface stub = 
(RemoteInterface) UnicastRemoteObject.exportObject(server, 0); 

주, 나는 당신이 당신의 서버에

RemoteInterface stub = 
(RemoteInterface) UnicastRemoteObject.exportObject(server); 

같은 것을 사용 생각 exportObject()에 두 개의 인수를

java version "1.6.0_21" 
Java(TM) SE Runtime Environment (build 1.6.0_21-b07) 
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b17, mixed mode) 
+0

내 경험에 비추어 볼 때, RMI는 통증이 있습니다. 대학에서 주어진 RMI 과제는 강사가 제출이 실제로 실행될 수 있는지 여부를 신경 쓰지 않는 유일한 것입니다 ... – chrisbunney

답변

2

:

NB는 java -version을 실행하는 날이 있습니다 - 두 번째 버전은 다른 유형을 반환합니다. 실제로 저를위한 변화를 가져옵니다.

1

스텁이 필요하지 않거나 5.0 이상으로 생성되었습니다. 경로 중 일부가 잘못되었을 수 있습니다. 튜토리얼에서는 디렉토리/경로를 설정하는 방법과 물건을 실행하는 위치에 대해 명확하지 않습니다.

다음

은 나를 위해 일한 :

 
~/tmp$ mkdir -p hello/example 
~/tmp$ vim hello/example/Hello.java [copy/paste the code of Hello.java here] 
~/tmp$ vim hello/example/Server.java [copy/paste the code of Server.java here] 
~/tmp$ vim hello/example/Client.java [copy/paste the code of Client.java here] 
~/tmp$ mkdir build 
~/tmp$ javac -d build/ hello/example/*.java 
~/tmp$ rmiregistry & 
~/tmp$ java -classpath build -Djava.rmi.server.codebase=file:build/ example.hello.Server & 
Server ready 
~/tmp$ java -classpath build example.hello.Client 
response: Hello, world! 

여기서 중요한 부분은 구축하고 물건을 실행뿐만 아니라, 클래스 경로 및 -Djava.rmi.server에 대해 적절한 디렉토리를 통과 할 때 당신이 서있는 디렉토리입니다. 코드베이스.

관련 문제