我正在搜索使用java rmi,但我发现有些代码令人困惑:
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);
}
}
但参数" new HelloServiceImpl()"只是一个原始对象瞬间。它不是一个存根!这段代码如何将存根重新绑定到注册表? 正如我们在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 :(得分:0)
将导出的远程对象作为RMI参数或结果传递,而不是传递存根。这是自动的。