SOCKET x RMI EXEMPLO - super gestor sistemas

Propaganda
SOCKET x RMI
O SOCKET é simplesmente um canal de comunicação entre duas máquinas. Ele faz com que você consiga chamar
métodos de uma máquina em outra, praticamente como se os objetos estivessem na mesma máquina. O RMI usa o
socket como canal de comunicação.
O RMI é uma facilidade que permite a programas escritos em Java chamar certos métodos em um servidor remoto. A
interface RMI permite que objetos Java em hosts diferentes comuniquem-se entre si. Cada objeto remoto implementa
uma interface remota que especifica quais de seus métodos podem ser invocados pelos clientes. Os clientes podem
invocar métodos de um objeto remoto quase exatamente da mesma maneira que eles invocam métodos locais.
EXEMPLO - RMI
Diagrama de Classe
Funcionamento
1- Copiar os arquivos das classes na pasta Bin do JDK, exemplo: C:\Program Files\Java\jdk1.7.0\bin
- Mensageiro.java
“interface que extends Remote”
- MensageiroImpl.java
“extends a classe UnicastRemoteObject linkando com o sistema RMI”
- MensageiroServer.java
“disponibiliza o serviço em um endereço e porta”
- MensageiroCliente.java
2- Compilar as classes
- javac Mensageiro.java
- javac MensageiroImpl.java
- javac MensageiroServer.java
- javac MensageiroCliente.java
3- Criar “Stubs e Skeletons”: Mensageiro_Stub.class e Mensageiro_Skeleton.class
- rmic MensageiroImpl
4- Abrir 3 consoles do MS-DOS e execute os respectivos comandos
- rmiregistry
- java MensageiroServer
- java MensageiroClient
Código
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public interface Mensageiro extends Remote {
public class MensageiroImpl extends UnicastRemoteObject implements Mensageiro {
public void enviarMensagem( String msg ) throws RemoteException;
public String lerMensagem() throws RemoteException;
public MensageiroImpl() throws RemoteException {
super();
}
}
public void enviarMensagem( String msg ) throws RemoteException {
System.out.println( msg );
}
public String lerMensagem() throws RemoteException {
return "This is not a Hello World! message";
}
}
import java.rmi.Naming;
public class MensageiroServer {
public MensageiroServer() {
try {
Mensageiro m = new MensageiroImpl();
Naming.rebind("rmi://localhost:1099/MensageiroService", m);
}
catch( Exception e ) {
System.out.println( "Trouble: " + e );
}
}
public static void main(String[] args) {
new MensageiroServer();
}
}
import
import
import
import
java.rmi.Naming;
java.rmi.RemoteException;
java.rmi.NotBoundException;
java.net.MalformedURLException;
public class MensageiroCliente{
public static void main( String args[] ) {
try {
Mensageiro m = (Mensageiro) Naming.lookup("rmi://localhost/MensageiroService" );
System.out.println( m.lerMensagem() );
m.enviarMensagem( "Hello World!" );
}
catch( MalformedURLException e ) {
System.out.println();
System.out.println( "MalformedURLException: " + e.toString() );
}
catch( RemoteException e ) {
System.out.println();
System.out.println( "RemoteException: " + e.toString() );
}
catch( NotBoundException e ) {
System.out.println();
System.out.println( "NotBoundException: " + e.toString() );
}
catch( Exception e ) {
System.out.println();
System.out.println( "Exception: " + e.toString() );
}
}
}
Download