2015-06-02 1 views
0

Я ищу на использовании Java RMI, но я нашел некоторый код в заблуждение, как это:В Java RMI Naming.rebind (url, obj), каков параметр obj?

public class RmiServer{ 
public static void main(String[] args) throws Exception 
{ 
    int port = 1099; 
    String url = "rmi://localhost:1099/HelloServiceImpl"; 
    LocateRegistry.createRegistry(port); 
    Naming.rebind(url, new HelloServiceImpl()); 
    System.out.println("already create remote service:" + url); 
} 
} 

Но параметр «новый HelloServiceImpl()» это просто оригинальный объект instantce .Это не заглушки! Как этот код может перекрыть заглушку в реестр? Как мы можем видеть в Name.rebind:

public static void rebind(String name, Remote obj) 
    throws RemoteException, java.net.MalformedURLException 
{ 
    ParsedNamingURL parsed = parseURL(name); 
    Registry registry = getRegistry(parsed); 

    if (obj == null) 
     throw new NullPointerException("cannot bind to null"); 

    registry.rebind(parsed.name, obj); 
} 

Он передает OBJ в реестр не окурок! Может ли кто-нибудь помочь мне получить ответ?

К слову, HelloServiceImpl так:

public class HelloServiceImpl extends UnicastRemoteObject implements  HelloService 
{ 

public HelloServiceImpl() throws RemoteException 
{ 
} 

@Override 
public String sayHello(String name) throws RemoteException 
{ 
    return String.format("Hello %s", name); 
} 
} 
+0

Не комментируйте код. Вы должны быть в состоянии сами убедиться, что это совершенно неразборчиво. Измените это на свой вопрос. – EJP

ответ

0

Передача экспортированной удаленный объект в качестве параметра RMI или результата передает заглушки вместо этого. Это автоматически.

+0

Я просто прав, как это может быть автоматическим .... – Masterwind

+0

Это делается автоматически, расширяя 'ObjectOutputStream' и переопределяя' writeReplace(). ' – EJP

+0

Ну, это получилось! С уважением, спасибо за ваши отличные ответы! – Masterwind