Java Spaces Eventos Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 1
Autoria Autores Local Cláudio Geyer Instituto de Informática UFRGS disciplina: Programação com Objetos Distribuídos Versão V5, Abril 2011 Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 2
Eventos Eventos Um cliente recebe notificação de forma assíncrona a cada inclusão de uma entrada (write) no JS Pode ser usado como um read assíncrono Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 3
Diagrama de Eventos Diagrama de eventos notificação A regevent notify(entry, transaction, listener, lease1, handback) JavaSpace escritor B space.write(msg, transaction, lease2) listener A notify(theevent) Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 4
Diagrama de Eventos Fluxo geral (diagrama) Cliente A registra um pedido de notificação de eventos de escrita (write) Indica o tipo de entrada Pelo método notify Outros clientes (B) escrevem com aquele tipo especificado Por write No mesmo JS do registro -> implica 1 registro por JS Cliente A recebe uma notificação para cada escrita Por chamada automática a um método notify De um objeto listener Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 5
Classes envolvidas Classes e objetos envolvidos Registro de notificação Objeto retornado pelo JS a um pedido de notificação pelo cliente Um cliente pode pedir várias notificações Objeto ouvidor Recebe as notificações Objeto evento Recebido pelo ouvidor a cada notificação de uma escrita (write) Outros tipos de objetos da API Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 6
API de eventos API de eventos pedido de notificação de eventos EventRegistry notify(entry tmpl, Transaction txn, RemoteEventListener listener, long lease, MashalledObject handback) throws RemoteException, TransactionException; tmpl: template de entradas escritas no JS que devem gerar notificação Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 7
API de eventos API de eventos pedido de notificação de eventos listener: objeto que receberá a notificação de cada escrita via método notify do listener deve implementar a interface RemoteEventListener lease: até quando as escritas deverão ser notificadas gerenciado no JS handback: objeto único passado ao listener a cada notificação pode ser usado por cada aplicação como um ID de notificação em nível de aplicação Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 8
API de eventos API de eventos classe registro da notificação define objeto retornado pelo pedido de registro public class EventRegistration implements java.io.serializable { public long getid(); public Object getsource(); public long getsequencenumber(); public Lease getlease(); } getid(): retorna uma identificação do registro getsource(): retorna a fonte dos eventos no caso será sempre JavaSpaces Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 9
API de eventos API de eventos classe registro da notificação (cont.)... public class EventRegistration implements java.io.serializable { public long getid(); public Object getsource(); public long getsequencenumber(); public Lease getlease(); }... getsequencenumber(): retorna um número inicial para os eventos gerados para esse registro getlease: retorna o tempo de validade desse registro Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 10
API de eventos API de eventos interface RemoteEventListener para ouvidores public interface RemoteEventListener extends Remote, java.util.eventlistener { void notify(remoteevent theevent) throws UnknownEventException, RemoteException; } toda classe de ouvidores deve implementar essa interface Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 11
API de eventos API de eventos objeto evento public class RemoteEvent extends EventObject { public long getid(); public Object getsource(); public long getsequencenumber(); public MarshalledObject getregistrationobject(); } getid(): retorna uma identificação do registro A mesma retornada quando do registro getsource(): retorna a fonte dos eventos no caso será sempre JavaSpaces Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 12
API de eventos API de eventos objeto evento getsequencenumber(): retorna um número seqüencial de evento Por registro getregistrationobject(): retorna o objeto passado no registro: handback Confunde-se com a identificação do registro mas agora gerenciada pela aplicação Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 13
Resumo Resumo Eventos permitem recebimento assíncrono de avisos de escritas Cliente A pede para ser notificado de escritas Fornece entrada exemplo Cliente B escreve uma entrada compatível com exemplo JS chama método notify no cliente A Objetos de controle como número de ordem de avisos ID (aplicação) para cada pedido de notificação Opções Tempo limite para escritas gerarem avisos Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 14
Exercícios Exercícios 1) reescreva o exemplo HelloWorld 1 (com JavaSpaces) use eventos Vantagens? 2) idem exemplo HelloWorld 2 3) usando RMI, desenhe um sistema de eventos similar ao do JS Classes, objetos, métodos, nomeações e referências,... Obs.: somente eventos, não um JS completo Programação com Objetos Distribuídos (C. Geyer) JavaSpaces - Eventos V0 15