Você está na página 1de 31

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

JAVA 10

Uma aplicao distribuda

A FINALIDADE DESTE MDULO APRESENTAR UM EXEMPLO DIDTICO que


ilustre o uso prtico das tecnologias discutidas nos mdulos anteriores (e no
mdulo de servlets) em cenrios onde aplicaes distribudas so necessrias. O
problema de acesso a um banco de dados localizado em uma rede TCP/IP ser
solucionado empregando tecnologias como CORBA, RMI e soquetes TCP em
aplicaes executando em trs cenrios diferentes. Os cenrios se distinguem pela
interface do usurio e plataforma utilizada. Na plataforma Web teremos um
applet Java rodando no browser, e pginas HTML geradas por um servlet
rodando no servidor HTTP. Na plataforma Windows teremos um programa
executvel Java. Este mdulo serve de referncia e essencial para a total
compreenso dos exemplos dos mdulos Java 6 e Java 7.

Tpicos abordados neste mdulo


Execuo e instalao de uma aplicao Java multiplataforma cujo
cdigo foi analisado em mdulos anteriores
Discusso a respeito de desempenho e aplicabilidade de cada soluo em
diversos cenrios.

ndice
10.1.Introduo ........................................................................................................... 2
10.2.Apresentao e execuo das aplicaes ................................................................ 3

Aplicaes independentes (executam sob o sistema operacional) .................................... 3


Aplicaes Web: Applets e Servlets....................................................................................... 4
Aplicaes intermedirias (servidores) .................................................................................. 5

10.3.Execuo das aplicaes....................................................................................... 8


10.4.Construo da aplicao ...................................................................................... 9
Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-1

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo


Estrutura da aplicao.............................................................................................................. 9

10.5.Estrutura do cdigo: camada de armazenamento ................................................ 14

Aplicao de banco de dados em arquivo .......................................................................... 14


Construo de uma aplicao JDBC ................................................................................... 17

10.6.Estrutura do cdigo: interfaces do usurio .......................................................... 19

Interface orientada a caractere.............................................................................................. 19


Interface HTML com servlets HTTP ................................................................................. 20

10.7.Estrutura do cdigo: aplicaes intermedirias .................................................... 24


10.8.Onde e quando usar cada cenrio? ..................................................................... 25
Applets e Servlets ................................................................................................................... 25
Clientes Web e clientes nativos ............................................................................................ 26

10.9.Resumo ............................................................................................................. 28

Objetivos
No final deste mdulo voc dever ser capaz de:
comparar as vrias solues de conectividade usando Java e saber
escolher a mais adequada a determinado ambiente.
perceber as vantagens do uso de interfaces e outros mecanismos
orientados a objetos que promovem o reuso de componentes.

10.1.Introduo
A aplicao analisada permite o acesso a um banco de informaes
armazenadas em um arquivo de texto ou em banco de dados relacional,
localizado em um servidor remoto. O acesso pode ser direto ou atravs de uma
das quatro aplicaes intermedirias que interceptam as requisies do cliente.
Essas aplicaes foram construdas para atuar como servidores e realizar a
comunicao usando CORBA, RMI, RMI sobre IIOP ou soquetes TCP
(java.net).
As aplicaes mencionadas acima executam sob o sistema operacional local.
Tambm analisaremos aplicaes que funcionam sob a plataforma Web. So
mais duas verses da aplicao de banco de dados, usando tecnologias Web clientside e server-side. A primeira verso, consiste de uma interface do usurio
proporcionada por um applet Java cuja lgica da aplicao reside no browser. A
segunda aplicao Web utiliza HTML e JavaScript como interface do usurio e
concentra a lgica da aplicao em um servlet Java instalado no servidor.
Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-2

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

10.2.Apresentao e execuo das aplicaes


As figuras 10-1 a 10-5 ilustram as interfaces do usurio das aplicaes
analisadas. Todas possuem o mesmo ncleo. Foram construdas separando a
lgica da aplicao da interface do usurio e de armazenamento.
Aplicaes independentes (executam sob o sistema operacional)

Figura 10-1 - Aplicao cliente com interface do usurio orientada a caracter

Figura 10-2 Aplicao cliente com interface grfica. (a) durante opes Pesquisar... em arquivo
local; (b) e (c) menus; (d) listando os dados de banco de dados remoto (via RMI/IIOP)

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-3

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

Aplicaes Web: Applets e Servlets


Figura 10-3 (a) Interface cliente como applet em browser
Netscape(com opo pesquisar... ativada)

Figura 10-3 (b) - Interface cliente como applet em browser


Microsoft Internet Explorer

Figura 10-4 Aplicao com interface HTML/JavaScript fornecida por


servlet. (a) pgina inicial que permite selecionar fonte de dados (local
ao servidor ou remota); (b) pgina mostrando todos os registros do
banco de dados; (c) pgina mostrando um registros que est sendo
editado; janela de dilogo solicita nmero de registro a ser removido.

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-4

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

Aplicaes intermedirias (servidores)

Figura 10-5 (a) Aparncia geral dos servidores intermedirios (BDProtocol, CORBA, RMI, RMI/IIOP).
(b) Dilogo para conectar com banco de dados em arquivo. (c) Dilogo para conectar em banco de dados relacional atravs de URL JDBC

O banco de dados consiste de um conjunto de anncios com nmero,


nome, data e contedo. Todas as interfaces do usurio so adaptadas para
entender esse formato. A tecnologia utilizada para armazenamento e a tecnologia
utilizada para a comunicao remota podem ser diferentes. Todas so tambm
suportadas pela aplicao. Em todas as interfaces console (figura 10-1), grfica
(10-2), applet (10-3) e servlet (10-4) possvel escolher se a transferncia das
informaes ser atravs de acesso local ou remoto usando CORBA, RMI, RMI
sobre IIOP e TCP/IP. A aplicao tambm suporta qualquer banco de dados
JDBC ou um formato proprietrio baseado em arquivo para armazenar os dados.
Os vrios blocos destacveis da aplicao esto ilustrados na figura 10-6.
No objetivo deste captulo comparar o desempenho entre tecnologias de
objetos remotos, portanto, as diferenas entre CORBA, RMI e TCP/IP no
sero consideradas nas aplicaes analisadas aqui. Pretendemos, porm, discutir o
funcionamento de uma aplicao funcionando com interface applet, HTML com
servlet ou como executvel do sistema operacional. Para isto, mediremos tempos
de resposta e requisio entre cliente e servidor usando uma das tecnologias de
rede (TCP/IP), e cada uma das trs interfaces. As configuraes utilizadas nos
experimentos deste capitulo esto ilustradas na figura 10-7.
Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-5

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

Aplica o*de*B a nco*de*D a dos

Interface*H TML*e*JavaS cript


via*browser*com *servlet*H TTP

Pa rtes*"desta c veis"*da *a plica o

P g ina*H TML

1.*Interfa ces*do*usu rio


Interface*aplicao*g r fica **
sta nda lone

B rowser

Interface**a plica o
sta nda lone*orientada*a*caracter

Interface*Applet*Web
via*browser

Console

D a dosClientUI

D a dosClientTextU I

BancoDados

BancoDados

H TTP

B rowser
P g ina*H TML

S ervidor*H TTP

D a dosA pplet

D a dosS ervlet

BancoDados

BancoDados

implementam/interface/BancoDados

2.*Clientes*e*S ervidores
interm edi rios

TCP Client

a )*Cliente*e*servidor*B DProtocol*
b)*Cliente*e*servidor*RMI
c*)*Cliente*e*servidor*COR B A

R MIClient

B D P rotocol

(a)

R MI

( b)

Corba Client
COR B A

( c)

**protocolo*propriet rio*TCP/IP
usa ndo*S ockets*ja va.net
implementa/interface/BancoDados

TCP D a dosS erverU I

R MID a dosS erverUI

Corba D a dosS erverU I

BancoDados

BancoDados

BancoDados

B a ncoD adosJ D B C
Connection ResultSet ...
Driver
Statement

3.*Interfa ce*g enrica *pa ra *ba ncos*


de*da dos*rela ciona is

4.*Interfa ce*pa ra *ba ncos*de*da dos*


ba sea dos*em *a rquivo
implementa/interface/BancoDados

implementam/interfaces/JDBC

B a ncoD adosArquivo

(a)

ODBC
Windows*O DB C32*
Da ta *Source*Na me
O D B C *d rive r*fo r*
MS C Acce ss*M D B *file s

( b)

m sqlda dos1/

mSQL

desconh ecido

( c)

Ra ndom AccessF ile

bd_ desconhecido

a rquivo
da dos.da t

MS *A ccess

a nuncios.m db

S istem a *de*a rquivos

5.*B a ncos*de*da dos*rela ciona is*


com *drivers*J D B C

a )*B anco*de*dados*ODB C
b)*B anco*de*dados*MS QL
c)*B anco*de*dados*qua lquer

F ig ura *10 C6 **C *P a rtes*desta c veis*da *a plica o*"ba ncoda dos".*Veja *m a is*deta lhes*sobre*a *estrutura *da *a plica o*no*a pndice*C.

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-6

t1 ap

t1 prot

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

t2

t3 ap

t1 ap

t1 prot

t1 web

a rquivo
da dos.da t

R a nd om A ccessF ile

B a ncoD a dosA rqu ivo

BancoDados

TCP D a dosS erverU I

B D P rotocol

TCP Client

BancoDados

D a dosS ervlet

S ervid or=H T T P

H TT P

P g in a =H T ML

B rowse r

Interfa ce=H TML /J a va S cript


usa ndo=servlet

t2

t3 ap

t3 web

F ig u ra =10N7==N=Com bina es=dos=blocos=da =a plica o="ba ncoda dos"=utiliza da s=nos=testes

a rquivo
da dos.da t

R a nd om A ccessF ile

B a ncoD a dosA rqu ivo

BancoDados

TCP D a dosS erverU I

B D P rotocol

TCP Clien t

BancoDados

D a dosClien tU I

A plica o=Windows=servindo
com o=interfa ce=g r fica =

C en rios=testa d os=e
in sta n tes=m ed ido s

A plica o=de=
B a n co=de=D a dos

t1 ap

t1 prot

a rquivo
da dos.da t

R a ndom A ccessF ile

B a n coD a d osA rquivo

BancoDados

TCP D a dosS erverU I

B D P rotocol

TCP Clien t

BancoDados

D a dosA pplet

B rowse r
P g in a =H T ML

A pplet=em =browser
MS =N etsca pe=N a vig a tor

t2

t3 ap
t1 local

a rquivo
da dos.da t

R a nd om A ccessF ile

B a ncoD a dosA rquivo

BancoDados

D a dosClien tU I

A plica o=Windows=usa ndo


a cesso=direto

t2

t3 local

* =n o==po ssve l=m ed ir


va lo re s=e ntre==0 =e =5 0m s

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

J10-7

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

10.3.Execuo das aplicaes


Os pacotes (mdulos Java) desta aplicao so compartilhados tanto pelas
aplicaes cliente como pelas aplicaes servidoras, portanto, para rodar a
aplicao em uma mquina preciso instalar todo o pacote, mesmo que apenas
parte da aplicao seja usada. As aplicaes analisadas neste mdulo esto no
diretrio /jad/apps/ criado aps a descompactao do disquete distribudo
juntamente com este texto.
As aplicaes podem ser executadas invocando diretamente o interpretador
Java ou atravs de roteiros .BAT (Windows) ou Bourne-Shell (Unix). Para
executar qualquer aplicao preciso iniciar uma classe Java executvel (cujo
nome termina em UI). Tambm preciso definir uma propriedade que informa o
diretrio de trabalho da aplicao. As propriedades podem ser passadas via linha
de comando atravs do argumento D do interpretador Java. O classpath s
precisa ser definido se a aplicao for executada fora do seu diretrio de trabalho.
A sintaxe geral para executar qualquer programa da aplicao de banco de dados :
java -Dapp.home=/jad/apps -classpath c:/jad/apps bancodados.user.xxxUI

mais fcil iniciar uma aplicao usando um dos roteiros de execuo


disponveis, em MS-DOS (ou Bourne-Shell). Para usar os roteiros preciso
configur-los para que contenham o endereo correto do interpretador Java e
definam corretamente variveis de ambiente e propriedades do sistema. As
instrues de como configurar as aplicaes esto presentes como comentrios
no cdigo de cada roteiro e na documentao HTML da aplicao.
Os roteiros executveis Unix tm extenso .sh e os executveis Windows tm
extenso .lnk ou .bat. As aplicaes Web tm extenso .html. Todos os
programas/pginas tm a forma runXXX. Pode no ser necessrio configur-los
caso o diretrio /jad/ tenha sido instalado nas localidades default (c:\ para
Windows e ~/ para Unix). Os programas, localizados em /jad/apps/, so:

runRMIServer.bat

runRMIServer.sh

- Executa servidor RMI e

runRIIOPServer.sh

- Executa servidor RMI/IIOP

rmiregistry

runRIIOPServer.bat

e tnameserv

runTCPServer.bat

runTCPServer.sh

- Executa servidor BDProtocol

TCP/IP
Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-8

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

runCorbaServer.bat

runCorbaServer.sh

- Executa servidor CORBA e

tnameserv

e runConsole.sh - Executa cliente orientado a caracter


runGraphic.lnk e runGraphic.sh - Executa cliente grfico Windows/XWindow
runApplet.bat e runApplet.sh - Roda Applet no appletviewer
runWeb.html - Pgina que inicia a aplicao Applet (pode necessitar de
servidores) e a aplicao Servlet (necessita de servletrunner executando).
URL default para servlet : http://localhost:8080/servlet/bdservlet.
runServlet.bat e runServlet.sh - Inicia servidor Web servletrunner
runConsole.bat

Toda a documentao sobre a aplicao, incluindo suas classes, interfaces,


mtodos, pacotes est no diretrio jad/apps/docs/ a partir do arquivo HTML
index.html. O arquivo MS-DOS genDocs.bat gera a documentao caso esta
no esteja disponvel. Neste caso, preciso criar um diretrio docs abaixo de
jad/apps/.

Maiores detalhes sobre a construo das aplicaes esto nos mdulos Java
11, Java 6 e Java 7.

10.4.Construo da aplicao
Este apndice fornece alguns detalhes sobre a estrutura da aplicao descrita na
seo anterior. Maiores detalhes sobre o cdigo em Java podem ser encontrados
no diretrio /jad/apps/ (resultante da expanso dos arquivos do disquete) no
cdigo-fonte, detalhadamente comentado (/jad/apps/bancodados/) e na
documentao em hipertexto, gerada a partir do cdigo-fonte, que descreve
todos os pacotes, classes e mtodos (/jad/apps/docs/).
Este apndice supe que o leitor esteja familiarizado com a linguagem Java,
HTML e JavaScript.
Estrutura da aplicao
A aplicao estudada nos mdulos Java 6 e Java 7 permite o acesso a um
banco de dados contendo registros de anncios. Fornece diversas interfaces do
usurio e opes de servidores intermedirios. O ncleo da aplicao, porm,
consiste apenas de dois tipos Java:

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-9

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

uma interface que define os mtodos utilizados


por qualquer objeto que implemente servios de acesso ao banco de
dados. Representa o banco de dados ou quadro de avisos (do sistema de
anncios).
bancodados.Registro: classe que representa um registro do banco de
dados (ou um anncio).
Estes dois tipos esto armazenados em um pacote chamado bancodados. A
figura 10-8 ilustra os diagramas da classe Registro e interface BancoDados e seus
mtodos.

bancodados.BancoDados:

< < "interface"> > "


bancodados.BancoDados
length():" int
getRegistro(numero:" int):" Reg istro
addRegistro(tex to:" S tring ,"autor:" S trin g )
setRegistro(numero:" int,"tex to:" S tring ,"autor:" S trin g )" boolea n
removeRegistro(numero:" int):" boolea n
getRegistros():" Reg istro[ ]
getRegistros(tex toProcurado:" S tring ):" Reg istro[]
close()

ba n coda dos.Reg istro


Reg istro( nu m ero: 3in t,3texto: 3S tring,3da ta : 3D a te,3a utor: 3S tring )
+ g etN um ero( ): 3in t
+ g etTexto( ): 3S trin g
+ g etD a te() : 3D a te
+ g etA utor() : 3S trin g
+ toS tring ( ): 3S tring

Figura 10-8 Diagramas de BancoDados e Registro

A interface BancoDados utilizada por classes que implementam a interface


do usurio. Atravs dela, todas as interfaces do usurio podem chamar mtodos
para realizar operaes em um banco de dados sem precisar saber coisa alguma
sobre sua estrutura interna ou sobre sua localizao, pois a interface contm
apenas a assinatura dos mtodos.
Nesta aplicao, desenvolvemos oito diferentes interfaces do usurio (4
clientes e 4 aplicaes intermedirias, operadas remotamente pelos clientes) que
criam, removem, atualizam, pesquisam e recuperam registros de um banco de
dados reutilizando a interface BancoDados. As classes que compem as interfaces
do usurio esto no pacote bancodados.user. Todas usam referncias do tipo
BancoDados atravs das quais realizam as operaes solicitadas.
As classes que terminam em UI so executveis (possuem mtodo main() e
podem ser executadas pelo sistema de tempo de execuo Java). Classes que
possuem o nome Client so usadas como componentes do cliente. Classes que
possuem o nome Server so usadas como componentes das aplicaes que
implementam os servidores intermedirios.
As aplicaes que interagem com o usurio utilizam as classes:
Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-10

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

DadosClientTextUI:

Interface do usurio orientada a caracter.


DadosClientPanel: Interface grfica do usurio. Esta no uma classe
executvel. um java.awt.Panel que usado como parte de um objeto
do tipo DadosClientUI ou DadosApplet oferecendo uma interface
uniforme nos dois tipos de aplicao.
DadosClientUI: java.awt.Frame que fornece a estrutura para que a
interface grfica do usurio (DadosClientPanel) possa ser usada como
uma aplicao do Windows.
DadosApplet: Applet que fornece uma estrutura para que a interface
grfica do usurio (DadosClientPanel) possa ser executada dentro de um
browser.
DadosServlet: Servlet que permite que o servidor Web atue como
cliente para a aplicao e seja controlado por uma pgina HTML em um
browser.

So quatro as aplicaes usadas para implementar servidores intermedirios.


Elas agem como servidores e clientes ao mesmo tempo. Como servidores,
recebem as requisies dos clientes. Como clientes, repassam as requisies
camada inferior, que pode ser outra aplicao intermediria ou um driver para o
meio de armazenamento. A aparncia grfica de todas as aplicaes a mesma
pois todas estendem uma classe que fornece essa estrutura:
DadosServerFrame: Classe abstrata derivada de Frame que fornece uma
interface grfica de apresentao e mtodos padro para todos os
servidores intermedirios.
RMIDadosServerUI,
RMIIIOPDadosServerUI,
CorbaDadosServerUI,
TCPDadosServerUI Servidores intermedirios que manipulam o banco de
dados a partir de instrues remotas enviadas por clientes RMI/JRMP,
RMI/IIOP (ou CORBA), CORBA e BDProtocol (protocolo proprietrio),
respectivamente.

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-11

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

Dependendo do tipo de servidor escolhido (nas aplicaes cliente) as classes


utilizadas podero ser diferentes, como mostram as figuras 10-7 e 10-11, mas
sempre preservam a estrutura de camadas mostrada na figura 10-9.
A plica o3distribuda

Ca m a da s3de3rede
Cliente3rem oto
S ervidor3de3aplica es

ba ncoda dos.user

Arm azena mento

Ca m a da s3da 3a plica o

(a )

ba ncoda dos

Cam ada3de3apresenta o
(interface3do3usurio)
Cam ada3da3lg ica 3da3aplicao3(dom nio3e3servios)
33 ( a ) 3Cla sses3que3representa m 3conceitos
33333333funda m enta is3da 3a plica o3( dom nio)
33 ( b) 3Cla sses3que3fornecem 3servios

(b)

Cam ada3de3arma zenam ento

R ede

A plica o3loca l

ba ncoda dos.user

ba ncoda dos.user
ba ncoda dos

(a )

ba ncoda dos.tier2.loca l (b)

BD

ba ncoda dos

(a )

ba ncoda dos.tier3.*

(b)

ba ncoda dos.tier2.loca l (b)

F onte
de3da dos

BD

F onte
de3da dos

Figura 10-9 Arquitetura em camadas e pacotes Java/UML das aplicaes de banco de dados

As classes restantes do pacote bancodados.user so janelas de dialogo e


adaptadoras de eventos usadas pelas aplicaes grficas. A figura 10-10 mostra
todas as classes e todos os pacotes da aplicao.

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-12

ex tends

ex tends

_ A nuncioS tub

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

N a oE xisteH elper
D a teH elper
Qua droAvisosH elper
A nuncioH elper
A nuncioA rra yH elper

N a oE xisteH old er

D a teH old er

Q ua droAvisosH old er

A nuncioH old er

A nuncioA rra yH old er

ex tends

ex tends

F orm a tos

H elper

E rroES

N a oExiste

org.om g.CO RBA .U serException

_ AnuncioImplBase

implements

org.omg.COR BA .D ynam icIm plementa tion

implements

B a ncoD a dosA rquivo

B a ncoD a dosJ D B C

ba ncodados.tier2.local

Corba Client

TCP Client

R MIClient
implements
implements

A nuncioIm pl

implements

Anuncio

implements

A nuncioIm pl_ S tub

ex tends

**
ex tends

ja va .rm i.server.U nica stRem oteObject

ex tends

**

java.rmi.server.Rem oteStub

**
A nuncioIm pl_ S kel
**

S ea rchCm d

E xitCm d

A ddR eg Cm d

R em R eg Cm d

L eng thCm d

G etR eg Cm d

BDProtocol

ba ncoda dos.tier3

ex tends

java.la ng.Exception

java.rmi.server.Skeleton

implements

Q ua droAvisosIm pl

implements

QuadroAvisos

ja va .rm i.Remote

A nuncioIm pl

Qua droAvisosIm pl

Com a ndoInputS trea m

ex tends

ja va .io.D ata InputS tream

B a ncoD a dosIm pl

ex tends

TCPServer

implements

ja va .lang.Runna ble

Comando

ba ncoda dos.tier3.tcpip

R eg istroInexistente

Cla sse&da &A P I&J a va &(1 .2 )

interfa ce

supercla sse

&&&&&&foram &g erada s&pelo&a plica tivo& idltojava


&&&&& (J D K 1.2)&a &pa rtir&do&ID L & bdcorba.idl&
** Estas&4&cla sses&fora m &gera das&pelo
&&&&&&a plica tivo& rmic& ( JD K 1.2)

* &&&E ste&pacote&e&toda s&a s&suas&20&cla sses

Com ponente&execut vel


A pplet
S ervlet
E xce o

Cla sse&F ina l

Cla sse&Concreta

Classe&Abstrata

Interface

pa cote
pa cote.su bpa cote

ja va .io.D a taInputStrea m

cla sse

extends
implements

subcla sse

Leg e nd a

Im plem en ta es&de&interfa ces&da &


AP I&J a va &n o&foram &indica da s
exceto& java.lang.Runnable &(por&
ca ra cteriza r&a &cla sse&im ple`
m enta dora &com o&um & thread )

Toda s&a s&cla sses&qu e&n o&tm


indica o&de&sua &supercla sse&
estendem &java.lang.Object

D ia g ra m a &de&Pa cotes&
e &Cla sses&P blica s

F ig u ra &10` 10&&`&D ia g ra m a &de&cla sses&pblica s&da &a plica o&4&"ba n coda dos".&Cla sses&de&uso&loca l,&cla sses&in terna s&e&da &A P I&J a va &fora m &om itida s.&S om ente&a s&rela es&de&hera na &e&polim orfism o&est o&m ostra da s

ErroE S H elper

ErroE S H older

implements

Anuncio

implements

_ Qua droAvisosS tub

implements

QuadroAvisos

D a dosA pplet

ex tends

java.applet.Applet

D a dosClientTextU I

D a dosClientU I

ex tends

java.awt.Fra me

R MID a dosS erverU I

Corba D a dosS erverU I

org.om g.CORB A.porta ble.Strea ma ble

ex tends

org.omg.CORB A.porta ble.ObjectIm pl

D a dosS ervlet

ex tends

javax.servlet.http.H ttpServlet

XX X&D ia log

ex tends

ja va x.awt.D ia log

D a dosClientP a nel

ex tends

ja va .a wt.Panel

DadosServerFrame

ex tends

TCP D a dosS erverU I

ex tends

implements

ja va .a wt.Fra m e

ex tends

BancoDados

ex tends

implements

R eg istro

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

J10-13

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

A figura 10-11 mostra um cenrio, de uma aplicao rodando como applet


e usando CORBA para intermediar o acesso ao banco de dados.
D ia g ra m a s:de:cla sses::U ML

bancoda dos.user

Cliente:e:S ervidor:CO R B A
com :ca m a da :de:a presenta o:"a pplet:Web"

ja va.awt.Fra m e
java.lang.Runnable

DadosServerFrame

ja va.awt.D ialog
P rom ptD ialog

Cliente:Corba

bancoda dos.user
D adosClientPa nel

bancodados.util.corba._ AnuncioImplBase

bancoda dos

ja va.applet.Applet

D adosApplet

S ervidor:Corba

CorbaD adosS erverU I

ja va.awt.Panel

bancoda dos.tier3.corba

Reg istro

Qua droAvisosIm pl
BancoDados

bancodados.util.corba.*
org.omg.CORBA.*
org.omg.CosNaming.*

bancoda dos
Reg istro

BancoDados

bancoda dos.tier2.local
1

AnuncioIm pl

bancodados.util.corba._ QuadroAvisosImplBase

B ancoD adosJ D BC

bancoda dos.tier2.rem ote


bancodados.tier3.corba.*
1

CorbaClient

bancodados.util.corba.*
org.omg.CORBA.*
org.omg.CosNaming.*

L eg enda

ja va.awt.Fra me
java.rmi.Remote

herana :ou:im plem enta o:(:um )


dependncia:(v)
a ssocia o:(usa )
com posi o:(tem )

DadosServerFrame
QuadroAvisos
Qua droAvisosImpl
ba ncodados

cla sse/interface:im portada


cla sse:a bstra ta
interface
cla sse:concreta
pacote

Figura 10-11 - Diagramas de classes. Cliente e Servidor CORBA com camada de apresentao applet Web.

10.5.Estrutura do cdigo: camada de armazenamento


Esta seo apresenta alguns detalhes sobre as classes que servem de
drivers aos bancos de dados implementados em arquivo e em sistemas de
bancos de dados relacionais.
Aplicao de banco de dados em arquivo
Para implementar o banco de dados precisamos implementar a interface
bancodados.BancoDados (figura C-1). Cada mtodo deve realizar suas operaes
sobre um objeto do tipo java.io.RandomAccessFile que armazenar os objetos
do tipo Registro em disco. O registro tem o seguinte formato:
int: nmero do anuncio
String: texto do anuncio
long: data (tempo em milissegundos desde 1/1/1970)
String: autor do anuncio
Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-14

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

Podemos usar os mtodos da classe RandomAccessFile: writeInt(),


writeLong() e writeUTF() para gravar os tipos int, long e String,
respectivamente e readInt(), readLong() e readUTF() para recuper-los
posteriormente.
O banco de dados tem a seguinte organizao no arquivo:
Os registros sero acrescentados ao arquivo em seqncia.
Cada novo registro ser acrescentado no final do arquivo com um
nmero igual ao maior nmero pertencente a um registro existente mais
um, ou 100, se no houver registros;
Registros removidos tero o seu nmero alterado para 1 (continuaro
ocupando espao no arquivo).
Registros alterados sero primeiro removidos e depois acrescentados no
final do arquivo com o mesmo nmero que tinham antes (tambm
continuaro ocupando espao no arquivo).
A classe que desenvolvemos est em /jad/apps/bancodados/tier2/local/ e
chama-se BancoDadosArquivo.java. Implementa BancoDados podendo ser utilizada
por qualquer outra classe que manipule com essa interface. A classe possui um
objeto RandomAccessFile que representa o arquivo onde os dados sero
armazenados. Suas variveis membro e a implementao de seu construtor esto
mostrados abaixo:
public class BancoDadosArquivo implements BancoDados {
private RandomAccessFile arquivo;
private boolean arquivoAberto;
private Hashtable bancoDados;
private int maiorNumReg = 0;

//
//
//
//
//

descritor de arquivo
inicialmente false
relaciona posicao do ponteiro
do RandomAccessFile com registro
Maior nmero de registro

public BancoDadosArquivo(String arquivoDados) throws IOException {


try {
arquivo = new RandomAccessFile(arquivoDados, "rw");
arquivoAberto = true;
} catch (IOException e) {
close();
throw e;
// propaga excecao para metodo invocador
}
}
(...)

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-15

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

A referncia arquivo utilizada em todos os mtodos que manipulam com


os dados no arquivo. Abaixo listamos o mtodo addRegistro(), que adiciona um
novo registro.
public synchronized void addRegistro(String anuncio, String contato) {
try {
arquivo.seek(arquivo.length()); // posiciona ponteiro no fim
arquivo.writeInt(getProximoNumeroLivre());
arquivo.writeUTF(anuncio);
arquivo.writeLong(new Date().getTime());
arquivo.writeUTF(contato);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}

Para remover um registro, preciso saber em que posio ele est. O


Hashtable bancoDados (definido em getRegistros()) contm um mapa que
relaciona o nmero do registro com a posio no arquivo. O mtodo
removeRegistro() utiliza ento esta informao para localizar o registro que ele
deve marcar como removido.
public synchronized boolean removeRegistro(int numero)
throws RegistroInexistente {
try {
getRegistros();
String pointer = (String)bancoDados.get(new Integer(numero));
if (pointer == null)
throw new RegistroInexistente("Registro no encontrado");
long posicao = Long.parseLong(pointer);
arquivo.seek(posicao);
int numReg = arquivo.readInt();
if (numReg != numero)
throw new RegistroInexistente("Registro no localizado");
arquivo.seek(posicao);
arquivo.writeInt(-1);
// marca o registro como removido
arquivo.seek(0);
} catch (IOException ioe) { // (...)
}
return true;
}

Nesta

interface que desenvolvemos para o arquivo usando


RandomAccessFile, os registros removidos nunca so realmente removidos. Para
limpar o arquivo, livrando-o de espao ocupado inutilmente, preciso exportar
todos os registros vlidos e import-los de volta em um novo arquivo.
Consulte o cdigo fonte para detalhes sobre os outros mtodos.

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-16

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

Construo de uma aplicao JDBC


Nesta seo, construmos uma aplicao JDBC usando os mesmos dados
do captulo anterior, desta vez organizado em um BD relacional. Para reutilizar
toda a interface do usurio e as classes que representam os conceitos
fundamentais do programa, criamos uma classe que implementa a interface
bancodados.BancoDados. Como a interface do usurio usa a interface BancoDados,
podemos usar a classe bancodados.tier2.local.BancoDadosJDBC, preservando a
mesma interface do usurio usada para a verso baseada em arquivo.
Os dados utilizados por esta aplicao so do mesmo tipo que aqueles
manipulados pela aplicao da seo anterior. Teremos, portanto, apenas uma
tabela no banco de dados com a seguinte estrutura:
Tabela 10-1 Estrutura do banco de dados

Coluna

Tipo de dados das linhas

Informaes armazenadas

Observaes

codigo

int

integer

data

String

texto

String

autor

String

nmero do anncio
data de postagem do
anncio
texto do anncio
autor do anncio

chave primria

char(24)

char(8192)
char(50)

Utilizamos os tipos de dados mais fundamentais para garantir a


compatibilidade com uma quantidade maior de bancos de dados.
Na classe BancoDadosJDBC carregamos um driver de acordo com a URL
passada pelo usurio, que permitir, no final, obter um objeto
java.sql.Statement (JDBC) atravs do qual poderemos enviar requisies SQL
ao servidor. O mtodo executeUpdate, da interface Statement, pode ser usado
para inserir registros na implementao de addRegistro():
public synchronized void addRegistro(String texto, String autor)
(...)
String insert = "INSERT INTO anuncios VALUES (" + numero +
+ quando +
+ texto +
+ autor +
try {
stmt.executeUpdate(insert); // objeto tipo Statement
} catch (SQLException e) {
e.printStackTrace();
}
}

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

{
", '"
"', '"
"', '"
"')";

J10-17

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

O mtodo getRegistros() obtm uma tabela de dados como resposta a


uma requisio SELECT (SQL) enviada pelo mtodo executeQuery(). Esse mtodo
retorna um ResultSet (que contm uma tabela virtual navegvel linha-a-linha via
seu mtodo next()). Para cada posio, usamos os mtodos getTipo()
apropriados para ler inteiros e strings.
public Registro[] getRegistros() {
ResultSet rs;
Vector regsVec = new Vector();
String query = "SELECT numero, data, texto, autor " +
"FROM anuncios ";
try {
rs = stmt.executeQuery(query);
while (rs.next()) {
int numero = rs.getInt("numero");
String texto = rs.getString("texto");
String dataStr = rs.getString("data");
java.util.Date data = df.parse(dataStr);
// java.util.Date data = rs.getDate("data");
String autor = rs.getString("autor");
regsVec.addElement(new Registro(numero, texto, data, autor));
}
} catch (SQLException e) { // (...)
} catch (java.text.ParseException e) { // (...)
}
Registro[] regs = new Registro[regsVec.size()];
regsVec.copyInto(regs);
return regs;
}

A remoo do registro implementada de forma mais simples ainda,


bastando encapsular uma instruo SQL DELETE:
public synchronized boolean removeRegistro(int numero)
throws RegistroInexistente {
ResultSet rs;
String delete = "DELETE FROM anuncios WHERE numero = " + numero;
try {
stmt.executeUpdate(delete);
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-18

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

10.6.Estrutura do cdigo: interfaces do usurio


Nesta seo apresentamos detalhes referentes ao funcionamento da
interface do usurio orientada a caractere (que contm as mesmas operaes
bsicas presentes nas interfaces do usurio baseadas em applet, servlet e aplicao
Windows) e das interfaces HTML, geradas pelo servlet.
Interface orientada a caractere
Os arquivos utilizados nesta aplicao esto nos subdiretrios a seguir. Em
negrito est o nico arquivo que trata desta interface:
Tabela 10-2 Componentes da aplicao de banco de dados, com acesso local apenas.

Subdiretrio

Arquivo-fonte Java

bancodados/user

DadosClientTextUI.java

bancodados/

BancoDados.java

bancodados/

Registro.java

bancodados/tier2/local

BancoDadosArquivo.java

bancodados/tier2/local

BancoDadosJDBC.java

Contedo

interface do usurio
orientada a caracter
interface genrica para o
banco de dados (interface)
representao de um
registro (classe concreta)
implementao de
BancoDados

implementao de
BancoDados

A interface do usurio deve manipular com um objeto BancoDados. Na


prtica, estar manipulando com o RandomAccessFile atravs da classe
BancoDadosArquivo ou com os mtodos JDBC atravs da classe BancoDadosJDBC,
mas ela no precisa saber disso. Se estiver usando uma aplicao intermediria,
poder estar usando um cliente CORBA ou RMI que implementa BancoDados.
Resumindo, a interface do usurio uma camada que independe da forma de
organizao ou da localizao dos dados que manipula.
A classe DadosClientTextUI declara uma varivel membro do tipo
BancoDados:
private BancoDados client;

e em todos os seus mtodos chama mtodos de BancoDados atravs de client.


Apenas o menu principal refere-se ao BancoDadosArquivo ou BancoDadosJDBC.

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-19

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

Quando o usurio escolhe um dos dois, ele instanciado e sua referncia


passada para client. A partir da, todos os mtodos operam sobre a interface
BancoDados.
Se o usurio decidir criar um novo registro, por exemplo, a aplicao
chamar o mtodo local criar(), que contm:
public void criar() throws IOException {
(...)
client.addRegistro(texto, autor); // mtodo de BancoDados
}

Para listar todos os registros, o mtodo mostrarTodos() chamado:


public void mostrarTodos() throws IOException, RegistroInexistente {
(...)
Registro[] regs = client.getRegistros();
(...)
}

Em nenhum dos mtodos h indicaes que acontece alguma coisa em um


RandomAccessFile (banco de dados baseado em arquivo) ou na interface
Statement (banco de dados relacional), portanto, a camada de apresentao est
isolada da segunda camada.
Interface HTML com servlets HTTP
Com servlets, a aplicao de banco de dados pode ser acessvel atravs de
uma interface HTML. Construmos uma interface baseada em duas pginas. A
primeira contm a interface onde o usurio pode escolher endereo e servio que
ir fornecer os dados. Passando da primeira pgina (um servio foi selecionado e
este aceitou a conexo), uma segunda pgina ser mostrada com todos os
registros disponveis no banco de dados1. A primeira pgina no alterada pelo
servlet. simplesmente lida do disco e repassada ao browser.
Um esqueleto da segunda pgina deve ser lido pelo servlet que ir preencher
uma tabela com todos os registros encontrados antes de envi-la para o browser.
Este preenchimento tambm inclui uma lista de vnculos (links) de acesso rpido,
antes e depois da tabela, e vnculos rpidos para o menu em qualquer registro.
No incio da segunda pgina h um painel de controle que permite gerenciar o
No foram tomadas providncias para quebrar a pgina em pginas menores a medida em que o nmero de
registro crescer, portanto, esta verso pode ser impraticvel para acessar grandes quantidades de informao.
1

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-20

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

banco de dados. Esses botes respondem a eventos JavaScript e alteram as


informaes que sero enviadas para o servlet. No final da pgina h uma rea
para edio e criao de novos registros, construdos usando formulrios HTML.
As pginas esto localizadas no diretrio /jad/apps/htdocs/. A pgina foi criada
para ser carregada via servlet (a carga direta do arquivo via browser provocar
erros de JavaScript).
O cdigo da pgina dados.html antes de ser lida pelo servlet contm
marcadores de posio indicados por comentrios HTML (<!-- -->):
(...)
<!-- links -->
</p><table border=0 width=590 bgcolor="#dddddd">
<tr><th>Nmero</th><th>Texto</th><th>Autor</th><th>Data</th></tr>
<!-- dados -->
(...)
<tr><td width=70>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;
</td></tr></table><p>
<!-- links -->
</p></div>
(...)

Aps a leitura da pgina pelo servlet, o browser recebe uma pgina gerada
dinamicamente, com os marcadores <!--links --> e <!--dados --> (em negrito
no cdigo acima e abaixo) substitudos por informaes geradas a partir dos
dados armazenados (veja figura 10-4):
<a href="#100">100</a> | <a href="#101">101</a>
(... vrias linhas removidas ...)
| <a href="#134">134</a> |
</p><table border=0 width=590 bgcolor="#dddddd">
<tr><th>Nmero</th><th>Texto</th><th>Autor</th><th>Data</th></tr>
<tr valign=top><td><a name="100">100</br><a
href="#top"><small>[MENU]</small></a></td><td>Cachimbos, ...
tambm!</td><td>R. Magritte
(magritte@recursive.org)</td><td>21/12/97 18:39</td></tr>
(... vrias linhas removidas ...)
<tr valign=top><td><a name="131">131</br><a
href="#top"><small>[MENU]</small></a></td><td>Vende-se um ... da
Terra.</td><td>G. Galileo (galileo@galilei.lua)</td><td>31/12/98
17:06</td></tr>
<input type=hidden name=tarea value="">
<input type=hidden name=tfld value="">
<input type=hidden name=numero value="0">
(...)
<tr><td width=70>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;
</td></tr></table><p>
<a href="#100">100</a> | <a href="#101">101</a>
(... vrias linhas removidas ...)
| <a href="#134">134</a> |
</p></div>
Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-21

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

Para implementar a interface do usurio, podemos usar somente HTML. A


vantagem que nossa pgina ser acessvel at pelo mais primitivo dos browsers.
O problema que HTML muito limitado quanto aos recursos de interao com
o usurio. HTML oferece trs tipos de eventos:
clicar sobre um link que inicia uma requisio GET ao servidor.
apertar um boto submit que envia os dados de um formulrio ao
servidor atravs de uma requisio POST ou GET
apertar um boto reset, que reinicializa os campos de um formulrio
aos seus valores default.
Os controles da aplicao de banco de dados so mais complexos. preciso
que os botes faam mais que simplesmente enviar dados ao servidor. Pode ser
que o usurio da aplicao Web selecione um registro e queira apag-lo ao apertar
o boto. Pode ser que ele selecione um registro e aperte o boto para alter-lo.
Pode ser que ele queira realizar uma busca.
Para superar essa e outras limitaes do HTML, usamos JavaScript.
JavaScript possui cerca de 13 eventos e botes podem ser reprogramados para
realizarem algo diferente de limpar campos ou enviar dados. Para program-los,
usamos botes neutros (que no provocam eventos). Estes botes so
representados em HTML por:
<input type="button">

O evento de clique do boto representado pelo atributo onclick que pode


ser usado em qualquer boto e contm instrues JavaScript que devem ser
executadas assim que o boto for apertado.
<input type=button onclick="alert(O boto foi apertado!)">

Na nossa interface, fizemos com que alguns botes chamassem funes,


definidas no bloco <script> ... </script> no incio do arquivo, e outros
mudassem parmetros ocultos, representados em HTML como
<input type=hidden name="variavel" value="valor da variavel">

Os dados dos campos ocultos so passados na requisio do browser da


mesma maneira em que so passados os dados de campos de texto e outros
dispositivos de entrada. O poder do JavaScript est na possibilidade de mudar o

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-22

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

valor dos campos ocultos enquanto uma pgina est sendo exibida, em resposta a
um evento (um aperto de boto, por exemplo).
Usamos campos ocultos, por exemplo, para que o servlet saiba qual o
comando que foi solicitado pelo usurio da aplicao Web, alterando o campo
<input type="hidden" name="comando" value="getReg">

Quando o usurio aperta o boto Remover para remover um registro, o


contedo do atributo onclick desse boto executado:
<INPUT TYPE="button" NAME="tira" value="Remover..."
onclick="remover(this.form)">

o nome de uma funo JavaScript definida no incio da pgina.


this.form uma referncia que passa o prprio formulrio como argumento da
funo. A funo remover() est definida como:
remover()

<script>
function remover(entra) {
candidato = prompt("Digite nmero do registro a ser removido","");
if (candidato) {
entra.numero.value = candidato; // muda valor de campo oculto numero
if (confirm("Tem certeza que quer remover o registro " + candidato + "?")) {
entra.comando.value = "remReg"; // muda valor do campo comando
entra.submit();
}
}
}
</script>

Dentro da funo, o formulrio representado pela varivel entra.


entra.comando uma referncia ao campo oculto de nome comando.
entra.comando.value o valor deste campo que na linha marcada em negrito
acima alterado de getReg para remReg. A linha seguinte
entra.submit();

envia o formulrio. O servlet, aps decodificar a linha de dados recebida, buscar


pelo nome comando e receber o valor remReg, indicando que o usurio deseja
remover um registro. O nmero do registro a ser removido foi armazenado em
outro campo oculto que o servlet pode ler. Desta forma, possvel implementar
todas as outras funes da interface do usurio.

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-23

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

Para maiores detalhes sobre esta aplicao, consulte o cdigo fonte localizado
no arquivo DadosServlet.java (diretrio jad/apps/bancodados/user).
Os exemplos deste captulo foram testados usando o Servletrunner. Para
executar os servlets, estes precisam ser instalados no Servletrunner. A instalao
realizada atravs de um arquivo de configurao chamado servlet.properties
que vincula o nome do servlet a um arquivo .class e passa quaisquer parmetros
adicionais de inicializao necessrios. Para esta aplicao, o arquivo
servlet.properties dever conter os seguintes dados:
servlet.bdservlet.code=bancodados.user.DadosServlet
servlet.bdservlet.initArgs=\
htmlDados=j:/jad/apps/htdocs/dados.html,\
htmlSelecao=j:/jad/apps/htdocs/selecao.html,\
appHome=j:/jad/apps

O Servletrunner pode ser iniciado para esta aplicao rodando o arquivo


runServlet.sh (ou runServlet.bat) no subdiretrio /jad/apps/. Depois de
iniciado, o Servletrunner estar no ar na porta 8080 (default) e ir servir servlets
armazenados em (ou localizveis a partir de) jad/apps/. A URL para chamar o
servlet bdservlet http://servidor:8080/servlet/ bdservlet. O nome do
servidor e a sua porta devem ser os nomes e porta de onde o Servletrunner est
rodando.

10.7.Estrutura do cdigo: aplicaes intermedirias


No h grandes diferenas entre a parte cliente dessas aplicaes e as
camadas de armazenamento, do ponto de vista da camada de apresentao.
Todas implementam a interface bancodados.BancoDados. Seu cdigo fonte se est
em /jad/apps/bancodados/tier2/ remote/.
Cada servidor, porm, tem uma estrutura prpria de acordo com a
tecnologia que utiliza. Precisam rodar como processos ativos para que possam
ficar aguardando clientes. Todos os servidores possuem uma interface grfica em
bancodados.user que estende a classe abstrata DadosServerFrame. Ela possui a
infraestrutura bsica para qualquer servidor e permite que o cliente escolha um
arquivo ou uma fonte de dados JDBC que o servidor ir servir.
O pacote bancodados.tier3 contm um sub-pacote para cada
implementao de servidor. Para maiores informaes sobre essas aplicaes,
consulte o cdigo-fonte em /jad/apps/bancodados/tier3/.
Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-24

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

10.8.Onde e quando usar cada cenrio?


Applets e Servlets
Usar um applet como camada de apresentao para uma aplicao localizada
em um servidor remoto oferece as seguintes vantagens em relao a tecnologias
baseadas no servidor:
Interface grfica com mais funes e recursos. Os recursos grficos e interativos
do HTML so limitados. No possvel, por exemplo, redesenhar uma
rea da tela, trocar um formulrio por outro ou fazer aparecer um texto
na tela sem carregar uma nova pgina. Uma aplicao de pintura, que
roda como um applet, exemplo de uma aplicao que no poderia ser
implementada apenas com HTML, JavaScript e servlets. Tambm
conseguimos manter praticamente a mesma interface usada na aplicao
de banco de dados, verso Windows, na verso applet, o que no seria
praticvel com servlets/HTML.
Resposta mais rpida a aes locais. Usando applets, tarefas como navegao
no banco de dados, mudana entre os modos de edio e navegao
entre os registros do banco so mais rpidas e eficientes. Na verso
HTML/servlets precisamos fazer uma chamada ao servidor para mudar
de modo e qualquer alterao implica na carga de uma nova pgina
HTML. Mesmo que o tempo seja menor, o usurio sempre tem a
impresso que o tempo maior, j que a interface da aplicao some por
uns instantes (enquanto a pgina carregada).
Flexibilidade em relao ao protocolo de transferncia de dados. A soluo
HTML/servlet est presa ao protocolo HTTP que intermedeia toda a
sua comunicao. Usando um applet, o protocolo HTTP ser usado
apenas para transferir a aplicao para o browser. Depois que o applet
estiver executando, poder usar um outro protocolo aberto ou
proprietrio para se comunicar com o servidor [SUN95].

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-25

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

Flexibilidade em relao aos tipos de dados suportados. Os browsers que


utilizamos s suportam a exibio de imagens GIF, JPEG e PNG.
Applets podem ser construdos para que suportem outros formatos
proprietrios [SUN 95].
Applets, porm, tm limitaes. O uso de servlets para intermediar o acesso
a uma aplicao remota e uma interface do usurio baseada em HTML e
JavaScript permite realizar algumas tarefas difceis ou impossveis para os applets:
Interface do usurio disponvel imediatamente. A interface do usurio de uma
aplicao baseada no servidor uma pgina HTML, que geralmente
carregada rapidamente. Applets geralmente so maiores e levam tempo
para iniciarem e aparecerem na tela.
Menos problemas de compatibilidade. Aplicaes baseadas no servidor podem
ser utilizadas por um pblico-alvo mais amplo. Suporte total a Java
raro at nos browsers mais recentes. Uma aplicao baseada no servidor
est praticamente imune a incompatibilidades entre verses e fabricantes
de browser. O applet de banco de dados s roda sem problemas em
verses mais recentes dos browsers comerciais.
Menos restries de segurana. Existem vrias restries de segurana
associadas aos applets. Applets no podem2, por exemplo, ter acesso
mquinas da rede que no sejam a mquina de onde vieram. Servlets,
como rodam no servidor e no no browser, esto livres desta restrio.
Applets e servlets no so tecnologias concorrentes. Podem ser usadas em
conjunto com grandes benefcios, aproveitando as vantagens de ambos.

Clientes Web e clientes nativos


O objetivo desta discusso apontar as principais diferenas entre
aplicaes Web, executando em browsers, e aplicaes nativas, executando em
sistema operacional nativo (Windows, por exemplo). As duas formas so
aplicadas em situaes diferentes. Podemos utilizar os resultados quanto ao
desempenho para descobrir quando vale a pena fazer o download da aplicao para
instalao local (e acesso remoto) em vez de usar a interface proporcionada pelo
applet dentro do browser.

possvel reduzir as restries de segurana usando applets assinados.

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-26

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

A possibilidade de rodar uma aplicao dentro de um browser um dos


principais avanos proporcionados pela linguagem Java ao ambiente Web. As
vantagens so muitas:
Facilidade de distribuio. Na forma de um applet, a interface cliente da
aplicao poder ser distribuda facilmente atravs de uma Intranet ou da
Internet, bastando que o usurio acesse a URL da pgina onde o applet
est localizado.
Facilidade de atualizao. A qualquer momento a aplicao pode ser
atualizada. Na prxima vez que um usurio solicitar o applet, ele j ter a
ltima verso.
Facilidade de uso e instalao. No preciso instalar o applet. Tendo-se um
browser, s carreg-lo.
Disponibilidade imediata. O applet est imediatamente disponvel. No
preciso obter drivers externos ou instalar ambientes de execuo. Os
principais browsers do mercado oferecem um ambiente de execuo
nativo.
Segurana embutida. Applets descarregados pela rede so sempre
verificados pelo browser e no tm acesso ao sistema de arquivos local.
Para eliminar essas restries e ainda assim operar em um ambiente
seguro, pode-se assinar applets digitalmente e fazer uso dos recursos de
criptografia e autenticao disponveis em Java.
Apesar de todas as vantagens, o ambiente Web ainda no segue um padro
bem definido. Os browsers apresentam incompatibilidades, so pouco eficientes
e podem impor restries em excesso. Rodar uma aplicao sobre o sistema
operacional nativo, portanto, pode ser uma opo j que existem ambientes de
execuo Java para os principais sistemas operacionais, permitindo que o
programa rode em Windows, Unix, Macintosh, etc. mesmo fora de um browser. Um
usurio pode instalar a plataforma Java em sua mquina e rodar a aplicao
cliente localmente, quando quiser. O browser seria usado apenas uma vez, para
fazer o download da aplicao. As principais vantagens desse modelo sobre os
applet so:
Controle sobre restries de segurana. As restries impostas aos applets pelos
gerentes de segurana dos browsers podem ser excessivas. No

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-27

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

possvel, por exemplo, fazer com que um applet3 imprima, salve um


arquivo temporrio em disco local, ou realize conexes a outras
mquinas da rede [GOSL96]. Com uma aplicao independente,
podemos implementar um gerente de segurana mais flexvel, com
menos restries.
Maior velocidade. Verificamos que a aplicao de banco de dados rodando
como uma aplicao Windows apresentou um tempo de resposta e
requisio bem menor quele obtido com a mesma aplicao, local,
usando um applet. Isto no leva em conta o trfego na rede, j que a
medio foi obtida com o acesso local. O gerente de segurana e o
prprio browser contribuem para o baixo desempenho do applet.
Independncia de fabricante de browser. Poucos browsers suportam CORBA,
Swing, Java2D, RMI sobre IIOP e outros recursos que s recentemente
passaram a fazer parte da plataforma Java. Se browser algum suporta um
recurso essencial de uma aplicao, ser necessrio que ele descarregue
toda a API que contm as classes usadas pelo recurso, todas as vezes em
que for executado.
Possibilidade de oferecer mais recursos. Applets so construdos sob um regime
de austeridade. Precisam ter o menor tamanho possvel e
freqentemente evitar usar novas e eficientes APIs, por falta de suporte
dos browsers. Com uma aplicao nativa, possvel incluir recursos
melhores, utilizar APIs proprietrias mesmo que isto resulte em uma
aplicao maior. O tamanho menos crtico pois o produto s ser
descarregado uma vez, e depois ser instalado localmente.

10.9.Resumo
Este mdulo analisou um exemplo de aplicao Java que utiliza as
tecnologias exploradas em mdulos anteriores. Tambm comparou diferentes
implementaes da camada de apresentao (interface do usurio) de uma mesma
aplicao, que pode rodar como applet, em um browser Web; como aplicao
independente, sob o sistema operacional Windows; ou como servlet, em um
servidor Web gerando pginas dinamicamente para um browser.
3

possvel reduzir as restries de segurana usando applets assinados.

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-28

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

Os resultados da anlise fornecem subsdios que podem orientar decises


para usar uma ou outra interface do cliente. As discusses e comparaes
realizadas neste captulo esto resumidas na tabela abaixo, para consulta rpida.
Tabela 10-3

Interface grfica
Tempo de resposta da GUI
(resposta a eventos locais)
Tempo de resposta de
operaes de rede
Protocolos suportados
Formatos que podem ser
exibidos (tipos de dados)
Recursos e APIs Java
suportadas pela aplicao
Segurana
Facilidades de distribuio,
atualizao e instalao
Flexibilidade de
desenvolvimento4
Facilidade de
desenvolvimento6
Quantidade de
modificaes e cdigo
adicional a escrever7
Suporte em JDK 1.2
(Java 2)
Suporte em JDK 1.1
Suporte em JDK 1.0

Cliente Windows

Cliente applet

Completa e interativa (usa


todos os recursos do pacote
java.awt)
Melhor tempo de
resposta (GUI nativa)
Melhor tempo de
resposta
Qualquer um

Completa e interativa (usa


todos os recursos do pacote
java.awt)
Melhor tempo de
resposta (GUI nativa)
Tempo adicional devido
ao browser
Qualquer um

Qualquer tipo

Qualquer tipo

Todos os recursos
disponveis
Restries definidas pelo
programador
Usurio precisa instalar
(uma vez) e atualizar.

Apenas recursos
disponveis no browser
Restries impostas pelo
browser (-assinados)
Instalao automtica
aps carga pelo browser,
a cada acesso.
Limitada por herana
(precisa estender a classe
Applet).
Mesmo nvel que
aplicao de referncia.
Poucas modificaes (usa
mesma interface grfica).

Cliente HTML +
servlet HTTP
Limitada (interatividade depende
de programao adicional em
JavaScript)
Pior tempo de resposta
(precisa carregar nova pgina)
Tempo adicional devido ao
protocolo HTTP
HTTP
HTML, GIF, JPEG, PNG e
tipos suportados pelo
browser usado
Todos os recursos
disponveis
Restries definidas pelo
programador e servidor
Instalao prvia no servidor
Web. Usurio simplesmente
usa o servio.
Limitada por polimorfismo
(precisa implementar
interface Servlet)5.
Requer conhecimentos de
HTML e HTTP.
Algumas modificaes
(precisa gerar HTML).

java.applet (ncleo)

javax.servlet (extenso)

java.applet (ncleo)

javax.servlet (extenso)

java.applet (ncleo)

No suportado.

Total (por ser aplicao


de referncia).
Maior (referncia).
Nenhum (referncia).
java.awt e javax.swing
(ambos do ncleo JDK)
java.awt (ncleo) e
com.sun.java.swing
(extenso)
java.awt ( ncleo)

Necessidade de seguir regras rgidas, como herana de certas classes, implementao de certos mtodos,
utilizao dentro de certos parmetros. Herana (extenso de classes) bem menos flexvel que polimorfismo sem
herana (implementao de interfaces) uma vez que Java no suporta herana mltipla de implementaes, mas
permite que uma classe implemente vrias interfaces.
5 Tipicamente implementam-se servlets HTTP atravs de herana, estendendo a classe HttpServlet que por sua
vez implementa a interface Servlet (polimorfismo sem herana).
6 Leva em considerao nmero de linhas de cdigo adicionais (em relao aplicao Windows) que precisam ser
escritas, linguagens e tecnologias que devem ser conhecidas (como HTML, HTTP). No leva em conta a
necessidade de se aprender a API especfica para cada tecnologia.
7 Em relao aplicao Windows.
4

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-29

Java 10 Aplicao Java Distribuda Multiplataforma e Multiprotocolo

Na plataforma Web, tanto applets, servlets ou ambos podem ser usados.


Servlets so indicados quando a aplicao requer comunicao com outras
aplicaes ou informaes localizadas na mquina servidora, e quando uma
aplicao necessita atingir um pblico-alvo amplo, que no pode ser excludo por
no possuir um browser de ltima gerao.
Applets so recomendados nas aplicaes Web em que os clientes possuem
browsers de ltima gerao e quando a aplicao requer grande interao em
tempo real no cliente (desenhos, por exemplo). O inconveniente o download
de um programa grande e a falta de suporte por alguns browsers. As restries
podem ser atenuadas por applets assinados.
O uso de aplicaes independentes (sem usar browsers ou servidores
HTTP) permite que se ofeream mais servios, interatividade e velocidade de
acesso maior que applets e servlets, mas traz o inconveniente de requerer
download e instalao por parte do cliente (o que raro em aplicaes Web, mesmo
em intranets).
Fonte:
Helder L. S. da Rocha. Dissertao de Mestrado. Apndice C. Universidade Federal da
Paraba, Campus de Campina Grande, 1999.

Copyright 1999, Helder L. S. da Rocha. Todos os direitos reservados. EP:SF-Rio/D99

J10-30

Você também pode gostar