INE6514
Aula Prática – DSM

Prof. Frank Siqueira

Programa de Pós-Graduação em Ciência da Computação
Universidade Federal de Santa Catarina
 

INE5418 | Descrição | Roteiro | Dúvidas


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.