Upload
tranque
View
221
Download
1
Embed Size (px)
Citation preview
www.clubedelphi.netEdição 70- ClubeDelphi6
Open Tools APIOpen Tools APIGustavo Chaurais
Crie seus próprios plug-ins para o IDE do Delphi
Se você já pensou: “o Delphi é tão bom, mas por que o IDE não tem
mais essa funcionalidade para facilitar meu trabalho?”, certamente
irá se identificar com o que a Open Tools API (OTA) permite fazer. De
maneira rápida e fácil, podemos implementar desde simples itens
no menu a poderosos assistentes com a função de automatizar a
criação de formulários. Só dependemos de nossa criatividade e/ou
necessidade para criar excelentes plug-ins e melhorar ainda mais a
ferramenta de trabalho.
Hoje existem diversos plugins, pagos e gratuitos, disponíveis na
internet para download. Por exemplo, podemos citar o GExperts e o
CnPack, que oferecem conjuntos de funcionalidades para aumentar
ainda mais a produtividade do desenvolvedor. Neste artigo, você
aprenderá a criar seus próprios plug-ins e wizards para o IDE do
Delphi, usando OTA.
Um primeiro exemplo – “Hacking”Antes de começarmos a utilizar a API do OTA, vamos ver como
podemos acessar os objetos do IDE através de pacotes. Note que
essa é uma maneira totalmente desaconselhada para a construção
de plug-ins, pois existem meios que nos garantem uma maior confia-
bilidade em tal tarefa, principalmente no tocante a compatibilidade
entre versões da ferramenta.
No Delphi, crie um pacote (File>New>Other>Package), adicione
nele uma nova unit (File>New>Unit) e salve os arquivos como
“HackingPackage.dpk” e “Hacking.pas”, respectivamente. Substitua
o conteúdo de Hacking.pas pelo código da Listagem 1 e lembre-se
que a declaração do método Register é case-sensitive.
Compile e instale seu pacote. Quando lhe for perguntado sobre a
adição de uma referência à VCL, responda OK. Veja que conseguimos
acessar facilmente os objetos internos do IDE e alterar algumas
propriedades, como o título e a cor do formulário principal. A seção
finalization da unit, que só pode ser declarada se existir initialization,
servirá para restaurarmos os valores antigos e liberarmos regiões
alocadas da memória.
Agora, a menos que você queira continuar com o IDE do Delphi
na cor vermelha, desinstale o pacote através de Component>Install
Packages.
Mais uma vez, devemos salientar que essa técnica deve ser usada
somente em situações extremas, e foi apresentada aqui apenas para
fins didáticos. Como veremos, existem soluções muito mais elegantes
para a construção de plug-ins.
Open Tools API e IOTAWizardA Open Tools API, comumente chamada apenas de OTA, pode ser
compreendida como um conjunto de ferramentas para a extensão
do IDE. Sua infra-estrutura é baseada em interfaces e pacotes, ou seja,
para registrar um plug-in que exerça determinada tarefa, é preciso
apenas implementar a interface correspondente e compilar tudo em
um pacote. Além disso, os plug-ins construídos poderão rodar tanto
no Delphi quanto no C++ Builder, sem grandes problemas.
Dica: Para o bom entendimento deste artigo, é ideal que o leitor
tenha conhecimento básico sobre o uso de interfaces. Para aprender
mais sobre interfaces, consulte a minha coluna no portal ClubeDelphi
(www.clubedelphi.net).
Listagem 1. Código de Hacking.pas do projeto HackingPackage
unit Hacking;
interface
uses Forms, Graphics;
procedure Register;implementation
var TituloAntigo: string; CorAntiga: TColor;
procedure Register;begin TituloAntigo := Application.Title; // Muda o Caption do próprio Delphi Application.Title := ‘Revista ClubeDelphi’; CorAntiga := Application.MainForm.Color; // Muda a cor do main form do IDE Application.MainForm.Color := clRed;end;
initialization
finalization Application.Title := TituloAntigo; Application.MainForm.Color := CorAntiga;end.
BOOK - Clube70.indb 6BOOK Clube70 indb 6 9/1/2006 16:18:559/1/2006 16 18 55
www.clubedelphi.net Edição 70 - ClubeDelphi 15
API HookingAPI HookingMichael Benford
Parte III – Monitorando cópia, execução e exclusão de arquivos
No primeiro artigo desta série (edição 68), fomos apresentados à
técnica de API Hooking. Vimos do que se trata, tivemos noções de
como ela funciona etc. Na segunda parte (edição 69), aprendemos
sobre o conceito de IPC (Inter Process Communication), que nos per-
mite fazer uma DLL conversar com um aplicativo executável.
Agora, na terceira e última parte desta série, iremos desenvolver
uma aplicação completa usando o que aprendemos, para sabermos
bem do que ela é capaz de fazer. Resolvi dar esse desfecho à trilogia
porque a maioria dos programadores desconhece a técnica de API
Hooking. E, quando ficam sabendo do que se trata, inicialmente não
percebem o quanto ela é avançada.
Eis o que faremos: um aplicativo que monitore as ações do sistema
operacional sobre arquivos, mais especificamente em programas
executáveis. O usuário irá criar uma lista de aplicativos protegidos
e, com base nela, nosso software irá vigiar o sistema e bloquear
alterações no arquivo.
Uma tarefa cansativaO leitor que acompanhou esta série deve ter notado que a codi-
ficação das DLL’s usadas no processo de hooking, dependendo de
quais API’s serão “hookadas”, pode tornar-se bastante trabalhosa. Para
cada API, devemos ter uma variável de função e um callback, que são
clones da declaração da API original. Para a função CreateProcess, por
exemplo, precisaríamos escrever duas vezes seus 10 parâmetros.
Pior, se fosse necessário usar a variável Next dentro do callback, o
que é comum em praticamente 100% dos casos, mais uma codifica-
ção da API deveria ser escrita. E isso é apenas para a versão Ansi da
API. Resta ainda a versão Wide, que acarretaria a digitação de mais
três declarações muito parecidas com a primeira (seriam mudados
apenas os tipos Ansi para Wide em parâmetros string). No final, isso
demandaria a codificação de 60 parâmetros.
Implementar tanto código igual em lugares diferentes, além de
ser uma tarefa trabalhosa e totalmente manual, é um processo alta-
mente propenso a erros. E se tratando de API Hooking, a omissão de
um parâmetro em callbacks e/ou variáveis Next pode levar o sistema
operacional à instabilidade, forçando um reboot no PC para que as
coisas voltem ao normal (veja Regras de hooking, na edição 68).
Um grande aliadoObservando esse problema, percebi que a automatização do
processo reduziria o tempo gasto na digitação do código extenso
e eliminaria as chances de erro por parte do programador. Então,
criei um expert para o IDE do Delphi, que gera todo o código da DLL
automaticamente, facilitando nossa vida. Usaremos essa ferramenta
para o desenvolvimento da aplicação proposta para este artigo.
Este plug-in que desenvolvi é distribuído como um software
freeware e está disponível para as versões 6, 7 e 2005 do Delphi (com
código-fonte, que pode servir de base para quem quiser criar seus
próprios plug-ins). Para baixar, acesse os sites www.projetobms.net ou
www.otamasters.net, clicando no link Downloads. Em seguida, feche
o Delphi, caso ele esteja aberto, execute o arquivo baixado e siga as
instruções apresentadas pelo assistente de instalação.
Nota: Por ser uma versão beta, algumas funcionalidades apre-
sentadas aqui podem mudar ou desaparecer (pouco provável) na
versão final.
Mãos à obra!Vamos começar pela criação da DLL que será utilizada pelo nosso
aplicativo. Como dito anteriormente, ele vai monitorar operações
sobre programas. Então, devemos saber quais API’s “hookar” em cada
situação. Essas situações, com suas respectivas API’s, são:
• Cópia: CopyFileA/W, CopyFileExA/W;
• Mudança de pasta/unidade e renomeação: MoveFileA/W, MoveFileExA/W;
• Exclusão: DeleteFileA/W;
• Execução: CreateProcessA/W;
• Edição de atributos: SetFileAttributesA/W.
Precisamos, portanto, criar uma DLL que contenha as variáveis Next
e os callbacks dessas API’s. Para isso, faremos uso de nosso wizard.
Muito bem. Clique no menu File, selecione New e Other. Clique
sobre o nó (ou aba, se seu Delphi é anterior ao 2005) API Hooking.
Marque então API Hook DLL Wizard e clique em OK. A primeira tela
do assistente será mostrada.
Como primeiro passo, devemos escolher uma biblioteca de
funções de hooking para utilizar. Por padrão, o assistente já vem
com duas pré-configuradas. Ambas são as comentadas na primeira
parte desta série de artigos, sendo uma delas a nossa já conhecida
BmsApiHook, do colega Bruno Martins Stuani. Selecione-a e clique
em Avançar. A próxima etapa é selecionar quais API’s queremos
“hookar” (Figura 1).
BOOK - Clube70.indb 15BOOK Clube70 indb 15 9/1/2006 16:19:009/1/2006 16 19 00
www.clubedelphi.net Edição 70 - ClubeDelphi 19
Cadastros com FirebirdCadastros com FirebirdEverson Volaco
Criando cadastros básicos em Delphi utilizando Stored Procedures dinâmicas
Neste artigo veremos como criar Stored Procedures dinâmicas
no Firebird 1.5.x para uso, de forma genérica, em telas de cadastro
desenvolvidas em Delphi 7 ou 2005/2006. O objetivo principal é
demonstrar como reutilizar Stored Procedures do banco de dados
em diferentes telas de cadastro de nossa aplicação, como também
reutilizar código através do suporte a herança de formulários.
Nossa aplicação Delphi conterá um formulário de cadastro genéri-
co que será utilizado como base para a criação de todas as telas de
cadastro do sistema, onde utilizaremos em todas elas apenas duas
Stored Procedures do banco de dados: uma para inclusão, alteração
e exclusão dos dados, e outra para consulta dos dados.
Nota: Para o exemplo deste artigo utilizei o Delphi 7 com o
driver DBX InterXpress for Firebird (Upscene Productions), que pode
ser baixado a partir do site www.upscene.com. O mesmo exemplo
podem ser desenvolvido em Delphi 6, 2005 ou 2006.
Criando o banco de dadosPara a criação do banco de dados e de seus objetos utilizei a ferra-
menta IBExpert Personal Edition que pode ser baixada gratuitamente
a partir do site www.ibexpert.com. Para criar o banco de dados que
será utilizado em nosso exemplo, abra o IBExpert e selecione a
opção Database>Create Database a partir do menu principal da
ferramenta.
Na janela Create Database preencha as informações necessárias
para a criação do banco de dados Firebird (veja a Figura 1).
Por padrão, o campo Client Library File vem configurado para a biblio-
teca do InterBase (gds32.dll). Como estamos utilizando Firebird, altere
esse campo apontando o mesmo para a biblioteca fbclient.dll que está
disponível dentro do diretório Bin da instalação do Firebird.
Ao clicar no botão OK será aberta a janela Database Registration
para que possamos registrar nosso banco de dados dentro do IB
Expert. Para o campo Server Version selecione o banco e versão que
está utilizando, no nosso caso Firebird 1.5. Para o campo Database
Alias, digite uma alias para o banco de dados, por exemplo: “Cadas-
tro”. Através do botão Test Connect é possível testar a conexão com o
banco de dados recém criado. Pronto, basta clicar no botão Register
para registrar o novo banco dentro do IBExpert.
Para conectar no banco basta dar um clique duplo em cima do
alias Cadastro criado na janela Database Explorer ou ainda a partir
da opção Connect to Database disponível no menu de contexto.
Criando as Tables, Generators e TriggersAntes de implementarmos as Stored Procedures com SQL dinâmico,
principal assunto deste artigo, devemos criar os outros objetos que
farão parte do nosso banco de dados, como por exemplo, as tabelas
de cadastros que serão utilizadas por nossa aplicação Delphi para
armazenar os dados informados pelo usuário.
Após conectar no banco de dados, acesse a opção Tools>SQL
Editor disponível no menu principal para acessar o editor de SQL
do IBExpert. Será dentro dessa janela que executaremos todas as
instruções DDL (Linguagem de Definição de Dados) para criar nossos
objetos, inclusive as SP’s.
Nota: A ferramenta IBExpert traz consigo opções para facilitar
a criação e gerenciamento dos objetos dentro do banco de dados.
Para acessar essas opções, basta selecionar o tipo do objeto que
deseja trabalhar dentro da janela Database Explorer e selecionar
as opções de Create, Alter ou Drop desse tipo de objeto a partir do
menu de contexto.
Começaremos criando as tabelas que farão parte do banco de
dados. Nesse exemplo criaremos duas tabelas: “Clientes” e “Forne-
cedores”. Dentro do SQL Editor entre com as instruções SQL, uma por
vez, como mostrado na Listagem 1.
Para fazer o auto-incremento do campo-chave de cada uma
das tabelas criadas, utilizaremos Generators, Triggers e a função
GEN_ID. Como visto em artigos anteriores sobre IB/FB, Generators são Figura 1. Criando o banco de dados Firebird através do IBExpert Personal Edition
BOOK - Clube70.indb 19BOOK Clube70 indb 19 9/1/2006 16:19:039/1/2006 16 19 03
www.clubedelphi.net Edição 70 - ClubeDelphi 25
Delphi + Ajax.NET Delphi + Ajax.NET Rodolfo de Faria
Otimizando o tráfego HTTP com chamadas assíncronas e Callbacks em aplicações ASP.NET
Conforme já foi dito em outros artigos da ClubeDelphi, para de-
senvolver para Web é necessário quebrar paradigmas. Um deles é
que um Web Form (ASP.NET) é limitado e não possui tantos recursos
quanto um formulário tradicional (TForm da VCL). Ajax surge como
uma opção para enriquecer as interfaces via Web e melhorar a usa-
bilidade das páginas, deixando-as mais responsivas.
O funcionamento do protocolo HTTP é chamado de request/
response, isto é, a cada ação do usuário (clique por ex.), uma requi-
sição é enviada ao servidor e após uma espera, outra página HTML
é devolvida ao browser (ou seja, há refresh total da página). Esse
ciclo “clique, espera, atualiza página” é demorado, consome banda
e é pouco eficiente. E se pudéssemos atualizar apenas as partes da
página onde de fato houve modificações? Ajax faz isso e também
permite que o usuário continue interagindo com a página enquanto
uma requisição paralela está em andamento.
Neste artigo veremos como são implementadas requisições síncro-
nas e assíncronas usando a biblioteca Ajax.NET e como as páginas
podem ser atualizadas sem efetuar postback (execução do método
Submit do formulário da página).
Uma roupagem nova para tecnologias já conhecidas O acrônimo Ajax significa Asynchronous Javascript + XML e con-
siste na combinação do objeto XmlHttpRequest com JavaScript e
XML para envio e recebimento de informações sem a necessidade
de se efetuar postback. Com ele é possível fazer requisições em
background e atualizar a tela de modo transparente para o usuário,
assemelhando-se a uma aplicação desktop.
O termo Ajax foi cunhado por Jesse James Garrett da empresa
Adaptive Path (www.adaptivepath.com), mas o objeto XmlHttp
Request já existia no Internet Explorer desde sua versão 5 como um
componente ActiveX. Outros browsers já possuem uma implemen-
tação nativa desse objeto.
Ajax .NET Ajax.NET é uma biblioteca open source para .NET Framework que
visa simplificar a programação com Ajax. Baixe-a no endereço: ajax.
schwarz-interactive.de. No site existem duas versões: Ajax.NET e Ajax.
NET Professional. Usaremos a primeira versão. Veja na Figura 1 a
ilustração de uma solução Ajax.
No lado cliente uma função JavaScript cria um objeto XMLHTTP
Request e faz uma requisição de dados ao servidor. No lado servidor um
HttpHandler recebe a requisição, chama um dos métodos marcados
com o atributo [AjaxMethodAttribute] e serializa o objeto de re-
torno usando JSON (JavaScript Object Notation). No cliente, a string
JSON é transformada novamente em objeto, a função de callback é
chamada e alguma parte da página é atualizada. Isso acontece de
maneira transparente para o usuário.
Neste artigo, para ver como o Ajax funciona na prática, vamos criar uma
aplicação simples com dois controles HtmlTextBox, onde iremos digitar
no primeiro controle e uma descrição aparecerá no segundo.
Adicionando Ajax.dll ao projeto No Delphi 2005 ou 2006 crie uma nova ASP.NET Web Application
e salve-a como “DemoAjax”. No Project Manager dê um clique de
direita e escolha Add Reference (Figura 2). No editor, clique em
Browse, localize o arquivo Ajax.dll e clique em OK. Adicione Ajax na
cláusula uses da unit.
Editando o Web.ConfigNo Project Manager dê um duplo clique no arquivo Web.Config e
insira o código a seguir dentro da tag system.web:
<httpHandlers> <add verb=”POST,GET” path=”ajax/*.ashx” type=”Ajax.PageHandlerFactory, Ajax” /></httpHandlers>
Figura 1. Ilustração de uma solução Ajax baseada na imagem obtida de www.adaptivepath.com
BOOK - Clube70.indb 25BOOK Clube70 indb 25 9/1/2006 16:19:069/1/2006 16 19 06
www.clubedelphi.netEdição 70 - ClubeDelphi32
Debugando com CodesiteDebugando com CodesiteBruno Sonnino
Conheça uma excelente ferramenta para debugar seu código
Você está desenvolvendo um aplicativo e as coisas não estão
correndo como deveriam: o programa não faz o que deveria fazer,
você tem muita dificuldade para seguir o código usando o debugger
integrado do Delphi, pois os métodos se entrelaçam e eventos são
ativados durante a execução, ou mesmo o erro está no meio de uma
rotina de reescrita da tela (nesse caso, quando o debugger é ativado
a tela é coberta e a rotina é chamada novamente), ou mesmo sua
aplicação é multithreaded, onde diversas tarefas são executadas
simultaneamente (por exemplo aplicações Web ou servidores de
aplicação DataSnap).
Normalmente, minha primeira opção quando isso acontece é co-
locar uma chamada para ShowMessage para que a caixa de diálogo
mostre o valor da variável. Quando a rotina com erro é chamada
diversas vezes, isso é impraticável, pois temos que clicar no botão
OK cada vez, além de interromper a execução, escondendo bugs e
introduzindo outros.
Passo então para a segunda opção: criar um arquivo de log, usan-
do WriteLn. Essa opção é mais interessante, pois não interrompe a
aplicação e permite mostrar todas as informações que desejo. Esse
enfoque funciona até o momento em que as funções começam a se
entrelaçar ou quando tenho que enviar informações mais complexas,
como uma imagem. Uma solução para esses problemas pode ser o
CodeSite, da Raize Software, já premiado como melhor ferramenta
de debugging pela revista Delphi Informant.
Introdução ao CodeSiteO CodeSite, que pode ser obtido em www.raize.com, é como um
super gerador de arquivos de log, pois permite enviar dados de
diversos tipos para o log, inclusive tipos personalizados. O log pode
então ser visualizado localmente, no Viewer, gravado num arquivo,
para ser visto em outro computador ou mesmo enviado para outra
máquina. As mensagens podem ser de diversos tipos, sendo mos-
tradas com ícones diferentes, podendo ser filtradas, para esconder
mensagens desnecessárias.
Após instalar o CodeSite, basta incluir a unit CodesiteLogging na
cláusula uses e usar o método Send, do objeto CodeSite, como:
CodeSite.Send(‘Teste de mensagem’);
Ao executar o programa, duas coisas acontecem: aparece um
novo ícone na barra de tarefas, ao lado do relógio: é o CodeSite
Dispatcher e a mensagem enviada é mostrada no CodeSite Viewer,
como na Figura 1.
O Send é um método sobrecarregado e pode receber diversos tipos
como parâmetro. Você pode enviar para o log de mensagens dados de
diversos tipos: strings, inteiros, imagens, listas e até dados personalizados
(como veremos mais adiante). Você pode incluir na mensagem uma
string explicativa e também um tipo de mensagem. Conforme o tipo, a
mensagem é mostrada com um ícone diferente no log.
O código a seguir envia as mensagens disponíveis no CodeSite. Note
que não enviamos a mensagem csmClear, que limpa o Viewer.
var i: Integer;begin for i := csmFirst to csmLast do if i <> csmClear then Codesite.Send(i,’Mensagem número’, i);
A Figura 2 mostra o log de mensagens após a execução do código.
Muitas dessas mensagens não serão enviadas dessa maneira. Por
exemplo, para enviar um separador ao Viewer, usamos o método Add-
Separator ou para limpar as mensagens usamos o método Clear.
Usando o CodeSiteO método Send, embora seja muito importante, é apenas parte do
que o CodeSite pode fazer. Um recurso muito interessante é o tracing
Figura 1. CodeSite Viewer
BOOK - Clube70.indb 32BOOK Clube70 indb 32 9/1/2006 16:19:109/1/2006 16 19 10
www.clubedelphi.netEdição 70- ClubeDelphi38
DataSnap e SOAPDataSnap e SOAPGuinther Pauli
Aplicações distribuídas usando ClientDataSet, XML e Web Services
Quando pensamos na criação de aplicações para Internet, a pri-
meira coisa que vem à mente é o desenvolvimento Web. Usando
um browser, podemos acessar nossa aplicação a partir de qualquer
local do planeta, consultar informações dinâmicas vindas de um
banco de dados, fazer compras on-line, efetuar cadastros e muito
mais. Usando tecnologias como ASP.NET Web Forms com o Delphi,
podemos criar aplicações Web de forma muito semelhante ao que
já estamos acostumados a fazer no Desktop.
Os problemas começam a surgir quando tentamos fazer na Web
as mesmas coisas que estamos acostumados a fazer com a VCL
Win32. Em várias oportunidades aqui na Revista, e também nas
palestras que tenho ministrado sobre desenvolvimento Web, a
primeira coisa que gosto de deixar claro é: um browser não é um
formulário Delphi.
Considero os protocolos HTTP e HTML arcaicos para serem usados
como base na construção de aplicações; esses protocolos nasceram
há anos, quando a Internet se limitava a consulta de informações
estáticas, como imagens e textos (do tempo onde as primeiras apli-
cações dinâmicas sugiram com o CGI - Writeln). De lá pra cá, tudo o
que se fez, foi meramente criar tecnologias que facilitam o desen-
volvimento sobre eles, mas as limitações continuam a existir. Claro,
temos alguns facilitadores, mas nada como o velho e bom TForm.
Por exemplo, ao desenvolver para Web, você precisa aprender al-
gumas coisas que até então pareciam esotéricas para quem sempre
desenvolveu para Desktop: manter estado, fazer gerenciamento de
sessão, processar requisições HTTP, ter uma preocupação triplicada
com escalabilidade e por aí vai. Como se já não bastasse, o HTML
oferece um conjunto pobre de elementos (tags) para a construção de
formulários, se comparamos com a VCL. É muito mais fácil construir
uma interface rica de elementos visuais usando VCL.
Porém, a necessidade de acessar informações On-Line e centralizar
o banco de dados em um local que possa ser acessado pela Internet,
não nos deixa outra saída: mais cedo ou mais tarde vamos precisar
construir aplicações para Web!
O que proponho neste artigo é unificar o melhor dos dois mundos:
a facilidade do desenvolvimento Desktop com VCL Win32 com os
benefícios que só a Internet oferece. Você aprenderá hoje, neste arti-
go, a criar aplicações distribuídas para Internet usando VCL (“TForm-
based”, ao invés de um browser), DataSnap, SOAP e Web Services. E
o melhor de tudo, você verá que graças ao Delphi, esse trabalho se
torna muito simples, rápido, prático e RAD.
Vantagens ao utilizar DataSnap com SOAPAntes de começar nosso exemplo, na já tradicional metodologia
passo a passo, gostaria de justificar o porquê da abordagem que
estou propondo e quais as suas vantagens:
• Ao usar VCL para desenvolver para Internet, você não precisa
aprender outro framework. Podemos continuar usando os mesmos
controles que já usamos há anos;
• É muito simples migrar uma solução client/server para a aborda-
gem proposta, você vai economizar tempo e código;
• Não sofreremos com as limitações impostas pelo HTTP e HTML:
esqueça gerenciamento de estado, sessão, processamento de re-
quisições e afins;
• Diferente do HTML, que a cada requisição trafega formulários com-
pletos (resfresh total da página no postback), mesmo que você tenha
solicitado a simples mudança em um controle, em nossa solução tudo o
que vai tr afegar por HTTP são os dados dinâmicos, em formato XML;
• Aplicações client e usando essa arquitetura são chamadas
rich-client, elas contém basicamente código de tratamento de inter-
face. O acesso a dados, regras de negócio, SQL, tudo fica no servidor.
Isso garante uma centralização e compartilhamento de acesso.
Usando as tecnologias abordadas neste artigo, você poderá ao final:
• Acessar seu banco de dados a partir de qualquer lugar da Internet;
• Criar aplicações distribuídas para a Internet. Você pode, por
exemplo, centralizar o banco de dados e servidor de aplicação na
matriz da empresa e distribuir as aplicações clientes para as filiais,
que terão acesso a dados em tempo real e que se mantêm sempre
atualizados, sem a necessidade de sincronização;
• Poderá ter sua aplicação oferecida como um serviço: seus clientes
podem pagar um taxa, por exemplo, e acessar a aplicação através
da Internet, sem a necessidade de nenhuma configuração local na
empresa, tudo fica configurado e armazenado no servidor.
Arquitetura da soluçãoPara ter uma visão geral da arquitetura da aplicação que será criada,
veja o esquema da Figura 1. Durante todo este tutorial, sempre que
tiver uma dúvida de como a solução está sendo implementada e
em que camada está sendo empregada determinada tecnologia,
consulte essa figura. Ela será nosso “mapa”.
Temos três camadas envolvidas na solução:
• C amada de Dados: o banco de dados (SGBD), nesse caso usare-
mos o Firebird 1.5;
BOOK - Clube70.indb 38BOOK Clube70 indb 38 9/1/2006 16:19:149/1/2006 16 19 14