как RMI работает с заглушкой - PullRequest
0 голосов
/ 04 июня 2011

Кто-нибудь может объяснить, как следующий код rmi работает без заглушки

ReceiveMessageInterface.java

import java.rmi.*;

public interface ReceiveMessageInterface extends Remote{

  void receiveMessage(String x) throws RemoteException;

}

RmiServer.java

import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
import java.net.*;

public class RmiServer extends 
  java.rmi.server.UnicastRemoteObject implements ReceiveMessageInterface{
  String address;
  Registry registry; 

  public void receiveMessage(String x) throws RemoteException{
  System.out.println(x);
  }

  public RmiServer() throws RemoteException{
  try{  
  address = (InetAddress.getLocalHost()).toString();
  }
  catch(Exception e){
  System.out.println("can't get inet address.");
  }
  int port=3232; 
  System.out.println("this address=" + address +  ",port=" + port);
  try{
  registry = LocateRegistry.createRegistry(port);
  registry.rebind("rmiServer", this);
  }
  catch(RemoteException e){
  System.out.println("remote exception"+ e);
  }
  }
  static public void main(String args[]){
  try{
  RmiServer server = new RmiServer();
  }
  catch (Exception e){
  e.printStackTrace();
  System.exit(1);
  }
  }
}

RMIClient.java

import java.rmi.*;
import java.rmi.registry.*;
import java.net.*;

public class RmiClient{
  static public void main(String args[]){
  ReceiveMessageInterface rmiServer;
  Registry registry;
  String serverAddress=args[0];
  String serverPort=args[1];
  String text=args[2];
  System.out.println
   ("sending " + text + " to " +serverAddress + ":" + serverPort);
  try{
  registry=LocateRegistry.getRegistry
  (serverAddress,(new Integer(serverPort)).intValue());
  rmiServer=(ReceiveMessageInterface)(registry.lookup("rmiServer"));
  // call the remote method
  rmiServer.receiveMessage(text);
  }
  catch(RemoteException e){
  e.printStackTrace();
  }
  catch(NotBoundException e){
  System.err.println(e);
  }
  }
} 

Ответы [ 2 ]

0 голосов
/ 05 июня 2011

Все, что вам нужно сделать, это указать параметр номера порта, даже 0, при создании или экспорте.Просто добавьте super (0) в конструктор в приведенном выше коде.

0 голосов
/ 04 июня 2011

Использует java.reflect.Proxy для синтеза реализации интерфейса во время выполнения

...