Java RMI의 기초를 파악하려고합니다.Java RMI를 사용하면 원격 메소드 호출이 서버의 시간대 대신 클라이언트의 시간대를 생성하는 이유는 무엇입니까?
Client
서버
Server
로 실행 : 아이디어는 각각 두 개의 클래스 중 하나에 별도의 메인으로 준비하는 두 개의 별도의 프로세스가 실행하는 것입니다
세 번째 클래스 인 Document
은 공유 객체로 작동하며 (Strings
의 간단한 수집 자임) 해당 메소드 addTimestamp()
은 현재 Timestamp
을 저장합니다. 콘솔에 추가 인쇄. 이 메서드는 DocumentInterface
에 정의 된대로 원격 메서드로 사용할 수도 있습니다. 클라이언트의 출력은 예상대로 java -cp rmi.jar Client
:
Server
:java -cp rmi.jar Server
Client
두 개의 서로 다른
년 9월 30일 01.53.01cmd
창에있는 두 개의 메인 실행은 완벽하게 작동하는 시스템을 산출 :서버 -에 본 : -
클라이언트에 조회 그래도 난 다른 시간대에 따라 서버를 시작하면 2016년 9월 30일 01.53.01
:
Server
:java -Duser.timezone=PST -cp rmi.jar Server
Client
:java -cp rmi.jar Client
난 아직도 얻을 : - : 2016년 9월 30일 01.53.01
서버 -에 조회 :
클라이언트에 조회 2016년 9월 30일 01.53.01
두 번째 줄에는 서버의 PST 기반
Timestamp
이 있어야합니다. 나는 깃발이 서버의 메인에 의해 직접 인쇄되도록함으로써 올바르게 설정되었는지를 확인했다. 실제로는 다르다 :2016.09.29 16.55. 현재
Document
가 서버에 사본 전달Timezone
는- 을 추가됩니다 : 지금까지 이해 한 내용을 원격 객체에 원격으로
addTimestamp()
메서드를 호출 할 때, 57
서버에 의해
Document
클래스- 의 인스턴스를 사용하여 반환 된
Document
은 클라이언트에 복사하여 전달합니다. Document
이 경우 클라이언트
으로 표시됩니다 나는 이렇게 Timezone
가 서버의 설정이 아닌 클라이언트를 기반으로 할 것으로 기대한다. 왜 이것이 사실이 아닌가?
Document.java :
public Document addTimestamp(Document document) throws RemoteException
{
String timestamp = new SimpleDateFormat("yyyy.MM.dd HH.mm.ss").format(new Date());
document.strings.add("Viewed on: "+timestamp);
return document;
}
DocumentInterface.java :
여기에 네 개의 클래스에서 일부 코드 조각은
public interface DocumentInterface extends Remote
{
public Document addTimestamp(Document document) throws RemoteException;
}
Server.java - main
:,
Registry registry = LocateRegistry.createRegistry(1099);
Document document = new Document();
Naming.bind("rmi:///Document", document);
Client.java-main
: 내 보낸 원격 객체가
Document document = new Document();
DocumentInterface remoteDocument;
try
{
remoteDocument = (DocumentInterface) Naming.lookup("rmi:///Document");
document.addString("USER - ");
document.addTimestamp(document);
document.addString("\n");
document.addString("SERVER - ");
document = remoteDocument.addTimestamp(document);
System.out.println(document.toString());
}
catch (Exception except)
{
}
addTimestamp 내에 시간을 인쇄하고 클라이언트 또는 서버 (인쇄 할 창에 따라)에서 실행되는지 여부를 확인할 수 있습니까? – immibis
클라이언트의 창에 인쇄됩니다! 왜 그런가요? – Gliptal
클라이언트에서 실행 중이기 때문입니다. 자, 왜 * 클라이언트에서 실행 중인지 모르겠습니다 ... – immibis