Exercício-Programa 2: Sistema de Bate-Papo Usando JMS

Sistemas de Middleware - Primeiro Semestre de 2009

Descrição

Este exercício-programa consiste no criação de um sistema simples de bate-papo semelhante ao do EP1, porém agora baseado em JMS. Será utizada uma implementação de JMS que roda num servidor de aplicações Java EE.

O trabalho está dividido em duas partes: uma básica e uma extensão. A nota final está relacionada com as funcionalidades implementadas. Veja abaixo.

Especificação

Como requisitos básicos, o sistema deve oferecer as seguintes funcionalidades: (valor: 8,5)

Recursos adicionais (opcional):

Arquitetura / Implementação

Desta vez você não terá de escrever um "servidor de bate-papo", pois esse papel será desempenhado pela implementação de JMS rodando no servidor de aplicações Java EE. Mais precisamente, o papel de "servidor de bate-papo" será desempenhado por um conjunto de filas e tópicos JMS implantados no servidor de aplicações. Assim sendo, você implementará apenas a aplicação cliente.

Use o mapeamento natural entre conceitos do sistema de bate-papo e conceitos JMS:

sistema de bate-bapo JMS
 sala de bate-papo   tópico 
 entrar numa sala de bate-papo   fazer uma assinatura (subscription) de um tópico 
 usuário do sistema de bate-papo   fila de mensagens 
 enviar uma mensagem específica para um usuário   enviar uma mensagem para a fila associada ao usuário 

Note que o JMS proíbe acessos concorrentes a uma mesma sessão. (Veja as seções 2.8 e 4.4.6 da especificação do JMS 1.1.) Uma consequência disso é que uma sessão JMS com um MessageListener (que recebe chamadas assíncronas) não deve ser usada por uma thread que fica enviando mensagens. Para fazer a recepção (via MessageListener) e o envio de mensagens concorrentemente são necessárias duas sessões separadas: uma com o MessageListener e a outra empregada pela thread enviadora de mensagens.

O JMS não inclui interfaces para criação de filas ou tópicos por programas. Filas e tópicos são "objetos administrados", que (no JMS padrão) devem ser criados pelo administrador do sistema, usando ferramentas ou procedimentos específicos da implementação de JMS utilizada. Algumas implementações de JMS oferecem, entretanto, APIs não padronizadas que permitem a criação de filas ou tópicos por programas. A funcionalidade de registro dinâmico de novos usuários e de novas salas de bate-papo requer uma API assim. Essa funcionalidade não pode ser implementada empregando-se apenas as interfaces "oficiais" do JMS.

O sistema deve ser implementado em Java, com o JBoss Messaging rodando no JBoss Application Server. Use a versão 5.0.1.GA do JBoss Application Server, que inclui o JBoss Messaging.

Embora o JBoss Messaging faça parte do JBoss Application Server, a distribuição desse servidor não inclui os exemplos de utilização nem a documentação do JBoss Messaging. Os exemplos e a documentação estão na distribuição do JBoss Messaging. Para obtê-los, baixe a versão 1.4.2.GA-SP1 do JBoss Messaging. (Essa é a versão mais recente do JBoss Messaging. Na verdade você não precisa dela. A versão do JBoss Messaging que é distribuída juntamente com o servidor JBoss 5.0.1.GA é perfeitamente adequada para este EP, embora seja um pouco mais antiga.) Veja o subdiretório examples da distribuição do JBoss Messaging. Para rodar os exemplos no JBoss Application server você precisará fazer alguns ajustes. Primeiro entre no diretório examples da distribuição do JBoss Messaging e execute o seguinte script:

for i in `find . -name build.xml`
do
  mv $i $i.bak
  cat $i.bak | sed 's/value="messaging"/value="default"/' |
               sed 's/jboss-j2ee/jboss-javaee/' |
               grep -v jdk50 >$i
done
Depois copie para o subdiretório server/default/deploy da distribuição do JBoss Application Server (jboss-5.0.1.GA) o arquivo jbm-examples-destinations-service.xml que está no subdiretório examples/destinations da distribuição do JBoss Messaging. Agora é só ativar a configuração default do servidor de aplicações (chamando ./run.sh a partir do subdiretório bin), ir para outra janela de shell, fazer a variável de ambiente JBOSS_HOME apontar para o diretório raiz da distribuição do JBoss Application Server e rodar os exemplos. Estude os exemplos queue e topic, que devem ajudar você a fazer este EP. Olhe também a documentação incluída na distribuição do JBoss Messaging.

Bom trabalho!

FAQ

Questão 1: Pode fazer em grupo?
Resposta: Este trabalho deve ser feito em grupos de uma ou duas pessoas.

Questão 2: Pode haver grupo com mais de duas pessoas?
Resposta: Não.

Questão 3: O que exatamente deve ser entregue?
Resposta: Veja abaixo o ítem "Entrega".

Entrega

O trabalho deve ser entregue até 06/05 11/05, através do sistema Paca/Moodle.

Entregue um arquivo tar.gz ou zip que satisfaça os seguintes requisitos:

Valid CSS! Valid XHTML 1.0! Last modified: Fri May 8 17:29:01 BRT 2009