Olá, estou aprendendo RMI e seguindo o livro Use a Cabeça Java deu um erro mesmo fazendo exatamente igual ao livro. Agradeço qualquer ajuda pra entender isso.
Seguem os passos:
Terminal 1 Gerando os .class da interface e implementação
C:\Java>javac MyRemote.java
C:\Java>javac MyRemoteImpl.java
C:\Java>rmic MyRemoteImpl
OBS: só gera MyRemoteImpl_Stub.class e segundo o livro esse comando deveria gerar também MyRemoteImpl_Skel.class
Terminal 2
C:\Java>rmiregistry --> inicia o registro do RMI
Terminal 1
C:\Java>java MyRemoteImpl
[color=red]java.net.MalformedURLException: invalid URL String: Remote Hello
at java.rmi.Naming.parseURL(Unknown Source)
at java.rmi.Naming.rebind(Unknown Source)
at MyRemoteImpl.main(MyRemoteImpl.java:19)
Caused by: java.net.URISyntaxException: Illegal character in path at index 6: Re
mote Hello
at java.net.URI$Parser.fail(Unknown Source)
at java.net.URI$Parser.checkChars(Unknown Source)
at java.net.URI$Parser.parseHierarchical(Unknown Source)
at java.net.URI$Parser.parse(Unknown Source)
at java.net.URI.
at java.rmi.Naming.intParseURL(Unknown Source)
... 3 more[/color]
Seguem os códigos:
//Exercício pág. 429 livro Use a Cabeça Java. Explicações na pág. 427
import java.rmi.*;
public interface MyRemote extends Remote{
public String sayHello() throws RemoteException;
}
//Exercício pág. 429 livro Use a Cabeça Java.
import java.rmi.*;
import java.rmi.server.*;
public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote{
/**A classe UnicastRemoteObject declara a exceção RemoteException, então,
* a classe que a estende deve ter um construtor que lança esse tipo de exceção*/
public MyRemoteImpl() throws RemoteException{
}
public String sayHello(){
return "Server says, ´Hey´";
}
public static void main(String[] args){
try{
MyRemote service = new MyRemoteImpl();//instancia o serviço remoto
Naming.rebind("Remote Hello", service);//registra o serviço remoto no RMI
}catch (Exception e) {
e.printStackTrace();
}
}
}
import java.rmi.*;
public class MyRemoteClient {
public static void main (String[] args){
new MyRemoteClient().go;
}
public void go(){
try{
MyRemote service = (MyRemote) Naming.lookup("rmi://999.999.999.999/RemoteHello");
String s = service.sayHello();
System.out.println(s);
}catch(Exception ex){
ex.printStackTrace();
}
}
}