Tutorial Delphi MultiCamadas

11
Desenvolvendo e distribuindo aplicações multicamadas com Delphi Este artigo ensina o desenvolvimento de aplicações multicamadas com Delphi, mostrando a criação da aplicação servidora, a aplicação cliente e o que nem os livros ensinam, a distribuição de uma aplicação multicamadas na rede. Assim o leitor pode aprender passo a passo todos os processos de criação de aplicações com esta tecnologia. Quando desenvolvemos uma aplicação cliente/servidor normal, temos que instalar e configurar o banco de dados no servidor e em cada computador cliente, o que acaba sendo muito cansativo. As aplicações multicamadas resolvem este problema, pois basta instalar o banco de dados no servidor, criar um aplicativo que rode no próprio servidor e que ao acessar o banco de dados, envie os dados do servidor para os computadores clientes. Assim, os computadores clientes apenas precisam estar conectados na rede para acessar os dados e não é preciso nenhuma instalação de banco de dados neles. Neste artigo aprenderemos como desenvolver aplicações multicamadas utilizando a tecnologia DCOM. A lógica das aplicações multicamadas Uma aplicação multicamadas e dividida em três partes: Um aplicativo servidor, que fica no computador servidor; Um servidor remoto de dados, que acessa os dados do servidor e envia as informações `as aplicações clientes e Um aplicativo cliente, que acessa os dados do servidor. A aplicação servidora e o servidor remoto de dados (Remote Data Module) ficam juntas, rodando no servidor. Criando a aplicação servidora Inicie o Delphi, vá em File | New Application; Após este passo, vamos inserir no projeto, um modulo de dados remoto também conhecido como Remote Data Module . Para isso, vá em File|New|Other e selecione Remote Data Module da aba Multitier . Em seguida clique em OK. Assim: (Inserindo um Remote Data Module no projeto) Após clicar em OK, aparecera uma tela, que é de configuração do Remote Data Module como a mostrada abaixo:

Transcript of Tutorial Delphi MultiCamadas

Page 1: Tutorial Delphi MultiCamadas

Desenvolvendo e distribuindo aplicações multicamadas com Delphi

Este artigo ensina o desenvolvimento de aplicações multicamadas com Delphi, mostrando a criação da aplicação servidora, a aplicação cliente e o que nem os livros ensinam, a distribuição de uma aplicação multicamadas na rede. Assim o leitor pode

aprender passo a passo todos os processos de criação de aplicações com esta tecnologia. Quando desenvolvemos uma aplicação cliente/servidor normal, temos que instalar e configurar o banco de dados no servidor

e em cada computador cliente, o que acaba sendo muito cansativo. As aplicações multicamadas resolvem este problema, pois basta instalar o banco de dados no servidor, criar um aplicativo que rode no próprio servidor e que ao acessar o banco

de dados, envie os dados do servidor para os computadores clientes. Assim, os computadores clientes apenas precisam estar conectados na rede para acessar os dados e não é preciso nenhuma instalação de banco de dados neles. Neste artigo

aprenderemos como desenvolver aplicações multicamadas utilizando a tecnologia DCOM.

A lógica das aplicações multicamadas

Uma aplicação multicamadas e dividida em três partes:

Um aplicativo servidor, que fica no computador servidor;

Um servidor remoto de dados, que acessa os dados do servidor e envia as informações `as aplicações clientes e

Um aplicativo cliente, que acessa os dados do servidor.

A aplicação servidora e o servidor remoto de dados (Remote Data Module) ficam juntas, rodando no servidor.

Criando a aplicação servidora

Inicie o Delphi, vá em File | New Application;

Após este passo, vamos inserir no projeto, um modulo de dados remoto também conhecido como Remote Data Module . Para isso, vá em File|New|Other e selecione Remote Data Module da aba Multitier . Em seguida clique em OK. Assim:

(Inserindo um Remote Data Module no projeto)

Após clicar em OK, aparecera uma tela, que é de configuração do Remote Data Module como a mostrada abaixo:

Page 2: Tutorial Delphi MultiCamadas

(Configurando o Remote Data Module)

Deixe a opção Instancing como Multiple Instance e a opção Threading Model como Apartment. Na opção CoClass Name digite Servidor , este será o nome da classe servidora.

Após feitas estas configurações, clique em OK. O nosso Remote Data Module é então inserido no projeto.

Para simplificar, usarei o componente Ttable para o acesso a dados. Insira os seguintes componentes no Remote Data Module:

- 1 Ttable (palheta BDE);

- 1 TDataSetProvider (palheta Data Access);

de modo que o modulo de dados fique assim:

Page 3: Tutorial Delphi MultiCamadas

Vamos agora ligar a tabela (table1) a um banco de dados.

Configure a propriedade DatabaseName do componente Ttable como DBDEMOS .

Após termos selecionado a base de dados (Database), vamos selecionar a tabela da base de dados, a qual queremos acessar. Para isso vá à propriedade TableName do componente Ttable e selecione events.db . Para ativar a tabela, vá à

propriedade Active , ainda do componente Ttable e selecione True .

Agora que já ligamos o componente Ttable ao banco de dados, vamos configurar o componente TDataSetProvider. Este componente é o “elo de ligação” entre o componente Ttable do Remote Data Module e a aplicação cliente que ainda iremos

criar.

A configuração do TDataSetProvider é simples, basta colocar sua propriedade DataSet como Table1 .

Agora, a nossa aplicação servidora está pronta. É preciso registrar essa aplicação servidora na maquina que será servidora. Em nosso exemplo, basta executar a aplicação para que ela fique registrada na maquina servidora. Após executar a

aplicação, Salve-a.

Observação: O acesso a dados pode ser feito através de qualquer componente de acesso dados do Delphi, não se restrinja a usar somente Ttable em seus projetos multicamadas.

Criando a aplicação cliente

Page 4: Tutorial Delphi MultiCamadas

Inicie o Delphi, vá em File | New Application;

O componente do Delphi que serve como “segundo elo de ligação” nas aplicações multicamadas e o DCOMConnection da palheta DataSnap, pois ele se liga ao TDataSetProvider do Remote Data Module.

Vamos inserir os seguintes componentes no form:

• 1 TDCOMConnection (palheta DataSnap);

• 1 TClientDataSet (palheta Data Access);

O form devera ficar como na figura abaixo:

Para ligarmos o componente TDCOMConnection ao Remote Data Module, vá em sua propriedade ServerName e selecione Pserver.Server , que é o nome do projeto servidor junto com o nome do Remote Data Module. Após este passo, mude a

propriedade Connected para True .

Observação: Neste exemplo não estamos configurando a propriedade ComputerName do componente TDCOMConnection, pois a aplicação servidora está na mesma maquina que a aplicação cliente. Neste caso deixamos esta propriedade em

branco. Porem, como a tecnologia multicamadas existe para ser usada em rede, quando a aplicação servidora já estiver na maquina servidora, basta selecionar o nome da maquina da rede que e a servidora através desta propriedade. Se a

aplicação cliente criada será rodada em uma maquina que não seja a servidora, eu aconselho que a propriedade Computer Name seja configurada de uma vez, para não ser necessário no futuro que essa configuração seja feita através de código.

Page 5: Tutorial Delphi MultiCamadas

Após termos conectado o TDCOMConnection ao Remote Data Module, vamos ligar o TClientDataSet ao Remote Data Module através do TDCOMConnection. Para isso, vá à propriedade RemoteServer do TClientDataSet e selecione

DCOMConnection1. Agora vá à propriedade ProviderName do TClientDataSet e selecione DataSetProvider1 . Este DataSetProvider1 é o que foi inserido na criação do Remote Data Module. O que falta fazer agora é ativar o TClientDataSet,

para isso vá à propriedade Active e selecione True.

Pronto, agora já conectamos a nossa aplicação cliente à servidora e apenas falta trabalhar com dados. Para isso, insira os componentes abaixo ao form:

• 1 TDataSource(palheta Data Acces);

• 1 TDBGrid(palheta Data Controls);

• 2 TEdit(palheta Standard);

• 1 TButton(palheta Standard)

Agora vamos às ligações. Primeiro vamos ligar o TDataSource ao TClientDataSet. Para isso, vá à propriedade DataSet do TDataSource e selecione ClientDataSet1 . Após feito isso, vamos ligar o TDBGrid ao TDataSource. Para isso, vá à propriedade DataSource do componente TDBGrid e selecione DataSource1 . Com isso, o form devera ficar assim:

Vamos agora fazer com que o usuário ao acessar um número de evento(o banco de dados escolhido se refere a eventos), insira um novo nome para o evento escolhido, assim:

No Edit1 será feito o acesso ao numero de evento que o usuário escolher (relativo ao campo EventNo) e será inserido o texto do Edit2 ao campo Event_Name. Faça com que o código do botão seja igual ao código da listagem 1 :

Page 6: Tutorial Delphi MultiCamadas

Observação:

Preste atenção para a antipenúltima linha de código, onde está escrito:

clientdataset1.ApplyUpdates(0);

Se você fizer os testes, verá que sem ela, o texto inserido no TClietDataSet não terá valor e não será gravado no banco de dados realmente, porem estará lá enquanto o programa estiver em execução. Isto acontece, pois o TClietDataSet, ao iniciar

o programa, “pega” os dados da aplicação servidora. O comando post grava o texto no componente, porem não envia a atualização ao servidor. O comando ApplyUpdates(0) faz a atualização, ou seja, pega as alterações feitas na maquina cliente

e as envia para a aplicação servidora. Então os dados são realmente gravados.

Agora basta salvar e rodar a aplicação cliente.

Distribuindo aplicações multicamadas em uma rede

Antes de tudo, devo ressaltar que a tecnologia DCOM utilizada na nossa aplicação multicamadas não é da Borland e não foi fabricada por ela. A tecnologia DCOM é da Microsoft. Ao contrario do que muitos pensam, a distribuição de uma aplicação multicamadas não é simplesmente ligar dois computadores na rede, um cliente e um servidor rodar a aplicação cliente na

maquina cliente. Bem, a lógica é essa, porem é necessário que instalemos alguns pacotes para que a aplicação servidora e a cliente funcionem na rede em computadores diferentes. Aqui se encontra a chave das aplicações multicamadas que utilizam

DCOM, pois os livros em geral, não ensinam a distribuir as aplicações multicamadas, mas apenas a cria-las assim como fizemos acima. Muitos programadores que aprendem a criar uma aplicação multicamadas muitas vezes desistem da

tecnologia, pois na hora de rodar a aplicação cliente na maquina servidora ela roda perfeitamente, mas na hora de roda-la na maquina cliente, o Windows diz que o programa executou uma operação ilegal.

Page 7: Tutorial Delphi MultiCamadas

Configuração da maquina servidora

Na maquina servidora é onde é feita a parte mais complicada da configuração. Vamos às configurações da rede: verifique se sua rede está configurada com controle de acesso em nível de usuário ou com controle de acesso em nível de compartilhamento. A opção Controle de acesso em nível de compartilhamento deverá ser estabelecida. Compartilhe as pastas onde estão o banco de dados e a aplicação servidora, porém compartilhe como completo e não apenas como leitura, pois se o compartilhamento for configurado como “Somente leitura”, as alterações feitas pela maquina cliente não poderão ser salvas no servidor e aparecerão mensagens de erros. Veja abaixo a aba de compartilhamento de pasta:

Agora que a rede já está configurada, vamos às configurações do DCOM na maquina servidora. A Microsoft adicionou algumas melhorias de segurança no Windows XP Service Pack 2. Isto alterou também a janela de configuração do DCOM do Windows XP. Para configurar esta versão: 1. Se o computador pertencer a um workgroup em vez de um domínio, certifique-se de que não usa compartilhamento simples de arquivo. Abra o Windows Explorer ou dê um duplo clique em Meu Computador, clique em Ferramentas/ Opçoes de Pastas, selecione Modo de Exibição e desmarque Usar compartilhamento simples de arquivo. 2. Clique em Iniciar, clique em Programas, clique em Ferramentas administrativas, clique em Serviços de componente. (Outra forma seria clicar em Painel de Controle, Ferramentas Administrativas, Serviços de componente ou simplesmente Vá em iniciar | executar, digite dcomcnfg e clique em OK. Este comando abrirá o utilitário de configuração):

Page 8: Tutorial Delphi MultiCamadas

3. Expanda a árvore Serviços de componente, expanda Computadores e clique com o botão direito em Meu Computador. Selecione Propriedades. 4. Clique em Propriedades padrão. Selecione Ativar DCOM neste computador. Configure a propriedade Nível de autenticação padrão para Conectar (Nenhum também funciona). Configure o Nível de representação padrão para Identificar (Representar também funciona).

Page 9: Tutorial Delphi MultiCamadas

5. Clique em Segurança padrão. 6 Na aba "Segurança COM", em "Permissões de acesso" clique em Editar padrão. Adicione com permissão Local e remota SYSTEM, INTERATIVO, REDE e o usuário que irá fazer a autenticação (se for o caso de se especificar um usuário que irá acessar a aplicação servidora) utilizando o COM precisam ser incluídos na lista. Existem algumas formas de se fazer isso. Você pode adicionar o usuário específico ou simplesmente adicionar o grupo a que este usuário pertence. Os valores possíveis são: - Domínio\NomeDoUsuário (Um usuário específico) - Domínio\Administradores (Todos os administradores do domínio especificado) - Todos (Todos os usuários / Everyone em inglês) 7. Em Permissões de acesso clique em Editar Limites. O Service Pack 2 vem com os seguintes valores: LOGON ANÔNIMO (Acesso local) e Todos (Acesso Local e Remoto). Tenha certeza que os valores estão listados e então adicione o usuário que irá se autenticar. Este usuário precisa ter permissão Local e Remota.

8. Em Permissões de Inicialização e Ativação clique em Editar padrão. Adicione com permissão Local e remota para ativação e inicialização SYSTEM, INTERATIVO, REDE e o usuário que irá fazer a autenticação. 9. Em Permissões de Inicialização e Ativação clique em Editar Limites. O Service Pack 2 vem com os seguintes valores: COMPUTADOR\Administradores (Ativação Local e Remota e Inicialização Local e Remota) e Todos (Ativação Local e Inicialização Local). Tenha certeza que os valores estão listados e então adicione o usuário que irá se autenticar. Este usuário precisa ter permissão Local e Remota para Inicialização e ativação.

Page 10: Tutorial Delphi MultiCamadas

10. O Service Pack 2 vem com o Windows Firewall ativado. Se o firewall estiver ativado, você precisa permitir que sua aplicação COM acesse a sua rede e desta forma receber chamadas de solicitação de licença. Caso você tenha outro firewall protegendo sua rede, você pode desabilitar este sem problema. - Clique em Painel de Controle e em Firewall do Windows. - Selecione Desativado em Geral. Vá à aba Config. DCOM do aplicativo Serviços de Componente e selecione Servidor Object na caixa de opções com os nomes de aplicações DCOM que é a aplicação servidora que criamos. Ela se chama Servidor Object, pois o nome que demos ao Remote Data Module quando salvamos foi Servidor. Após esta seleção, clique no botão Properties. Abrirá uma tela, nesta tela selecione a aba Local. Nesta aba, selecione a primeira e a segunda opção e as deixe marcadas. O próprio utilitário verifica qual é a que esta funcionando e aplica na hora da execução. Agora basta selecionar Aplicar e OK.

Page 11: Tutorial Delphi MultiCamadas

Configuração das maquinas clientes Nas maquinas clientes, o processo é bem mais simples. Após o servidor devidamente configurado, falta apenas copiar a aplicação cliente para cada maquina cliente e executar. Observação: Se a aplicação servidora não estiver rodando, ou seja, aberta, em execução, a aplicação cliente nas maquinas-clientes dará uma mensagem dizendo: “Falha ao executar o servidor” A programação multicamadas utilizando DCOM é basicamente isto. Onde se deve ficar atento é na parte de configuração do servidor, pois é onde ocorrem os principais erros e é a causa de principais falhas de execução da aplicação cliente nas maquinas clientes.