Bom dia galera,
Antes de mais nada, gostaria de parabenizar o fórum, já tirei muitas dúvidas aqui.
Está é primeira postagem que faço, pois até hoje, todas as dúvidas que tinha, consegui resolve-lás somente pesquisando aqui.
Bom, vamos ao que interessa.
Seguinte, estou desenvolvendo um aplicativo no qual terei que usar o RMI.
Comecei a estudar sobre o assunto e fazer alguns testes.
Dos testes feitos, alguns funcionaram perfeitamente, porém sem segurança.
Aí resolvi dar um UP no exemplo e tentar implementar RMI em meu projeto.
Porém comecei a ter algumas dificuldades e agora estou preso.
Alguém poderia me ajudar. Segue abaixo minhas classes.
//Essa é a classe Servidor
package gerenciadorfila.servicoremoto;
import java.util.Date;
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
public class Server extends UnicastRemoteObject implements Hello {
public Server() throws RemoteException {
}
public Date getDate() throws RemoteException {
return new Date();
}
public static void main(String args[]) {
Server cal;
System.getProperties().put("java.security.policy", "file:/D:/Workspace/policy");
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
try {
cal = new Server();
Registry registry = LocateRegistry.createRegistry(1099);
registry.rebind("Server", cal);
System.out.println("Ready !");
} catch (Exception e) {
e.printStackTrace();
}
}
public String getString() throws RemoteException {
return "teste";
}
}
// Essa é a classe Cliente
import java.net.MalformedURLException;
import java.util.Date;
import java.rmi.*;
public class Client {
// constructor
public Client() {
}
public static void main(String args[]) {
long t1 = 0, t2 = 0;
Date date;
Hello remoteCal;
String teste = "vazio";
System.getProperties().put("java.security.policy", "file:/D:/Workspace/policy");
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
try {
String[] list = Naming.list("rmi://localhost/");
for (int i = 0; i < list.length; i++) {
System.out.println(list[i]);
}
remoteCal = ((Hello) Naming.lookup("//localhost:1099/Server"));
t1 = remoteCal.getDate().getTime();
Thread.sleep(20);
t2 = remoteCal.getDate().getTime();
teste = remoteCal.getString();
} catch (InterruptedException e) {
System.out.println("ie");
System.out.println(e);
} catch (MalformedURLException e) {
System.out.println("mue");
System.out.println(e);
} catch (NotBoundException e) {
System.out.println("nbe: " + e.getMessage());
System.out.println(e);
} catch (RemoteException e) {
System.out.println("re");
System.out.println(e);
}
System.out.println("This RMI call took" + (t2 - t1) + " milliseconds");
System.out.println(teste);
} // main
} // class CalendarUser
//E essa é minha interface
import java.rmi.*;
public interface Hello extends Remote {
java.util.Date getDate() throws RemoteException;
String getString() throws RemoteException;
}
Bom, as dificuldades que estou encontrando é:
1 - Na hora de compilar o código, não sei como passar os parametros para o java.
Então para rodar o código, estou rodando direto do netbeans.
2 - O servidor está rodando tranquilo, porém quando vou rodar o cliente ele me retorna um remoteexception.
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: gerenciadorfila.servicoremoto.Hello
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Naming.java:84)
at Client.main(Client.java:30)
Caused by: java.lang.ClassNotFoundException: gerenciadorfila.servicoremoto.Hello
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:711)
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:655)
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:592)
at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
This RMI call took0 milliseconds
vazio
at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1530)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1492)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
Então é isso pessoal. Espero que me ajudem, pois estou precisando muito disso.
Estou a + ou - 2 ou 3 dias pesquisando no guj, javafree e em outros sites especializados em java e não consigo resolver meu problema.
Desde já agradeço à todos.
Atenciosamente,
Rafael Souza e Silva.