Descrição
Nessa aula será
apresentado um exemplo de utilização de memória compartilhada distribuída. Usaremos o JavaSpaces,
que é parte integrante da tecnologia Jini. Para executar a atividade
será empregada uma implementação gratuita e de código aberto do Jini, chamada
Apache River.
Roteiro
Efetue o
download do Apache River 2.2 e o instale no
seu computador, extraindo o conteúdo do arquivo em um diretório no qual você
possua permissão de escrita.
O código
da aplicação de exemplo encontra-se dentro da pasta de instalação do Apache
River, no diretório examples/space. Utilizaremos uma classe auxiliar para
conectar ao serviço JavaSpace, chamada Lookup.
Definindo o Formato das Mensagens
Os objetos
publicados no espaço de tuplas devem implementar a interface net.jini.core.entry.Entry.
A classe Message,
mostrada abaixo, contém apenas um atributo do tipo String, que
corresponde ao conteúdo da mensagem. Outros atributos e métodos podem ser
definidos quando necessário.
import net.jini.core.entry.Entry; public class Message implements Entry { public String content; public Message() { } }
Escrevendo no Espaço de Tuplas
A classe WriteMessage
permite que sejam digitadas mensagens que serão escritas no espaço de tuplas.
O tempo de vida das mensagens é de um minuto.
import net.jini.space.JavaSpace; import java.util.Scanner; public class WriteMessage { public static void main(String[] args) { try { System.out.println("Procurando pelo servico JavaSpace..."); Lookup finder = new Lookup(JavaSpace.class); JavaSpace space = (JavaSpace) finder.getService(); if (space == null) { System.out.println("Serviço JavaSpace nao encontrado. Encerrando..."); System.exit(-1); } System.out.println("O servico JavaSpace foi encontrado."); Scanner scanner = new Scanner(System.in); while (true) { System.out.print("Entre com o texto da mensagem (ENTER para sair): "); String message = scanner.nextLine(); if (message == null || message.equals("")) { System.exit(0); } Message msg = new Message(); msg.content = message; space.write(msg, null, 60 * 1000); } } catch (Exception e) { e.printStackTrace(); } } }
Lendo Mensagens do Espaço de Tuplas
A classe ReadMessage
remove mensagens escritas no espaço de tuplas e as imprime na tela. O tempo
de espera máximo é de um minuto.
import net.jini.space.JavaSpace; public class ReadMessage { public static void main(String[] args) { try { System.out.println("Procurando pelo servico JavaSpace..."); Lookup finder = new Lookup(JavaSpace.class); JavaSpace space = (JavaSpace) finder.getService(); if (space == null) { System.out.println("Servico JavaSpace nao encontrado. Encerrando..."); System.exit(-1); } System.out.println("O servico JavaSpace foi encontrado."); while (true) { Message template = new Message(); Message msg = (Message) space.take(template, null, 60 * 1000); if (msg == null) { System.out.println("Tempo de espera esgotado. Encerrando..."); System.exit(0); } System.out.println("Mensagem recebida: "+ msg.content); } } catch (Exception e) { e.printStackTrace(); } } }
Compilando e Executando a Aplicação
Primeiramente
você deve se certificar de que os serviços do Apache River estejam em
execução. Isso é feito executando os seguintes comandos a partir do diretório
de instalação do Apache River:
cd examples/space ./start-services.sh
Obs.: No Windows,
troque ‘/’ por ‘\’ e ‘.sh’ por ‘.bat’.
Caso
esteja usando uma IDE, adicione as seguintes bibliotecas ao projeto,
contidas na pasta ‘lib’ do diretório de instalação do Apache River:
jini-core.jar jini-ext.jar reggie.jar outrigger.jar
Feito
isso, basta compilar o projeto, executar primeiramente a classe ReadMessage,
em seguida executar a classe WriteMessage e entrar com as mensagens de
texto que serão enviadas para o espaço de tuplas.
Caso
não esteja usando uma IDE, execute o script:
./compile-app.sh
Para
testar o programa, execute a classe ReadMessage em um terminal/prompt
de comando:
./start-reader.sh
Em
seguida, execute a classe WriteMessage em outro terminal/prompt de
comando:
./start-writer.sh
Dúvidas?
Atendimento
aos Alunos
- Horário:
Terças-feiras das 16:20 às 18:00.
- Local:
Prédio do INE - Sala 305.
E-Mail
f r a n k @ i n f . u f s c . b r
Mantida
por Frank Siqueira.
Atualizada em 17/08/2012.
|