Este documento é o resultado das discussões realizadas no dia 28.04.98.O assunto consiste em uma revisão da arquitetura de software proposta na reunião de grupos sobre o tema Programação na Web considerando agora a utilização de objetos distribuídos via CORBA para a situação 4. O material base está disponível nas referências.
2.Funcionalidades do ambiente proposto
3.Implementação das funcionalidades
1. Seleção de tópicos a serem enviados
O aluno poderá a partir de um programa gráfico selecionar quais tópicos deseja receber. Os tópicos selecionados irão sendo mostrados em uma espécie de cesta de compras. Para cada tópico o aluno poderá definir qual visão deseja ter. Após a seleção esta ferramenta pode realizar uma verificação de consistência, que significa alertar ao aluno para o caso de o mesmo não ter selecionado algum tópico que seja pré-requisito de um tópico selecionado.
2. Índice de Tópicos Recebidos e a Receber
Após o aluno ter feito as escolhas pela ferramenta acima, ele
poderá visualizar o estado do seu pedido. Em outra página
Web o aluno terá outra ferramenta que servirá como
índice para iniciar seus estudos do material. Esta ferramenta construirá
uma lista de todos os tópicos já pedidos, onde os tópicos
com material já presente na área do aluno aparecem como links,
enquanto que os que ainda não chegaram aparecem em texto cinza.
Esta ferramenta de visualização, além de fazer esta
comparação entre o que já chegou e o que foi pedido,
pode realizar uma ordenação do material a partir de alguma
informação enviada pelo servidor ou por configuração
local feita pelo aluno.
1 . GerenteAluno: Será um aplicação java
que ficará ativa na área do aluno.
Este objeto manipula a base de dados local e provê métodos
para receber requisições das applets de interface. Estas
requisições são traduzidas em buscas e gravações
na base de dados. Os dois métodos necessário ao suporte
das duas funcionalidades já definidas são:
void infoPedido(Vector lista_de_topicos_requeridos,
Vector lista_de_visoes)
Este procedimento
será chamado pela applet da ferramenta de seleção
de tópicos após o pedido estar pronto. A função
é informar ao GerenteAluno os tópicos que foram pedidos.
Esta informação será requisitada pela applet da funcionalidade
2 para montar um índice dos tópicos.
void recebeTopicos(Vector topicos_prontos)
Após
o ServidorCursos ter um tópico pronto ou vários, ele
poderá enviá-los chamando este método do GerenteAluno.
Este procedimento se encarregará de gravar os tópicos
enviados na base de dados local.
boolean autentica (String ID_AppletIndexTopics, String Nome,
String senha)
Esta função
serve para autenticar o usuário, de modo que este possa ter acesso
a base dados local do aluno. Observe que a base de dados do aluno
poderia ser acessada por outros usuários devidademente autorizados
pelo aluno, tendo estes nome e senha próprios e liberdade
de ação sobre o BD limitada. Se os dados de nome e senha
estiverem corretos, esta função chamará o método
IndexTopis.recebeListaTopicos() para enviar a lista de todos os tópicos
requisitados por este aluno e retornará true. Em caso de falha retorna
false.
2. ServidorCursos: Será uma aplicação
multithreaded que ficará ativa em uma máquina servidora externa.
Este objeto manipula uma base de dados do servidor, provendo métodos
que implicam em buscas a esta base de dados, gravações e
processamento do resultado destas buscas para posterior envio ao cliente.
Este envio é realizado a partir da chamada a um procedimento
de um objeto remoto. Abaixo temos os métodos necessários
ao atendimento das funcionalidades descritas anteriormente.
boolean autentica( String ID_objeto_remoto, String
NomeAluno, String SenhaAluno)
Esta função será
chamada pelo applet da primeira ferramenta. O ID do objeto se faz necessário
para que o servidor saiba para quem enviar o pedido que será
realizado quando estiver pronto. Caso ocorra alguma falha, como nome da
aluno ou senha inválidos, será retornado false.
void requisitaTopicos( Vector lista_de_topicos,
Vector lista_de_visoes)
Por meio deste método o servidor
recebe os tópicos que o aluno deseja.
boolean cancelaTopicos(Vector lista_a_cancelar)
Enquanto o tópico ainda não chegou
o aluno pode cancelar alguns tópicos. Se o tópico já
foi enviado esta função retorna false. Esta função
pode ser chamada a partir da interface referente a funcionalidade 2.
3. SelecTopics: Este applet será carregado através de uma página HTML e ficará ativo no espaço de memória definida pelo Browser. Este applet implementará a interface referente à funcionalidade 1. É necessário que este objeto disponha de um método para receber uma lista de nomes de tópicos disponíveis pelo ServidorCursos. Este método será chamado pelo ServidorCursos para que a interface tenha os dados necessários à listagem dos tópicos.
void recebeNomesTopicos (Vector nomes_dos_topicos)
4. IndexTopics : Este applet será carregado através de uma página HTML e ficará ativo no espaço de memória definida pelo Browser. Este applet implementará a interface referente à funcionalidade 2. É necessário que este objeto forneça um método para que GerenteAluno envie a listagem de todos os tópicos que foram pedidos pelo aluno, sendo que para os tópicos já presentes é também enviada a respectiva página HTML inicial.
void recebeListaTopicos (Vector nomes_dos_topicos,
Vector nomes_das_paginas)
Para os tópicos que não chegaram ainda,
a posição correspondente no segundo vetor acima estará
vazia.
Funcionalidade de requisição de tópicos:
1. Aluno entra na página inicial da
UMTE referente a Cursos;
2. Clica em requisitar novos tópicos;
3. Isto trará a página HTML
contendo o applet SelecTopics, este applet é automaticamente carregado.
A interface descrita na funcionalidade 1 é provida totalmente por
este applet.
4. A primeira tela mostrada ao aluno se referente
à autenticação. O aluno preenche seu nome e senha
e clica OK. Esta ação provoca a chamada da função
ServerCursos.autentica().
5. A função ServerCursos.autentica()
verifica se o nome e senha conferem e faz uma chamada ao método
SelecTopics.recebeNomesTopicos(), enviando assim uma lista atual
dos nomes dos tópicos que estão disponíveis no servidor,
bem como as visões possíveis sobre cada um;
6. A partir do applet SelecTopics o
alunos marcará os tópicos que deseja e, se desejar,
para cada um definirá uma visão. As visões estão
disponíveis em um componente de interface. Terminada a tarefa de
seleção, o aluno clica OK. Esta ação provocará
um teste feito localmente pela applet, verificando a consistência
do pedido (ver funcionalidade 1), após este teste os tópicos
são enviados ao ServidorCursos através da chamada ao método
ServidorCursos.requisitaTopicos(). Por conseguinte é também
informado ao GerenteAluno uma nova lista de tópicos requisitados,
isto se realiza através da chamada ao método GerenteAluno.InfoTopicos().
Com isso a applet termina voltando a página inicial da UMTE referente
a Cursos.
7. O ServidorCursos ficará processando o
pedido, que consistirá em montar cada tópico requisitado
com a respectiva visão desejada pelo aluno. Assim que alguns
tópicos estiverem prontos o ServidorCursos chama o método
GerenteAluno.recebeTopicos(). Este método gravará na base
de dados local os documentos HTML referentes ao endereços
URL fornecidos pelo servidor.
Funcionalidade de índice de tópicos:
1. Aluno entra na página inicial da UMTE referente
a Cursos;
2. Clica em índice de tópicos;
3. Isto trará uma página HTML contendo
o applet IndexTopics, este applet é automaticamente carregado. A
interface descrita na funcionalidade 2 é provida inteiramente por
este applet.
4. A primeira tela mostrada ao aluno é referente
à autenticação. O aluno preenche seu nome e senha
e clica OK. Esta ação provoca a chamada da função
GerenteAluno.autentica().
5. A função GerenteAluno.autentica() verifica
se o nome e senha conferem e faz uma chamada ao método IndexTopics.recebeListaTopicos().
Esta chamada permite o envio da lista de tópicos requisitados pelo
aluno, acompanhados das respectivas páginas iniciais de conteúdo
do tópico. Para os tópicos que ainda não chegaram
teremos ao invés de links para páginas, os tópicos
escritos em cor cinza. Para estes poderemos pedir que sejam cancelados,
clicando duas vezes em cima e depois clicando em CancelarTópico.
Esta ação provocará a chamada à função
ServidorCursos.cancelaTopicos(), que enviará o tópico a ter
seu pedido cancelado. Se o tópico já está pronto no
servidor o mesmo não poderá ser cancelado, fazendo assim
com que esta função retorne false.
[2] Eric Evans, Daniel Rogers: "Using Java applets and CORBA for multi-user distributed applications" , IEEE Internet Computing 1(3):43-55, May-June 1997
[3] Morgan. B :"CORBA meets Java ", JavaWorld 2(10), October
1997
[4] Orfali, R.; Harkey, D. : "Client/server, CORBA/Java-Style
em Client/server programming with Java and CORBA", John Wiley and Sons,1997
[5] Sean Baker, Vinny Cahill, Paddy Nixon : "Bridging boundaries: CORBA in perspective ", IEEE Internet Computing, 1(5):52-57, September/October 1997
[6] Jeremy Rosenberg ," When to use CORBA ", Javology 2(3), April-May 1997
[7] Marcelo Miranda Coelho, "Definição de um módulo hipermídia adaptativo para integrar sistemas tutores inteligentes", Instituto Tecnológico da Aeronáutica, http://www.comp.ita.cta.br/~coelho/paper.html