Problemas RMI

Pessoal, estou tentando aprender RMI, e seguindo os exemplos do tutorial do Jeveaux aqui do portal, tive o seguinte erro:

java.rmi.NotBoundException: HelloServer
at sun.rmi.registry.RegistryImpl.lookup(RegistryImpl.java:106)
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:375)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Unknown Source)
at HelloClient.<init>(HelloClient.java:29)
at HelloClient.main(HelloClient.java:36)

o meu HelloClient não é um applet, como no exemplo… fiz ele da seguinte maneira:

Hello h = (Hello)Naming.lookup(“rmi://localhost/HelloServer”);
mensagem = h.say();
System.out.println("recebeu mensagem: "+mensagem);

o que estou fazendo errado?

Olá,

No servidor você deve colocar algum objeto neste endereço. Acho que o problema é isso.

Seria algo ± assim:

public static void main&#40;String&#91;&#93; args&#41; &#123;
        if &#40;System.getSecurityManager&#40;&#41; == null&#41; &#123;
            System.setSecurityManager&#40;new RMISecurityManager&#40;&#41;&#41;;
        &#125;
        String name = &quot;//localhost/HelloServer&quot;;
        try &#123;
            HelloServer hl = new HelloServer&#40;&#41;
            LocateRegistry.createRegistry&#40;1099&#41;; // Aqui coloca a porta padrão do rmi, não sei se é essa mesmo, mas acho que é
            Naming.rebind&#40;name, hl&#41;;
            System.out.println&#40;&quot;ComputeEngine bound&quot;&#41;;
        &#125; catch &#40;Exception e&#41; &#123;
            System.err.println&#40;&quot;ComputeEngine exception&#58; &quot; + 
			       e.getMessage&#40;&#41;&#41;;
            e.printStackTrace&#40;&#41;;
        &#125;
    &#125;

utilizando essa linha LocateRegistry.createRegistry(1099), tive o seguinte erro:

java.rmi.server.ExportException: Port already in use: 1099; nested exception is:
java.net.BindException: Address already in use: JVM_Bind
at sun.rmi.transport.tcp.TCPTransport.listen(Unknown Source)

sem usar essa linha, aparece:

java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)

será alguma coisa refente a permissoes no windows? o codigo do meu server ficou assim:

if (System.getSecurityManager()==null) {
System.setSecurityManager(new RMISecurityManager());
}
LocateRegistry.createRegistry(1099);
Naming.rebind (“Hello”, new Hello (“Hello, world!”));
System. out.println (“Hello Servidor está funcionando”);
}
catch (Exception e) {
e.printStackTrace();
}
}

notei outro detalhe… quando invoco rmic sobre minha classe de implementação, ele não cria a classe skeleton… pode ter algo a ver?

ei, pessoal… help, please…

se alguem tiver algum exemplo q funcione tb, eu ficaria muito grato…

ola, sempre uso este exemplo pra tirar dúvidas simples.

valeu… esse funcionou…

outro problema q enfrento eh qdo executo rmic nas classes… ele sempre reclama de class not found, mesmo que eu esteja no diretorio certo, com todas as classes no mesmo diretorio, com variavel de ambiente CLASSPATH e PATH setadas… as vees funciona, num sei como, mas funciona… alguem sabe me dizer pq?

você deve estar tentando usar assim:

rmic com/mypackage/stubclass

se for ele dá erro, vc tem que usar assim, separados por “.”:

rmic com.mypackage.stubclass

ok, mas eu tenho q estar posicionado no diretorio onde esta a classe ou no diretorio onde começa a estrutura do pacote pra executar dessa maneira?

vc tem que estar posicionado na raiz, onde comeca a estrutura.

vou tentar então… muito obrigado por enquanto