Você está na página 1de 8

Uma Aplicaca o da Chamada Remota de Metodos

para Ajax em PHP


Felipe Butcher Camargo
Departamento de Ciencia da Computaca o
Pontifcia Universidade Catolica
Belo Horizonte, Minas Gerais
Email: felipebutcher@gmail.com

AbstractDevido ao grande crescimento da utilizaca o da


Internet tanto por parte de grandes corporaco es quanto por
usuarios que utilizam o computador eventualmente, surgem
algumas necessidades no que se refere a` praticidade, usabilidade
e portabilidade das aplicaco es Web. Um nome recente e muito
importante no mundo da Internet e o Ajax (Asynchronous
JavaScript and XML), metodologia de desenvolvimento que tem
alavancado o desenvolvimento de sites mais inteligentes e ampliado a possibilidade da criaca o de sistemas Web com muito mais
recursos e inovaco es inusitadas. Este trabalho apresenta uma
metodologia mais consistente e, de certa forma, mais academica
para o desenvolvimento Web utilizando Ajax, alem de uma
ferramenta para facilitar a aplicaca o da mesma em sistemas
simples ou complexos.

I. I NTRODUC AO
O termo Ajax (Asynchronous JavaScript and XML) foi
proposto em fevereiro de 2005 [1]. Nesta e poca, a ideia de
trazer dados do servidor sem ter que atualizar a pagina a cada
interaca o entre o computador do usuario e o servidor ja vinha
sendo utilizada, porem sem um termo que definisse o que era
feito. Com o Ajax, a transferencia de dados entre cliente e
servidor nao e feita da maneira tradicional pelo navegador, mas
sim implementada pelo Javascript, linguagem de programaca o
que roda encapsulada no navegador e permite que se execute
scripts em uma pagina Web comum.
Em uma pagina Web tradicional, o servidor retorna o
conteudo da pagina requisitada pelo cliente, o navegador simplesmente exibe o conteudo na tela, substituindo o conteudo
anterior, mesmo que grande parte dele seja igual. Algumas
paginas utilizam processamento no servidor atraves de linguagens de programaca o Web como por exemplo PHP [12]
ou ASP [13]. Para este tipo de tecnologia, o servidor possui
um interpretador que permite a execuca o de programas escritos utilizando estas linguagens e que geram dinamicamente
os conteudos. Com este tipo de tecnologia e possvel criar
aplicaco es Web que acessam bancos de dados e que podem ser
utilizadas por varios clientes ao mesmo tempo, como foruns,
bate-papo, comercio eletronico, entre outros.
Uma pagina construda utilizando Ajax funciona de maneira
diferente, a requisica o nao e feita pelo navegador, mas sim
por um programa escrito em Javascript rodando dentro do
navegador, como representado na Figura 1.1. Explicando melhor, o usuario possui em seu navegador uma interface e um
programa Javascript. O programa Javascript possui diversos

componentes, entre eles, o que merece e nfase neste momento,


e o componente responsavel por enviar mensagens ao servidor
e receber a resposta. As mensagens enviadas consistem em
uma URL formada pelo nome do servidor que hospeda a
aplicaca o e um conjunto de variaveis que serao recebidas pelo
programa servidor e tratadas da maneira adequada. O retorno
sera enviado da mesma maneira como se envia um conteudo
HTML porem recebera somente o conteudo necessario naquele
momento. Por exemplo, se o usuario deseja saber o nome
do autor de determinado livro, o programa Ajax requisitara
somente o nome do autor, e nao mais uma pagina inteira com
o nome do autor contido.
O Ajax pode ser utilizado juntamente com alguma linguagem de programaca o de servidor, assim e possvel desenvolver um sistema que possua um programa rodando no
servidor e outro programa rodando no navegador do cliente,
permitindo obter muito mais interatividade. Os dois programas deverao se comunicar de maneira a formar um sistema
somente.

Fig. 1. Comparativo entre metodologia tradicional e Ajax (GARRETT, 2005)

Para ilustrar, vejamos um exemplo. Em uma busca de

biblioteca, o usuario precisa encontrar um livro sobre XML. O


usuario quer um livro em portugues e somente lembra o nome
do autor. A pagina de busca ja foi carregada, somente uma vez,
com toda a sua interface que contem textos, botoes e figuras.
Uma tabela exibira os provaveis resultados para o usuario, esta
tambem ja esta montada, porem com os campos em branco.
Um campo de texto permite que o usuario digite o nome do
autor, outro permite que o usuario informe o assunto e, em
outro, o idioma. Um botao definido para buscar executa um
comando Javascript, comando tal que monta a URL com os
parametros, e faz a chamada ao servidor.
O servidor recebera a requisica o, que traz o nome do autor,
o idioma e o assunto desejados, monta a SQL conveniente e
faz a consulta ao banco. O resultado da pesquisa trara o nome
do livro, a editora, o ano de publicaca o, sua situaca o (se esta
alugado ou nao), entre outros dados. Com estes dados devera
ser montado um texto com os nomes das variaveis e seus
valores, de preferencia em XML. Este texto sera retornado ao
cliente.
De posse dos dados, o Javascript identifica as variaveis e
utiliza seus valores para preencher os campos da tabela que
ja estava montada. Este processo esta representado na Figura
1.2. Toda esta operaca o necessitou de apenas alguns bytes para
a requisica o e para o retorno, onde foram, os parametros de
pesquisa na ida e os dados do livro encontrados na volta, ao
inves de retornar novamente toda a pagina com centenas de
linhas HTML e imagens.

Fig. 2.

Exemplo de Aplicaca o do Ajax

Outro exemplo classico da utilizaca o do Ajax e o Google


Maps [15], no qual o usuario clica no mapa e arrasta para
move-lo para outra localizaca o proxima. Ao arrastar a imagem
do mapa, o Ajax vai recuperando do servidor as partes do mapa
proximas ao local onde o usuario esta navegando. Assim o
usuario nao precisa esperar muito tempo ate que o mapa seja
carregado, pois sao carregadas somente as partes que ele deseja
visualizar.
Mais um bom exemplo e o Google Suggest [17], no qual o
Google vai mostrando sugestoes a` medida em que o usuario vai
digitando sua pesquisa. Ao digitar o incio de uma palavra, sao
recuperadas palavras com o mesmo incio digitado de acordo
com as pesquisas mais procuradas no Google, isso ajuda o
usuario a encontrar exatamente o que esta procurando.

II. M OTIVAC AO
Depois de analisar e testar alguns frameworks, verificou-se
que ainda falta a aplicaca o de uma metodologia bem definida
ao assunto. A ideia do trabalho e aplicar a chamada remota de

metodos no Ajax, de maneira que se possa chamar metodos


no servidor de maneira transparente atraves do Javascript.
Os frameworks atuais implementam a comunicaca o evitando
com que o desenvolvedor tenha que desenvolver codigos
complexos que variam de navegador para navegador. Porem,
as requisico es sao feitas passando-se parametros para a URL
chamada a qual possui um programa servidor, o desenvolvedor
precisa tratar a requisica o com seus parametros definindo a
sada. O programador, sabendo o que os metodos no servidor
fazem, teria mais facilidade em simplesmente chamar os
metodos e tratar seus retornos no proprio cliente.
Um dos frameworks, O Google Web Toolkit [16], permite
que voce escreva programas em Java que serao automaticamente traduzidos em arquivos HTML e Javascript, facilitando
o trabalho do programador, porem nao implementa um suporte para o lado do servidor. O framework mais utilizado
atualmente e tambem o que mais cresce e o prototype [9].
O prototype vem sendo largamente utilizado na produca o de
paginas Ajax em todo o mundo, tanto por desenvolvedores
iniciantes quanto para experientes. Isso se deve ao fato de o
framework ser de uso facil, completamente flexvel e possuir
uma compatibilidade muito boa com outros frameworks, expandindo suas capacidades de produca o. O motivo que leva
os programadores iniciantes em Ajax a utilizar o prototype
e a sua facilidade de programaca o, com apenas 2 linhas de
codigo se consegue fazer uma requisica o ao servidor e exibir
o resultado.
Existem tambem varios outros frameworks e plugins desenvolvidos sobre o prototype e que possuem total compatibilidade um com o outro e permitem que o programador utilize
em sua pagina efeitos como drag and drop, autocomplete
ou fade, de maneira extremamente facil, sem tornar o site
sobre-carregado e sem a utilizaca o de flash. Tais recursos
permitem um aprimoramento da usabilidade do sistema, o que
antes so era conseguido em sistemas desktop. Podemos citar
como exemplo o JsWindows (permite a exibica o de janelas
Javascript internas ao navegador) e o script.aculo.us [18] (com
milhares de recursos), ambos sao plugins do prototype.
Um problema a ser enfrentado para se desenvolver este
trabalho seria o fato de um programa PHP ter o tempo de vida
somente do momento em que o servidor recebe a requisica o
ate a hora em que o resultado e retornado. Isto pode ser
contornado utilizando-se a memoria do servidor atraves das
variaveis de seca o, as quais permanecem ativas enquanto o
usuario nao fechar o navegador, com isto podemos fazer com
que tenhamos um programa rodando no servidor, gravando
os objetos serializados em variaveis de seca o.
A. Objetivo Principal
Para conseguir implementar a comunicaca o adequada para
se desenvolver um sistema em Ajax, o programador precisa
realizar uma serie de procedimentos como, por exemplo, diferentes implementaco es que diferentes navegadores necessitam,
montagem de uma estrutura do conteudo de retorno (geralmente XML) para que as variaveis possam ser reconhecidas
pelo cliente, entre outros. O objetivo principal do trabalho e o

desenvolvimento de um framework que faca todo este trabalho


repetitivo e desgastante que um programador precisa realizar
para desenvolver uma aplicaca o em Ajax. Acredita-se que ter
transparente em Javascript todo o acesso ao sistema tornara
mais intuitivo e simples o desenvolvimento de um sistema Web
em Ajax.
O desenvolvedor poderia entao, utilizar a UML normalmente enquanto define a estrutura do sistema, desenvolvendo
as classes de persistencia e a comunicaca o com o banco de
dados. Apos esta etapa, o framework ira gerar os codigos de
comunicaca o entre cliente e servidor, e o desenvolvedor ira
trabalhar diretamente no Javascript fazendo as chamadas dos
metodos no servidor atraves de eventos disparados no HTML,
ficando livre para desenvolver ou aplicar o design do site em
HTML.
B. Proposta
Para fazermos a aplicaca o da soluca o de chamada remota de
metodos em Ajax, e necessaria a geraca o de componentes que
implementam a comunicaca o entre cliente e servidor, estes sao
chamados em computaca o distribuda de Stub e Skeleton. A
ideia e o desenvolvimento de uma ferramenta, encarregado de
gerar tais componentes. A ferramenta desenvolvida trabalha
sobre as tecnologias PHP5, que ja possui implementaca o com
orientaca o a objetos, e Javascript, o qual possura as interfaces
para a chamada de metodos PHP no servidor. Inicialmente, o
desenvolvedor implementa as classes PHP que representam
as entidades persistentes, a ferramenta trabalha sobre estas
classes, gerando os codigos do Skeleton no servidor (PHP)
e os codigos Javascript que farao a interface.
O desenvolvedor com as classes prontas, insere as classes
no sistema para serem tratadas, logo apos devera indicar
ao sistema quais objetos e metodos no servidor poderao
ser chamados pelo cliente. O framework entao lera todos
os codigos indicados, tratando possveis herancas e outros
que poderao gerar alguma particularidade no funcionamento
do Stub. Apos este passo o desenvolvedor tera em maos
todos os componentes necessarios para o funcionamento de
sua aplicaca o. Agora e so desenhar a interface (HTML) e
programar o cliente. No programa do cliente o programador
ja podera chamar os metodos do servidor que foram indicados
para comunicaca o.
III. T RABALHOS R ELACIONADOS
O desenvolvimento em Ajax vem ganhando varios adeptos
atualmente principalmente devido a` sua grande amplitude de
aplicaca o. O Ajax pode ser utilizado para uma grande variedade de aplicaco es, alem de tornar possvel a transformaca o
de varios tipos de sistemas desktop em sistemas Web. Foram
estudados alguns trabalhos a respeito do assunto, demonstrando a variedade de possibilidades de aplicaca o do Ajax.
A. Construindo Aplicaco es com Ajax
` medida que a Internet foi evoluindo, com o tempo foi
A
tornando-se mais amigavel com o usuario e permitindo-se
construir sites cada vez mais interativos. Com o tempo foram

surgindo novas tecnologias que permitem que os sites se


tornem cada vez mais programaveis, como por exemplo, o
Javascript, o flash, o PHP e o ASP entre outros. Entretanto,
softwares Web continuavam, mesmo com essas tecnologias,
com algumas limitaco es como baixa performance e falta de
interatividade, especialmente quando comparados com softwares desktop [5].
Agora, os desenvolvedores possuem nas maos uma nova
ferramenta, que possibilita tornar os softwares Web mais
parecidos com os softwares desktop. Esta ferramenta se chama
Ajax (Asynchronous JavaScript e XML). Alem de se parecer
mais com softwares desktop, sites construdos com Ajax desenvolvem performance melhor do que sites tradicionais, isso
porque o funcionamento do Ajax permite recuperar informaca o
do servidor e exibir esta informaca o na tela sem que a pagina
seja recarregada, atraves de uma chamada feita pelo Javascript.
Por exemplo, o Google Maps, permite que o usuario clique
no mapa e arraste-o para visualizar partes do mapa que antes
nao estavam sendo exibidas na tela, diferente, por exemplo
do Terra Mapas [19] onde, quando o usuario deseja ver um
pedaco logo abaixo no mapa, e necessario recarregar a pagina
com a parte do mapa desejada.
Todos os navegadores atuais suportam o Ajax, como ele
usa apenas o Javascript como tecnologia necessaria no navegadores para funcionar. Apesar de tudo, o Ajax ainda precisa desenvolver alguns conceitos que estao defasados, como
complexidade de desenvolvimento e seguranca. Ajax oferece
melhorias de performance e interatividade ao desenvolvimento
Web, alguns conceitos que antes so eram possveis em softwares desktop agora tambem podem ser implementados via
Web, permitindo-se construir sites com melhor usabilidade e
ferramentas mais poderosas como editores de texto e programas de tratamento de imagens.
B. Seguranca
Os sistemas Web podem se tornar inseguros devido ao
grande numero de tecnologias novas sendo usadas e tambem
ao fato de que a` s vezes programadores utilizam essas novas tecnologias de maneira incorreta produzindo brechas de
seguranca em seus sistemas. Alem disso, quando tratamos de
sistemas Web, deixamos todo o codigo residente no navegador
a` disposica o do usuario [3].
O numero de vulnerabilidades em sistemas Web ultrapassou
o numero de vulnerabilidades de todos os outros tipos de
aplicativos. Lembrando que cada vez mais os sistemas estao
sendo implementados para Web. O Ajax, por ainda ser pouco
conhecido e pela falta de experiencia de programadores neste
estilo, cria a possibilidade de vulnerabilidade nos sistemas
criados com este metodo.
Por exemplo, certa vez um garoto de 14 anos descobriu por
acaso um serio bug no Gmail. Ao enviar um codigo Javascript
de outro mail para o seu Gmail, o codigo foi executado
no seu navegador ao visualizar o conteudo da mensagem.
Algumas entidades como a Web Application Security Project
estao colaborando com este cenario atraves da criaca o de

frameworks e ferramentas. De qualquer maneira ainda faltam


muitas melhorias neste processo.
Segundo Mark Curphey, a Internet e diferente, os codigos
nao sao compilados e estao espalhados entre servidores e
clientes. A melhor ferramenta de teste e o proprio homem,
porem ferramentas automaticas ajudam os homens a ficarem
na frente nesta corrida.
C. O uso do Ajax em sistemas geograficos
Outra aplicaca o do Ajax sao os Sistemas de Informaca o Geografica como o Google Maps [6] . Um Sistema de Informaca o
Geografica (SIG ou GIS - Geographic Information System,
do acronimo ingles) e um sistema de hardware, software,
informaca o espacial e procedimentos computacionais, que
permite e facilita a analise, gestao ou representaca o do espaco
e dos fenomenos que nele ocorrem. O artigo apresenta como
resultado um framework eficiente para integraca o de Sistemas
de Informaca o Geografica com o Ajax. A ideia do framework
e integrar diferentes aplicaco es em diferentes plataformas,
utilizando o Javascript com Web Services e XML, aumentando assim a performance de aplicaco es Web de informaca o
geografica. Explicando melhor, o framework permite que navegadores leiam dados de servidores de informaco es geograficas
e exibam a informaca o ao usuario de forma transparente e
rapida, atraves do Ajax. A leitura desses dados e feita da
seguinte maneira: o navegador requisita a informaca o a um
servidor Web, este servidor, atraves de uma aplicaca o JSP,
recupera a informaca o do servidor GIS e a retorna para o
navegador do cliente.
A utilizaca o do Ajax permite ainda a criaca o de ferramentas
diversas e com utilidades ate entao possveis somente em
programas locais como, por exemplo editores de imagens [2].
D. Arquitetura
Alguns frameworks existentes conquistaram reconhecimento e se tornaram grandes contribuico es para o desenvolvimento Ajax. A necessidade de tais ferramentas e muito
significativa, uma vez que o desenvolvimento em Ajax requer
a execuca o de uma grande quantidade de trabalho repetitivo e
complicado para se obter um aplicativo consistente e seguro.
Tres dos grandes frameworks existentes atualmente sao o
Google Web Toolkit, o Echo2 e o Backbase [7].
O Google Web Toolkit (GWT) foi desenvolvido devido ao
fato dos programadores do Google estarem levando muito
tempo para desenvolver suas aplicaco es e tornando-as muito
complicadas. Profissionais do Google pensaram entao em criar
uma aplicaca o para ajudar seus desenvolvedores a utilizar
padroes para a programaca o Ajax e facilitar tecnicas repetitivas. O GWT e uma aplicaca o Java que torna mais facil o
desenvolvimento orientado a objetos. A ideia inicial do GWT
e programar em Java para gerar automaticamente os codigos
Javascript. O codigo gerado pelo GWT faz com que a maioria
do processamento seja executado no lado Cliente, fazendo com
que o trafego com o servidor diminua, porem as aplicaco es
ficam mais pesadas no navegador do cliente.

O Echo2 permite ao desenvolvedor programar suas


aplicaco es seguindo o paradigma orientado a objetos. A
ferramenta consiste numa aplicaca o servidor em J2EE e
uma aplicaca o cliente em Javascript. A interaca o clienteservidor fica invisvel ao programador. O sistema baseia-se
na atualizaca o de estado entre cliente e servidor.
O Backbase e um software proprietario, bem completo e
que ja possui grandes clientes como a Ferrari, seu framework
foi um dos primeiros frameworks comerciais para Ajax. O
Backbase utiliza uma linguagem de interface propria chamada
de BXML. O lado servidor do framework e desenvolvido
em JSF. As mudancas de estado no cliente sao enviadas ao
servidor em determinados eventos.
A Microsoft tambem criou um framework com o intuito
de quebrar a complexidade de sistemas Ajax [11]. O Atlas
se apresentou um bom framework, porem possui algumas
limitaco es, com ele so e possvel desenvolver na linguagem
servidora da Microsoft, o ASP, alem de so funcionar em
plataforma Windows [4].
E. Chamada Assncrona de Metodos Remotos
Java RMI e a implementaca o de chamada remota de
metodos em Java. Este modelo permite que um programa
cliente obtenha referencia para um objeto remoto e faca
chamadas aos metodos deste objeto. Existe em Java RMI
uma limitaca o no que se refere ao fato de nao ser possvel
fazer chamadas remotas de maneira assncrona. O conceito de
chamadas assncronas define que o programa cliente prossiga
na sua execuca o apos realizar uma chamada a um metodo
remoto. Isso evita que o programa fique ocioso enquanto
aguarda o resultado de uma chamada.
A noca o de sistemas distribudos tem se firmado cada vez
mais como o padrao de plataforma de desenvolvimento de
software [8]. A programaca o distribuda, atraves de chamada
remota de metodos, caracteriza uma soluca o mais organizada
para o desenvolvimento de aplicaco es distribudas do que
todos as soluco es utilizadas ate hoje com os frameworks e
ferramentas existentes para Ajax.
Seria interessante fazer essa aproximaca o, tornar o desenvolvimento em Ajax semelhante a` metodologia utilizada em
chamada remota de metodos, para tornar mais ainda orientado
a objetos e organizado. Isso facilitaria a analise e modelagem
UML dos sistemas em Ajax.
F. JSON-RPC-Java
Uma ferramenta recentemente criada implementa algo bem
parecido com o objetivo deste trabalho, porem para um sistema
servidor em Java. A ferramenta possibilita a chamada remota
de metodos de uma aplicaca o em Java rodando no servidor
atraves de Javascript rodando em um navegador. Alem disso,
possibilita o mapeamento de objetos atraves de reflexao [10].
Segundo a documentaca o do projeto, o mesmo apresenta
uma limitaca o, a ferramenta nao da suporte a referencia circular. Tanto o PHP quanto o Javascript possibilitam referencia
circular, alem disso a metodologia utilizada em Ajax tambem

possibilita a utilizaca o de referencia circular em transporte de


objetos serializados.
Outra limitaca o a ser vencida neste projeto e o fato de
o tempo de vida de um programa PHP ser diferente de um
aplicativo Java. Um programa PHP se inicia quando e feita
a requisica o e termina quando o mesmo retorna o conteudo
para o cliente. Isso pode ser contornado utilizando-se variaveis
de sessao, variaveis que permanecem existentes na memoria
do servidor entre uma requisica o e outra. Os objetos criados
devem ser serializados e armazenados nestas variaveis. A
serializaca o em PHP da suporte a composica o e ate mesmo a
referencia circular.
IV. M ETODOLOGIA
Como foi visto anteriormente, nosso objetivo e otimizar
a programaca o em Ajax, diminuindo a complexidade e facilitando trabalhos complexos que o Ajax exige. Para isso
precisamos alcancar uma estruturaca o metodica padrao que
facilite o uso para desenvolvedores acostumados com os
padroes de orientaca o por objeto.
A. Desenvolvimento
A ideia do trabalho e que o desenvolvedor possa chamar
os metodos dos objetos no servidor de maneira transparente
atraves do Ajax. No framework prototype, por exemplo, o
desenvolvedor faz a chamada atraves de uma URL, passando
como parametro os nomes das variaveis e seus valores, no
servidor, e necessario implementar este tratamento, receber
as variaveis e montar o resultado, assim como se monta
uma pagina com o PHP, o resultado entao e trazido para
o Javascript que pode trata-lo e exibi-lo na tela ou realizar
qualquer outra aca o com ele.
A metodologia utilizada em chamada remota de metodos
trata os metodos do servidor como se estes estivessem implementados no proprio cliente. Em Java RMI o desenvolvedor
obtem uma referencia para um objeto remoto atraves de um
lookup apontando para a maquina servidor. O Java RMI, alem
disso possui um gerador dos componentes de comunicaca o
entre cliente e servidor. Apos gerados estes componentes
(Stub no cliente, Skeleton no servidor), o cliente pode acessar
os objetos do servidor de maneira transparente, isto facilita
o desenvolvimento ja que o desenvolvedor nao precisa se
preocupar com a implementaca o da comunicaca o, apenas deve
conhecer os objetos do servidor e como estes se comportam.
A ideia do trabalho e exatamente a mesma ideia de Java
RMI. A ferramenta proposta realiza a leitura de todo o codigo
devidamente orientado a objetos implementado no servidor, e
gera o codigo de obtenca o de referencia e chamada de metodos
dos objetos. Alem disso gera o codigo Javascript com as
interfaces para a chamada dos metodos no servidor. O desenvolvedor, ciente do funcionamento das classes no servidor, faz
as chamadas dos metodos remotos passando como parametro
variaveis do Javascript, que podem ser, por exemplo, variaveis
de formularios HTML, e recebe seus resultados como retorno
normal das funco es, podendo utiliza-los da maneira correta,
exibindo-os na tela em campos de formularios, ou inserindo

codigos HTML retornados pelas funco es no HTML ja presente


na pagina naquele momento.
Outra vantagem da ferramenta apresentada neste trabalho e
a implementaca o automatica de soluco es para os problemas
do Ajax ja bem conhecidos por programadores como, por
exemplo, o funcionamento do botao voltar, que geralmente
e ativado no navegador quando o endereco do site muda, o
que nao acontece quando se trabalha com Ajax, ou ainda a
nao indexaca o completa por mecanismos de pesquisa como o
Google.
B. Estrutura de Programaca o
A ferramenta desenvolvida e capaz de gerar automaticamente os componentes de comunicaca o necessarios para o
funcionamento do sistema. O referido sistema foi desenvolvido
em PHP (servidor) e Javascript (cliente).Assim como um sistema RMI tradicional, o sistema desenvolvido com a soluca o
sugerida neste trabalho possui os seguintes componentes:
Programa Cliente
Stub
Skeleton
Programa Servidor
Os componentes citados acima estao representados na
Figura 3.1.

Fig. 3.

Estrutura de um programa RMI

O programa cliente e nada mais do que uma pagina HTML


contendo links que farao chamadas a` s funco es de objetos
declarados no Servidor. Fazendo uma analogia a Java, este
componente seria a interface com o usuario final do sistema,
assim como um jframe com botoes e caixas de texto.
O Stub e o componente responsavel pela comunicaca o com
o Skeleton e e desenvolvido em Javascript. O mesmo e capaz
de receber uma requisica o de acesso a um objeto qualquer,
envia-la ao Skeleton, receber o objeto serializado com os
metodos e gerar dinamicamente o objeto correspondente em
Javascript
O Skeleton por sua vez, recebe a requisica o de acesso
ao objeto e localiza o mesmo no programa servidor. Apos
localizado o objeto, o Skeleton recupera o objeto que esta
gravado em variavel de sessao, serializa o objeto e retorna
o mesmo ao Stub.
O programa servidor pode ser qualquer tipo de sistema
orientado a objetos e implementado em PHP5, o qual da
suporte a` orientaca o por objetos.

Note que em Java RMI os objetos remotos nao podem


ser criados por clientes tradicionalmente, porem existe uma
ferramenta que torna isso possvel, o Java 2 Remote Object
Activation [20]. Tendo em vista que esta possibilidade nao
seria uma desvantagem, e sim uma vantagem, a ferramenta
criada possibilita a criaca o de objetos remotos pelo cliente.

V. S OLUC AO
Como soluca o para o problema apresentado neste trabalho,
foi desenvolvida uma ferramenta, a qual iremos chamar de
phpAjaxRmi. A ferramenta desenvolvida e composta basicamente por dois modulos: O Stub e o Skeleton. O Stub, como
foi dito, cria objetos Javascript dinamicamente de acordo com
a resposta do servidor a` requisica o de acesso ao objeto feita.
Para isso, usamos uma propriedade dos objetos Javascript,
chamada prototype, que permite que metodos e atributos sejam
adicionados a objetos em tempo de execuca o. Isto significa que
temos uma classe padrao, chamada de RemoteObject, dentro
do Stub. Um objeto dessa classe sera instanciado para cada
objeto remoto que for criado no Javascript, no construtor
desta classe passaremos o nome da classe e um id de registro
do objeto caso ele ja exista no servidor, caso contrario sera
instanciado um novo objeto remoto.
A comunicaca o entre Stub e Skeleton e feita basicamente
por requisico es http e objetos serializados em XML. Ou seja,
o Stub envia uma requisica o via URL, passando parametros
encapsulados na mesma, e recebe os Objetos serializados,
os traduz e cria os objetos propriamente ditos. Note que
os metodos farao apenas requisico es e nao possuirao a
implementaca o, que ficara no servidor, assim como Java RMI.
O Skeleton possui uma Classe chamada Object, que recebera
como parametro em seu construtor, o nome da classe e o id do
registro (null para novo objeto). O Object entao procura em um
banco de registros para ver se ja existe um objeto registrado
com aquele id (assim como o rmiregistry do Java), caso
exista, recupera o objeto e o envia serializado como resposta
para o Stub. Este envio e feito via conteudo XML. Para
que isto seja possvel foi implementado um componente que
guarda registros de objetos, chamado de ObjectRegistry. Alem
disso, para objetos requisitados que nao estiverem no registro,
sao utilizadas as funco es do PHP: getdeclaredclasses, que
retorna os nomes de todas as classes declaradas no sistema;
getclassmethods, que retorna os metodos de uma classe ou
de um objeto; e a funca o getclassvars, que retorna todas as
variaveis da classe. A estrutura citada esta representada no
diagrama da Figura 4.1.

Fig. 4. Estrutura de uma aplicaca o criada atraves da soluca o aqui apresentada

programaca o Web bastante popular atualmente e de nao possuir


uma ferramenta que atenda bem no contexto aqui apresentado.
Devido a uma particularidade do PHP, o tempo de vida de
um programa escrito nesta linguagem e curto, o programa inicia quando a requisica o e feita e, apos a conclusao da geraca o
do HTML, termina. Para contornar este problema, foram
utilizadas as variaveis de sessao, variaveis que permanecem
residentes na memoria do servidor enquanto o cliente estiver
com seu navegador ativo. Tecnicamente, os objetos sao serializados e entao armazenados na memoria do servidor. Quando
o cliente requisitar novamente acesso ao objeto, o mesmo e
recuperado da memoria e entao e restaurado, recuperando seu
estado de existencia anterior (objeto instanciado).
Para a geraca o dos componentes, foram utilizadas, alem
do StubSkeletonGenerator, uma classe para realizar a
compactaca o e descompactaca o dos arquivos, outra para realizar a leitura dos diretorios recursivamente e atribuir permissoes aos arquivos. Estes componentes compoem o nucleo
da aplicaca o e realizam a tarefa mais importante de todo o
contexto, os mesmos estao representados na Figura 4.2.

Fig. 5.

Estrutura do gerador de componentes

A. Especificaca o da Ferramenta
A ferramenta desenvoldida foi totalmente construda utilizando as tecnologias PHP e Javascript. Todos os outros
componentes foram construdos sobre essas tecnologias. A
justificativa para a utilizaca o do Javascript se deve ao fato de
ser a linguagem de programaca o baseada em navegador mais
utilizada no mundo, alem de permitir orientaca o por objetos. Ja
a utilizaca o do PHP se deve ao fato de ser uma linguagem de

B. Exemplo de Utilizaca o
Como exemplo de aplicaca o do phpAjaxRmi, utilizamos
uma aplicaca o para fazer consultas a um banco de dados
mysql. A aplicaca o funciona basicamente da seguinte maneira:
a interface possui um campo de texto no qual o usuario entrara
uma consulta SQL. O servidor possui uma classe Banco

responsavel por manter a conexao com o banco de dados


e realizar as requisico es ao mesmo. Alem disso a interface
possui uma tabela na qual os resultados das consultas sao
exibidos. Na mesma tabela existe a opca o de alterar ou excluir
um registro, caso o mesmo pertenca somente a uma tabela do
banco.
Para utilizar o phpAjaxRmi, o usuario precisa compactar o
diretorio contendo suas classes PHP em um arquivo u nico,
o qual e inserido no programa, conforme a Figura 4.3. O
phpAjaxRmi entao executa as seguintes tarefas:
Descompacta o arquivo no servidor que hospeda o phpAjaxRmi;
Monta a estrutura de diret
orios sobre a qual funcionara a
aplicaca o depois da geraca o;
L
e cada classe, tratando linha por linha e buscando os
nomes e tipos das variaveis, os nomes dos metodos e
seus tipos de retorno e seus parametros;
Imprime um arquivo Javascript para cada classe PHP,
com todos as variaveis, metodos e parametros encontrados nas classes PHP, porem com codigos diferentes,
codigos estes que farao a chamada no servidor, converterao os objetos retornados de PHP para Javascript
e retornarao os mesmos, estes arquivos farao o papel das
interfaces de chamada dos objetos remotos;
Copia os componentes necess
arios para o funcionamento
da aplicaca o, sao eles:
- Skeleton, componente previamente gerado que recebera
as requisico es e fara o controle e execuca o dos objetos
remotos;
- PHPUnserialize [14], componente responsavel por
traduzir objetos php serializados em objetos Javascript;
- Prototype, framework Javascript responsavel por executar a parte mais baixo nvel da comunicaca o com o servidor, trata as diferencas entre os diferentes navegadores;
Finalmente, compacta toda a estrutura gerada em um
arquivo e disponibiliza o mesmo para o usuario.

Fig. 6.

Tela do phpAjaxRmi

Com a estrutura da aplicaca o em maos, o usuario pode agora


desenvolver sua aplicaca o. Considerando que o usuario tenha
inserido a classe Banco em seu arquivo inicial, sendo assim o
usuario agora possui a interface Banco, em Javascript, a qual
fara referencia ao objeto remoto no servidor.
Para concluir o desenvolvimento da aplicaca o, o usuario
agora precisa construir a interface que devera conter um campo
de texto para a entrada do comando SQL, um botao para
executar a chamada e uma tabela para exibir os resultados
da SQL executada. O usuario, alem disso devera instanciar
um objeto Banco no corpo da pagina que contem a aplicaca o,
ao chamar o construtor, e feita uma requisica o ao servidor
solicitando a execuca o do construtor no servidor, um objeto
remoto sera instanciado. Ao botao devera ser atribudo um
evento que deve ser executado quando se clicar no mesmo,
este evento devera chamar um metodo do objeto remoto que
recebera como parametro a SQL contida no campo texto
informada pelo usuario. Este metodo retornara uma matriz
com os resultados do SQL, esta matriz, contida em um objeto
PHP, sera convertida em uma matriz Javascript, que entao sera
inserida na tabela linha a linha.
Durante a implementaca o deste sistema utilizando o phpAjaxRmi, o desenvolvedor economizou milhares de linhas de
codigo. Alem disso, depois de gerado o codigo, ja ficou bem
claro o que seria necessario fazer para concluir a aplicaca o desejada, isto se deve ao fato de o desenvolvedor nao precisar se
preocupar com centenas de questoes pertinentes ao problema
e poder manter seu foco somente na estrutura dos objetos que
efetivamente fazem parte da aplicaca o.

VI. C ONCLUS AO
O desenvolvimento Web vem ganhando espaco na a rea de
tecnologia e vem cada vez mais se tornando uma necessidade para o desenvolvimento e crescimento da tecnologia da
` medida que uma nova tendencia como esta
informaca o. A
cresce, e necessario que se disponha de uma plataforma capaz
de sustentar ou ate acelerar este crescimento, de maneira que
precisamos de novas tecnologias e soluco es para que se torne
possvel sustentar todo esse crescimento e toda essa quantidade
e velocidade de informaca o.
O desenvolvimento Web tambem tem se tornado muito popular, devido ao fato de seu baixo custo operacional. Qualquer
computador atualmente conectado a` rede e capaz de rodar
aplicativos Web sem qualquer problema de compatibilidade.
Toda esta popularizaca o e crescimento fazem necessario o
desenvolvimento de novas soluco es que tornem mais a gil e
inteligente a produca o de sistemas Web. Alem disso, tambem
vem crescendo o numero de profissionais que trabalha nesta
a rea. O trabalho tem o objetivo de tornar conhecida esta necessidade da produca o mais organizada e padronizada na Web, ja
que o desenvolvimento Web possui centenas de tecnologias e
possibilidades diferentes, necessitando assim de padronizaca o
e agilidade.
O trabalho apresenta uma soluca o que pode tornar o desenvolvimento Web mais correto. A ferramenta apresentada
possibilita ao desenvolvedor maior agilidade, padronizaca o e o

protege de erros difceis de se detectar, ja que se possui grande


parte da implementaca o resolvida automaticamente. Alem da
organizaca o, utlizando o phpAjaxRmi o desenvolvedor e capaz
de desenvolver aplicaco es mais robustas, atingindo contextos
mais profissionais, possibilitando inclusive a modelagem de
sistemas corporativos com maior consistencia.
R EFERENCES
[1] Jesse James Garrett, Ajax: A New Approach to Web Applications,
Adaptive Path, 2005.
[2] Thiago Silva Borges, Jackson Gomes de Souza, Um Prototipo de Editor
de Imagens via Web, Sistemas de Informaca o - Centro Universitario
Luterano de Palmas, 2005
[3] Mike Andrews, The State of Web Security, IEEE Computer Society, IEEE
Security & Privacy, 2006
[4] Keith Smith, Simplifying Ajax-Style Web Development, Microsoft, 2006
[5] Linda Dailey Paulson, Building Rich Web Applications with Ajax, IEEE
Computer Society, 2005
[6] Ahmet Sayar, Marlon Pierce, Geoffrey Fox, Integrating AJAX Approach
into GIS Visualization Web Services, Microsoft, 2006
[7] Ali Mesbah, Arie van Deursen, An Architectural Style for Ajax, Faculty
of Electrical Engineering, Mathematics and Computer Science - Delft
University of Technology, 2006
[8] Marco Tulio de Oliveira Valente, Wendell Figueiredo Taveira, Mariza Andrade da Silva Bigonha, Roberto da Silva Bigonha, Chamada Assncrona
de Metodos Remotos em Java, Departamento de Ciencia da Computaca o,
PUC-MG - Instituto de Ciencias Exatas, 2002
[9] Prototype JavaScript Framework http://www.prototypejs.org/,
[10] JavaScript to Java AJAX communications library
http://oss.metaparadigm.com/jsonrpc/,
[11] Atlas Framework http://atlas.asp.net/,
[12] Hypertext Preprocessor http://www.php.net/,
[13] Active Server Pages http://www.asp.net/,
[14] Unserialize PHP with Javascript
http://www.phpguru.org/static/PHP Unserialize.html,
[15] Google Maps http://maps.google.com/,
[16] Google Web Toolkit http://code.google.com/webtoolkit/,
[17] Google Suggest http://www.google.com/webhp?complete=1&hl=en,
[18] script.aculo.us http://script.aculo.us/,
[19] Terra Mapas http://mapas.terra.com.br/,
[20] Java 2 Remote Object Activation
http://java.sun.com/j2se/1.4.2/docs/guide/rmi/activation.html,