Java Spaces Exemplos Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 1
Autoria! Autores! Local " Cláudio Geyer " Instituto de Informática " UFRGS " disciplina: Programação com Objetos Distribuídos " versão: # V7, abril 2011 Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 2
Endereços Java Spaces! Endereços " exemplos desenvolvido no II-UFRGS # http://www.inf.ufrgs.br/procpar/disc/cmp167/trabalhos/ sem2000-1/t2/betemps_saito/ # http://www.inf.ufrgs.br/procpar/disc/cmp167/trabalhos/ sem2000-1/t2/eustaquio_rabelo/ # http://www.inf.ufrgs.br/procpar/disc/cmp167/trabalhos/ sem2000-1/t1/soares/ # http://www.inf.ufrgs.br/procpar/disc/inf01008/trabalhos/ sem01-1/t2/pagina/ # comparação de desempenho: Jada X JavaSpaces Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 3
Endereços Java Spaces! Endereços " tutorial (dicas) no II-UFRGS # http://www.inf.ufrgs.br/procpar/disc/cmp167/trabalhos/ sem2000-1/tutorial/jini-init/index.html # http://www.inf.ufrgs.br/procpar/disc/cmp167/trabalhos/ sem2001-1/tutorial/tutorial_javaspaces/index.htm " transações e JS # http://www.inf.ufrgs.br/procpar/disc/cmp167/trabalhos/ sem2000-1/t2/sawicki/ Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 4
Hello World! Exemplos Hello World " fonte # Freeman, E. et alli. JavaSpaces Principles, Patterns and Practice. Addison-Wesley, 1999. # capítulo 1 " especificação # 1a versão: 1 cliente do JS escreve e lê # 2a versão: # 1 cliente escreve e lê continuamente # N clientes retiram (lêem), incrementam contador e escrevem, continuamente Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 5
Hello World 1! Hello World com 1 cliente " // exemplo Hello World 1 do livro Freeman. JS // pacote exemplos.capítulo package jsbook.chapter1.helloworld; // pacote de classes entry do jini import net.jini.core.entry.entry; Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 6
Hello World 1 " // classe Message - entrada do JS // implementa a interface Entry public class Message implements Entry { // atributos de entradas: sempre públicos public String content; public Message() { Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 7
Hello World 1! Hello World com 1 cliente " package jsbook.chapter1.helloworld; // pacote com abstração da criação de 1 JS import jsbook.util.spaceaccessor; import net.jini.core.lease.lease; import net.jini.space.javaspace; public class HelloWorld { public static void main(string[] args) { try { // criação de uma entrada Message Message msg = new Message(); msg.content = "Hello World"; Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 8
Hello World 1 " // cria/acessa 1 JS (via pacote auxiliar) JavaSpace space = SpaceAccessor.getSpace(); // escreve 1 entrada Message; arg. null: transação space.write(msg, null, Lease.FOREVER); // cria um template: entrada do mesmo tipo Message Message template = new Message(); Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 9
Hello World 1 " // lê a entrada da JS usando o template para busca Message result = (Message)space.read(template, null, Long.MAX_VALUE); System.out.println(result.content); catch (Exception e) { e.printstacktrace(); Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 10
Hello World 1! Hello World com 1 cliente " observações # Lease.FOREVER # constante da classe Lease # indica que entrada permanecerá para sempre # até ser retirada por take # Long.MAXVALUE # indica que o read esperará indefinidamente Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 11
Hello World 2! Hello World 2 " 1 cliente observador e N clientes atualizadores " // classe entrada: com métodos package jsbook.chapter1.helloworldtwo; import net.jini.core.entry.entry; public class Message implements Entry { public String content; // contador de escritas de entradas Message public Integer counter; public Message() { Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 12
Hello World 2 " // continuação // construtor com argumentos de inicialização public Message(String content, int initval) { this.content = content; counter = new Integer(initVal); // método para retornar todos dados em 1 string public String tostring() { return content + " read " + counter + " times."; // método para incrementar contador public void increment() { counter = new Integer(counter.intValue() + 1); Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 13
Hello World 2! Hello World 2 " // classe cliente observador // grava 1a mensagem // loop infinito: lê e imprime package jsbook.chapter1.helloworldtwo; import jsbook.util.spaceaccessor; import net.jini.core.lease.lease; import net.jini.space.javaspace; Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 14
Hello World 2 " public class HelloWorld { public static void main(string[] args) { try { // cria entrada, acessa JS e inclui entrada Message msg = new Message("Hello World", 0); JavaSpace space = SpaceAccessor.getSpace(); space.write(msg, null, Lease.FOREVER); Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 15
Hello World 2 " // continuação Message template = new Message(); // loop infinito para observar for (;;) { Message result = (Message) space.read(template, null, Long.MAX_VALUE); // imprime entrada: string e contador System.out.println(result); Thread.sleep(1000); catch (Exception e) { e.printstacktrace(); Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 16
Hello World 2! Hello World 2 " // classe cliente atualizador // loop infinito: retira, incrementa e grava package jsbook.chapter1.helloworldtwo; import jsbook.util.spaceaccessor; import net.jini.core.lease.lease; import net.jini.space.javaspace; public class HelloWorldClient { public static void main(string[] args) { try { JavaSpace space = SpaceAccessor.getSpace(); Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 17
Hello World 2 " // cria entrada template Message template = new Message(); for (;;) { // retira entrada Message result = (Message) space.take(template, null, Long.MAX_VALUE); // incrementa contador (localmente) result.increment(); // regrava entrada space.write(result, null, Lease.FOREVER); Thread.sleep(1000); catch (Exception e) { e.printstacktrace(); Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 18
! Hello World 2 Hello World 2 " exercício 1 # considerando um cliente HelloWorld (observador) e vários (5 por exemplo) clientes HelloWorldClient (lêem e escrevem), indique uma possível seqüência de impressões " exercício 2 # compare essa solução com uma outra arquitetura C/S usando RMI # servidor HelloWorld # 1 cliente observador # N clientes atualizadores # simplicidade, legibilidade, sincronização,... # complexidade: quantidade de mensagens: unidirecionais ou RPC Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 19
Java Spaces Exemplos Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 20