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]
---------------------------------------------------------------------