[firebase-br] 3 camada com firebird 2.1

Paulo Sérgo Feix paulinhofeix em gmail.com
Seg Dez 15 17:22:24 -03 2008


Ola Sandro Souza

Obrigado pela dica, sei que aqui não é a lista deste tipo de assunto, mais
ainda estou meio confuso, na programação em 3 camada com delphi.

Vc aconselha a mudar desta forma?

TComponentFactory.Create(ComServer, TSeuRemoteDataModule,
 Class_SeuRemoteDataModule, *ciSingleInstance*, tmApartment);

Outra pergunta, qual é o componente mais recomendado para conexão a banco de
dados Firebird 2.1

IBO, ou dbExpress?

2008/12/15 Sandro Souza <escovadordebits em gmail.com>

> Bom dia/tarde Paulo.
>
> Cada TRemoteDataModule representa uma conexão independente com o banco de
> dados, e sendo assim, em cada um, você deveria colocar um TIBODatabase,
> TIBOTransaction e as respectivas TIBOQueries para que cada
> TRemoteDataModule
> possa ter a sua própria conexão independente.
>
> Além disso, existe um pequeno bug de implementação nas classes básicas de
> acesso a banco de dados no Delphi, ou seja, erros conceituais, e
> consequentemente, de implementação na própria unidade DB.pas que vem no
> Delphi.
>
> Trocando em miúdos, a unidade DB.pas não foi feita prevendo o acesso
> simultâneo (em threads) a um ou mais bancos de dados, e consequentemente,
> você vai obter muitas violações de acesso quando o fluxo de requisições
> aumentar (vários usuários solicitando operações) e outros
> TRemoteDataModules
> forem instanciados automaticamente, cada um tentando deles tentando
> executar
> uma operação de banco de dados ao mesmo tempo.
>
> Para evitar isso, crie um novo projeto servidor, e quando acrescentar o
> TRemoteDataModule, vai aparecer uma janela solicitando o perfil dos
> RemoteDataModules de sua aplicação servidora.
>
> Nessa janela, o método de instanciamento já vem, por padrão, em "Multiple
> Instance", ou seja, múltiplas instâncias. Dessa forma, cada aplicação
> cliente conectada cria uma outra instância do seu TRemoteDataModule com sua
> conexão própria. E vai causar essas violações de acesso quando as operações
> de banco de dados forem executadas ao mesmo tempo.
>
> Altere esse método de instanciamento para "Single Instance", o que fará com
> que, para cada aplicação cliente conectada, seja executada uma nova
> instância da aplicação servidora (relação de um para um), e sendo assim,
> cada aplicação servidora conterá apenas uma única instância do seu
> TRemoteDataModule. Isso evitará o problema das violações de acesso, ao
> custo
> de consumir mais recursos da máquina, mas infelizmente é o que você pode
> fazer se for apenas utilizar o que já vem no Delphi.
>
> Como o seu projeto de aplicação servidora, muito provavelmente, já está
> criada e funcionando, então faça o seguinte:
>
> 1 - Edite a unidade do seu respectivo TRemoteDataModule.
>
> 2 - Vá para a seção de inicialização (initialization) da unidade (no fim do
> código fonte).
>
> 3 - No comando de criação da instância da "fábrica de componentes", altere
> o
> quarto parâmetro de "ciMultiInstance" para "ciSingleInstance", ou seja, em:
>
> TComponentFactory.Create(ComServer, TSeuRemoteDataModule,
> Class_SeuRemoteDataModule, *ciMultiInstance*, tmApartment);
>
> ficaria assim:
>
> TComponentFactory.Create(ComServer, TSeuRemoteDataModule,
> Class_SeuRemoteDataModule, *ciSingleInstance*, tmApartment);
>
> Resumindo:
>
> 1 - Método "Multiple Instance"
>
> 1.1 - Instâncias de executável servidor por conexão
>
> Uma única para todas as conexões.
>
> 1.2 - Instâncias de TRemoteDataModule por conexão
>
> Uma instância para cada conexão (cada uma com sua conexão independente).
>
> 1.3 - Prós
>
> Consome menos recursos da máquina.
>
> 1.4 - Contras
>
> Causa violações de acesso quando coincide uma ou mais operações de banco de
> dados ao mesmo tempo (um Open de uma query em um uma instância do seu
> TRemoteDataModule com um Next de outra query em outra instância do seu
> TRemoteDataModule, por exemplo).
>
> 2 - Método "Single Instance"
>
> 2.1 - Instâncias de executável servidor por conexão
>
> Uma instância para cada conexão.
>
> 1.2 - Instâncias de TRemoteDataModule por conexão
>
> Uma única instância.
>
> 1.3 - Prós
>
> Evita as violações de acesso quando uma ou mais operações de banco de dados
> são executadas ao mesmo tempo, já que estão sendo executadas em aplicações
> separadas.
>
> 1.4 - Contras
>
> Consome mais recursos da máquina, já que tratam-se de instâncias completas
> da mesma aplicação.
>
> Espero ter te ajudado mais que atrapalhado.
>
> 2008/12/15 Paulo Sérgo Feix <paulinhofeix em gmail.com>
>
> > Boa tarde
> >
> > Alguém pode me ajudar, programação em 3 camada com firebird 2.1,
> componente
> > IBO.
> >
> > a pergunta é o seguinte, RemoteDataModule tenho o IBOQuery, e no formo de
> > tenho IBODatabase1, IBOTransaction1, esta coreto assim, isto no lado
> > servidor
> >
> > --
> > Paulinho Sérgio Feix
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
Paulinho Sérgio Feix



Mais detalhes sobre a lista de discussão lista