Objetos distribuídos e Web - Situação 4

Plenária de 28.04.98

    Integrantes:  Christian, Angélica, Gonzaga, Marcelo A., J. Carlos, Raquel C., Rossano, Luciana
 
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.
 

Tópicos:

1.Introdução e Situação 4

2.Funcionalidades do ambiente proposto

3.Implementação das funcionalidades

4.Conclusão


1. Situação 4

A situação 4 é descrita da seguinte forma: um estudante conecta-se ao servidor UMTE manifestando seu interesse no tópico, sendo a informação posteriormente entregue pelo servidor quando disponível ou atualizada. Por exemplo, pela manhã o estudante define (possivelmente com o auxíliio de interações com o servidor de cursos) quais tópicos e sob qual enfoque o material desejado irá versar. À noite, ao retornar do trabalho, o estudante irá estudar o material que está disponível localmente, podendo acontecer de nem todo o material ter sido ainda preparado e entregue pelo servidor.
 Com base nesta situação proporemos um implementação utilizando objetos distribuídos identificando os seguintes pontos:
 
  •  os dados envolvidos, sua caracterização e localização (por exemplo, na máquina cliente, no servidor de cursos ou em outro servidor);
  • os serviços oferecidos, que combinados, permitiriam implementar as funcionalidades desejadas;
  • como  as funcionalidades são implementadas, descrevendo as interações entre usuário, dados e serviços especificados.

  •  
     

     

    2. Funcionalidades do ambiente proposto

     As funcionalidades serão basicamente as seguintes:

    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.
     

    3.Implementação das funcionalidades

    A implementação a partir de objetos distribuídos utilizará dois objetos: GerenteAluno, ServidorCursos, applet SelecTopics e applet IndexTopics.

    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.

     

    4.Conclusão

    A implementação das funcionalidades necessárias à Situação  4 impuseram o uso de quatro objetos remotos, sendo dois na forma de applets. Observamos que uma parte considerável do processamento estará nestes dois applets. Sabemos que applets muito extensos terminam por se tornarem de lento carregamento e interpretação(JavaApplet). Como forma de contornar este problema estes dois applets já poderiam ter seus bytecodes residentes na área do aluno.
    Outro ponto de indecisão é quanto à forma de envio dos tópicos ao objeto GerenteAluno. Deveriam estes ser enviados já como String's pela rede, sendo cada String referente a uma página HTML, ou enviados apenas as URL's referentes a cada tópico. Pensei ser mais interessante enviar as URL's, pois além de evitar a conversão de tipos de dados nos vemos obrigados a guardar temporariamente os pedidos  prontos em alguma área do servidor. Esta área teria várias utilidades. Pode esta servir como buffer para envio de pedidos prontos, pode permitir o cancelamento de um pedido já pronto mas ainda não enviado, fornece a possibilidade de reenvio de um tópico, para o caso deste ter sido erroneamente removido no aluno, funcionaria como um cache para o caso de outro aluno requisitar o mesmo tópico com a mesma visão.
     

    Referências

    [1] David Curtis: "Java, RMI and CORBA", Object Management Group, 1997

    [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


    Página atualizada em 04. 05. 98