Caros Amigos,

Esta pode ser uma pergunta idiota, mas antes tirar a dúvida a permanecer
calado.
É possível implementar RMI em apenas em 1 computador?  O Server e o
Client no mesmo computador?

Comecei a estudar apartir do tutorial da sun, e estou tentando rodar um
exemplo e estou tendo problemas, no tutorial relata que somente com
essas quatro classes é possível rodar um exemplo..
Os códigos que estamos utilizando são esses, em um único computador.

Temos as classes:
public interface Calculator extends java.rmi.Remote
{
   public long add(long a, long b) throws java.rmi.RemoteException;
   public long sub(long a, long b) throws java.rmi.RemoteException;
   public long mul(long a, long b) throws java.rmi.RemoteException;
   public long div(long a, long b) throws java.rmi.RemoteException;
}
-------------------------
public class CalculatorImpl extends java.rmi.server.UnicastRemoteObject
implements Calculator
{
  public CalculatorImpl() throws java.rmi.RemoteException {
    super();
  }
  public long add(long a, long b) throws java.rmi.RemoteException {
    return a + b;
  }
  public long sub(long a, long b) throws java.rmi.RemoteException {
    return a - b;
  }
  public long mul(long a, long b) throws java.rmi.RemoteException {
    return a * b;
  }
  public long div(long a, long b) throws java.rmi.RemoteException {
    return a / b;
  }
}
---------------------------
import java.rmi.Naming;

public class CalculatorServer
{
   public CalculatorServer() {
     try {
          Calculator c = new CalculatorImpl();
          Naming.rebind("rmi://localhost:1099/CalculatorService",c);
     }
     catch (Exception e) {
          System.out.println("Trouble: " + e);
     }
   }

   public static void main(String args[]) {
       new CalculatorServer();
   }
}
---------------------------------------
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;

public class CalculatorClient
{
   public static void main(String[] args) {
     try {
           Calculator c = (Calculator)
           Naming.lookup("rmi://remotehost/CalculatorService");
           System.out.println( c.sub(4, 3) );
           System.out.println( c.add(4, 5) );
           System.out.println( c.mul(3, 6) );
           System.out.println( c.div(9, 3) );
     }
     catch (MalformedURLException murle) {
           System.out.println();
           System.out.println("MalformedURLException");
           System.out.println(murle);
     }
     catch (RemoteException re) {
           System.out.println();
           System.out.println("RemoteException");
           System.out.println(re);
     }
     catch (NotBoundException nbe) {
           System.out.println();
           System.out.println("NotBoundException");
           System.out.println(nbe);
     }
     catch (java.lang.ArithmeticException ae) {
           System.out.println();
           System.out.println("java.lang.ArithmeticException");
           System.out.println(ae);
     }
   }
}

São compilas as classes, criei as camadas Stub e Esqueleto apartir da
linha de comando (rmic CalculatorImpl), até aí tudo bem.
O problema começa quando tento executar o rmiregistry mas uma excecao é
gerada:

java.rmi.server.ExportException: Listen failed on port: 1099; nested
exception is:
java.net.SocketException: Option unsupported by protocol: create
java.net.SocketException: Option unsupported by protocol: create
        at java.net.PlainSocketImpl.socketCreate(Native Method)
        at java.net.PlainSocketImpl.create(PlainSocketImpl.java:70)
        at java.net.ServerSocket.<init>(ServerSocket.java:170)
        at java.net.ServerSocket.<init>(ServerSocket.java:86)
        at
sun.rmi.transport.proxy.RMIDirectSocketFactory.createServerSocket(RMI
DirectSocketFactory.java:34)
        at
sun.rmi.transport.proxy.RMIMasterSocketFactory.createServerSocket(RMI
MasterSocketFactory.java:316)
        at
sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:550)
        at
sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:202)
        at
sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:174)
        at
sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:323)
        at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:123)
        at
sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:118)
        at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:99)
        at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:85)
        at sun.rmi.registry.RegistryImpl.main(RegistryImpl.java:315)

Alguém sabe me dizer o que está errado?
Obrigado.

    --------------------------- LISTA SOUJAVA ---------------------------
    http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
    [dúvidas mais comuns: http://www.soujava.org.br/faq.htm]
    [para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
    ---------------------------------------------------------------------

Responder a