Grupo E5

     Subject: Programação na WEB
        Date: Wed, 15 Apr 1998 18:46:16 -0300
        From: Rossano Pablo Pinto 
Organization: Faculdade de Engenharia Eletrica e da Computacao - UNICAMP
  Newsgroups: feec.posgrad.IA368F
 


Grupo E5 
Rossano Pablo Pinto 973273 (Relator) 
Raquel Cristina 973505 
Jose Roberto 980142 
Luciana Meneghel 973271 

Objetivo 

O objetivo deste documento é propor um mecanismo de programação que mais se
adeque para implementar as funcionalidades do ambiente "Curso sob medida" +
"Prova virtual".

Introdução 

Para implementar as funcionalidades do ambiente em questão, o documento se
baseará em comparações entre os mecanismos de programação "Servlet" e
"CGI", que rodam no servidor, e "Applet" que é executado no cliente. Será
abordado o conceito de "channel" e como se aplicaria ao ambiente proposto.

Servlet 

O "API Servlet" é uma extensão Java especialmente desenvolvida para
aplicações que rodam em servidores. Os Servlets não são específicos para
servidores WEB, mas como os servidores HTTP (servidores WEB) são
importantes, criou-se uma versão específica de Servlet, o HttpServlet, o
qual será tratado apenas como Servlet neste documento.  Uma grande vantagem
do Servlet é que este é carregado apenas uma vez pelo servidor, ficando
residente na memória e prontamente disponível para processar chamadas, até
mesmo a nível de threads concorrentes. Os Sevlets são portáveis e provêem
mecanismos de segurança, características herdadas do java, além de contar
com a orientação à objeto em sua forma de programação.

CGI 

Common Gateway Interface é utilizado como script em um servidor. Um script
é uma seqüência de ações que, neste caso, será considerado como um
programa. Um programa CGI é relativamente fácil de ser escrito. A grande
desvantagem do CGI, é que o servidor carrega uma cópia do programa para
cada requisição do mesmo. Isso acarreta em uma sobrecarga (Overhead) em
servidores muito acessados.

Comparação entre Servlet e CGI 

Para o ambiente proposto, tanto o CGI quanto o Servlet seriam adequados
para a implementação das funcionalidades em questão.  Segundo [1] Benoit
Marchal, o Servlet é mais eficiente que o CGI. Utilizando como exemplo as
funcionalidades 3 e 4, o Servlet teria uma vantagem sobre o CGI. Como o
servidor carrega várias cópias do script CGI, poderia ocorrer um overhead
no servidor, caso vários alunos, das várias instituições envolvidas no
ambiente, resolvessem fazer uso destas funcionalidades. No caso da
funcionalidade 4, será sugerido o "channel" como descrito mais adiante.

Applet 

Um Applet é um programa escrito em Java, o qual é executado no cliente,
sendo o oposto ao Servlet. O Applet seria útil para as funcionalidades 7 e
8, nas quais o Applet pode ser utilizado para contabilizar o tempo de
execução das questões dos testes e posterior envio das respostas ao
servidor. A restrição do uso do Applet é a forma pela qual ele é "baixado"
na máquina cliente. Todo Applet é "baixado" por demanda, o que diminui a
performance. Uma solução para esta perda de performance seria a utilização
do "channel" como proposto mais à frente.

Channel 

O channel se resume basicamente em uma hierarquia de diretórios preenchidos
com arquivos. É necessário fazer a assinatura de um channel em um servidor,
e nesta assinatura, o cliente recebe uma cópia completa dos arquivos do
channel e a hierarquia dos diretórios no próprio disco rígido.  É possível
rodar a aplicação do channel "off-line" e mesmo fora de um browser. O
channel é programado para consultar o servidor de tempo em tempo (dia, mês,
hora) segundo o desenvolvedor do channel. Com isso, o cliente recebe uma
cópia dos arquivos alterados toda vez que for notada uma atualização ou
deleção de arquivos e/ou diretórios. O servidor não mantém o estado da
comunicação.  Para que a atualização dos arquivos do cliente ocorra, o
tuner (programa utilizado pelo cliente) envia um índice dos arquivos e
hierarquia dos diretórios para o transmitter (servidor), o qual verifica se
algo foi alterado. A unidade básica de atualização é o arquivo. O channel
poderia ser utilizado para a funcionalidade 4, pois o curso poderia ser
ministrado sem a necessidade de estar conectado na WEB a todo momento. Uma
outra vantagem seria o ganho de desempenho no andamento das aulas, com
maior velocidade no acesso às informações.

Resumo das Funcionalidades x Mecanismos 

Funcionalidades x Mecanismos 
1 - Servlet/CGI 
2 - Servlet/CGI 
3 - Servlet 
4 - channel 
5 - Servlet/CGI 
6 - Servlet 
7 - Servlet, Applet 
8 - Servle, Applet 
9 - Servlet 

Motivos: 

Para as funcionalidades 1,2 e 5, tanto o Servlet quanto o CGI funcionariam
bem, pois não existiria o acesso simultâneo de muitos clientes, o que
acarretaria um problema para o CGI. Para as funcionalidades 3,6,7,8 e 9,
pode ocorrer o caso do servidor estar sendo acessado por vários clientes
simultaneamente. Neste caso optou-se pelo Servlet para não causar um
overhead no servidor, pois o Servlet é carregado apenas uma vez e fica
disponível para todas as outras requisições. Nas funcionalidades 7 e 8, há
a necessidade de contabilizar o tempo da resolução das questões oferecidas
nos testes e provas, então optou-se pelo Applet para rodar no cliente. Para
a funcionalidade 4 o channel melhoraria o acesso às informações com relação
à velocidade de resposta, pois as mesmas se encontrariam no disco rígido do
cliente.

Conclusão 

Dos mecanismos para implementação das funcionalidades do ambiente "Curso
sob medida" + "Prova vitual", foi escolhido como ferramenta de servidor o
Servlet, por ter maior performance e mais segurança, inerentes ao Java. O
channel é uma boa opção para ser utilizada por aumentar a velocidade de
acesso às informações. O applet pode ser utilizado nas funcionalidades 7 e
8 para contabilizar o tempo de resolução dos testes e provas.

Referências 

[1] http://www.javacats.com/US/Articles/servlet.html 
[2] Steve E. Brenner, Edwin Aoki, Introduction to CGI/Perl, Capítulo 1 
[3] http://www.javasoft.com/docs/books/tutorial/applet/overview/index.html 
[4] http://www.javaworld.com/javaworld/jw-12-1996/jw-12-channel.html 

ricarte@dca.fee.unicamp.br

Last modified: Wed Apr 29 17:11:29 BRA 1998