T. D. S. I. PARA WEB Prof. Emmanuel Nolêto. Java RMI.

Slides:



Advertisements
Apresentações semelhantes
|Introdução a Java para programadores Telis. Jogo de Dados simples O jogo é jogado por dois jogadores. Cada jogador faz sua jogada (lança um dado), e.
Advertisements

Sistemas Operacionais II N Aula prática Java Sockets, RPC e RMI Eduardo Bezerra.
Sistemas distribuídos
Reflexão Marco Antonio Arquiteto de Software Novembro/2007.
Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007.
Marco A. S. Reis EJB Acesso Remoto Marco A. S. Reis
Comunicação entre processos distribuídos
Programa de Pós-Graduação Lato Sensu MBA em Gestão de Software
RMI-IIOP.
PRDS - Programa de Residência em Desenvolvimento de Software Laboratório de Engenharia de Software (LES) da PUC-Rio Carlos Lucena
Java RMI Alcides Calsavara. Objetivos Permitir que um método de uma classe Java em execução em uma máquina virtual JVM chame um método de um objeto (instância.
Java RMI Alcides Calsavara. Objetivos Permitir que um método de uma classe Java em execução em uma máquina virtual JVM chame um método de um objeto (instância.
Comunicação Distribuída
Desenvolvimento de Aplicações Distribuídas
Invocação de Métodos Remotos RMI
1 Arquitetura CORBA Repositório de Implementação Repositório de Interface cliente programa cliente proxy ORB Core ou invocação dinâmica servidor ORB Core.
PROGRAMAÇÃO DISTRIBUÍDA EM JAVA Verão/2001
JAVA ENUMS © 2009 by Jorge L. de Souza Leão março de 2009 PEE - COPPE/UFRJ.
Estrutura de Dados em Java
Introdução à Programação Distribuída em Java
JAVA: Conceitos Iniciais
Concorrência em Java Threads em Java.
Introdução a linguagem Python
Unidade I: “Dê um mergulho rápido”
Capítulo 2 Java Servlets.
JAVA Linguagem Ambiente de Desenvolvimento
Arquitetura CORBA e Objetos Distribuídos
Chamada Remota de Procedimentos
Linguagem de Programação JAVA
Java Avançado Luiz Carlos d´Oleron SJCP Java Sockets.
Desenvolvimento de Aplicações CORBA
Sistemas Distribuídos Carlos A. G. Ferraz DI/UFPE Aula 07.
Remote Method Invocation RMI
Concorrência e Java RMI
Objetos Distribuídos Nazareno Andrade.
Pilhas Profa. Nádia Félix.
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa This.
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa Tutorial de Utilização.
Tecgraf PUC-Rio maio de 2011 Principais conceitos de CORBA.
Afinal, o que é um SD? Ospróximospróximosslidesdeverãoserserexecutadosum servidor,executadosum servidor, continuamente para criarmos um cliente e ambos.
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
Paradigmas da Programação – Semestre 1 – Aula 10 Professor: Eduardo Mantovani )
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
SessionBeans Marco Antonio Arquiteto de Software.
Laboratório I Mateus Raeder Material baseado nos originais da Profa. Denise Bandeira.
Tratamento de Exceções
Java RMI João Gabriel (jggxm).
RMI - JAVA.
Java Kickstart, day 2 Semelhanças com linguagem C.
Coleções, Genéricos, Threads Marco Antonio. Collection Principais métodos da interface Collection.
Classes Abstratas e Interface
Exceções Suzana Fragoso (smpf) Adaptado do material de Guilherme Carvalho (gvc)
Objetos Distribuídos para WEB Prof. Paulo Fernando da Silva FURB – Universidade Regional de Blumenau Pós-Graduação em Desenvolvimento WEB.
JAVA Sintaxe.
Introdução JAVA Faculdade Mauricio de Nassau
RMI (Remote Method Invocation) Bruno Edson Plínio Tadeu
RMI Objetos Distribuídos Luiz C. D´oleron SCJP
Java Conexão com Baco de dados Saulo Bazzi Oberderfer Fonte:
Socket em Java.
Java – Remote Method Invocation (RMI)
Programação Distribuída em Java Aula Na aula passada vimos: I/O Streams Filtros Readers and Writers.
Chamada Remota de Procedimentos. Remote Procedure Call O fluxo de informações em uma implementação de clientes e servidores por passagem de mensagem requer.
Conceitos do Cliente Funcionamento Básico do Cliente Como Clientes acessam e usam Objetos Distribúidos.
RMI Remote Method Invocation
Sistemas Distribuídos Aula 07 – Programação Distribuída (Corba)
RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.
Sistemas Distribuídos Prof. Marcus Rodrigues
SOCKET - É um canal de comunicação entre processos que estabelece uma conexão entre eles na forma de cliente-servidor. Por meio de sockets, os computadores.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
Programação em Java RMI - Remote Method Invocation Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Transcrição da apresentação:

T. D. S. I. PARA WEB Prof. Emmanuel Nolêto

Java RMI

Objetivos Permitir que um método de uma classe Java em execução em uma máquina virtual JVM chame um método de um objeto (instância de uma classe Java) situado em outra máquina virtual JVM, usando a mesma sintaxe e com a mesma facilidade de se chamar um método local. Transparência de acesso e de localização.

Esquema geral JVM cliente método f da classe C em execução JVM servidor método g objeto da classe S chamada remota

Remote Method Invocation Facility to call methods remotely Similar to RPC - Remote Procedure Call High-level communication abstraction The RMI mechanism provides: control transfer between caller and called parameters cans be exchanged class definitions can be exchanged RMI support in Java provides: A specific API compilation support tools runtime support

General scenario Server Registry ClientStubSkeleton communication actual perceived get an object reference object reference is published naming service 2 1 3

Componentes em execução f de C g de S S_SkelS_Stub Socket Cliente Socket Servidor Naming Registry Socket Cliente Socket Servidor chamda remota de g clienteservidor main cria bind lookup

Hierarquia de classes e interfaces Interface Remote Classe UnicastRemoteObject Interface R assinatura de g Classe S implementação de g extends implements extends

Compilação S.java javac S.class rmic S_Skel.classS_Stub.class C.java javac C.class

Exemplo de RMI Definição das interfaces para os serviços remotos Implementações dos serviços remotos Arquivos de Stub e Skeletons Um servidor para hospedar os serviços remotos Um serviço de RMI Naming que permite o cliente achar os serviços remotos Um provedor de arquivos de classes (servidor http ou ftp) Um programa cliente que necessita os serviços remotos

Aplicativo com RMI Escrever e compilar o código Java da interface Escrever e compilar o código Java das implementações das classes Gerar as classes Stub e Skeleton das classes de implementação, criar um diretório para salvar todos os seus arquivos de projeto.

Interfaces import java.rmi.Remote; import java.rmi.RemoteException; public interface Mensageiro extends Remote { public void enviarMensagem( String msg ) throws RemoteException; public String lerMensagem() throws RemoteException; }

Interfaces O primeiro passo, como dito, será criar a interface e compilá-la. A interface define todas as funcionalidades remotas oferecidas pelo serviço. Nomeio o arquivo como: Mensageiro.java.

Interfaces Perceba que esta interface estende a classe Remote, e cada assinatura de método declara as funcionalidades do serviço, e que podem gerar uma exceção RemoteException. Salve este arquivo (Mensageiro.java) no seu diretório e compile, com a seguinte linha de comando: –javac Mensageiro.java

Implementação import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class MensageiroImpl extends UnicastRemoteObject implements Mensageiro { 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"; }

Implementação Agora, você deverá escrever a implementação para o serviço remoto, ou seja, o código a ser executado no ambiente remoto. Nomeia o arquivo como: MensageiroImpl.java. Salve este arquivo (MensageiroImpl.java) no seu diretório e compile, com a seguinte linha de comando: –javac MensageiroImpl.java

Implementação Observe que a classe se utiliza (estende) da classe UnicastRemoteObject para linkar com o sistema RMI. Neste exemplo a classe estende a classe UnicastRemoteObject diretamente. Isto não é realmente necessário, mas essa discusão fica para uma próxima etapa. Quando uma classe estende a classe UnicastRemoteObject, ele deve prover um construtor que declare que ele pode lançar uma exceção RemoteException, pois quando o método super( ) é chamado, ele ativa o código em UnicastRemoteObject, que executa o link RMI e a iniciação do objeto remoto. Stubs e Skeletons Gere os arquivos Stubs e Skeletons da classe de implementação que roda no servidor. Para tanto, execute o comando rmic, compilador RMI do JDK. –rmic MensageiroImpl

Implementação 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(); }

Implementação Salve este arquivo (MensageiroServer.java) no seu diretório e compile, com a seguinte linha de comando: > javac MensageiroServer.java Cliente –O código fonte para o cliente é o seguinte. Salve o arquivo como: MensageiroClient.java.

Implementação import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.NotBoundException; import java.net.MalformedURLException; public class MensageiroClient { 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();

Implementação 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() ); }

Implementação Salve este arquivo (MensageiroClient.java) no seu diretório e compile, com a seguinte linha de comando: –javac MensageiroClient.java

Rodando o sistema RMI Agora que todos os arquivos do projeto de exemplo foram criados e devidamente compilados, estamos prontos para rodar o sistema! Você precisará abrir três diferentes consoles do MS-DOS no seu Windows, ou outro, caso utilize um diferente sistema operacional. Em um dos consoles vai rodar o programa servidor, no outro o cliente e no terceiro o RMI Registry. Inicie com o RMI Registry. Você deve estar no mesmo diretório em que estão gravados seus arquivos para rodar o aplicativo. Execute a seguinte linha de comando: –rmiregistry

Rodando o sistema RMI Isso irá iniciar o RMI Registry e rodá-lo. No segundo console vamos executar o programa servidor. Você deve estar no mesmo diretório em que estão gravados seus arquivos para rodar o aplicativo. Execute o seguinte comando: –java MensageiroServer

Rodando o sistema RMI Isso irá iniciar, carregar a implementação na memória e esperar pela conexão cliente. No último console, rode o programa cliente. Você deve estar no mesmo diretório em que estão gravados seus arquivos para rodar o aplicativo. Excute o comando: –java MensageiroClient

Se tudo correr bem, que é o que esperamos e o que deveria acontecer, a seguinte saída será gerada nos consoles 2 (servidor) e 3 (cliente). No console 2 (servidor): –Hellow World! No console 3 (cliente): –This is not a Hello World! message Rodando o sistema RMI

Rodando sistema RMI É isso aí. Você acabou de criar um sistema utilizando a tecnologia RMI. Apesar de você ter rodado os programas na mesma máquina, o RMI usa a pilha de rede TCP/IP para se comunicar entre as três diferentes instâncias da JVM. Espero que tenham gostado e aprendido com esse pequeno exemplo de como se usar o RMI.