Distribuição de aplicações do Borland DataBase Provider


Neste artigo, eu explicarei e demonstrarei as etapas necessárias para a distribuição bem sucedida de uma aplicação no Delphi 2005 usando o Borland DataBase Provider (BDP).

As técnicas neste artigo aplicam-se a WinForms assim como as aplicações dos formulários ASP.NET que usam o BDP da Borland. Eu usarei uma aplicação ASP.NET como o exemplo principal.

Vamos criar um exemplo
Inicie um novo projeto em: New|Windows Forms Application - Delphi for .Net. Especifique o nome do projeto, como DelphiClinics:

  examn66a.gif

Clique em OK para  criar um novo ASP.NET Web Forms project.

  no menu View, opção Data Explorer  e abra o MSSQL +  Providers treeview. . Para este exemplo, eu estou usando a base de dados de Northwind, para que eu tenho uma conexão existente definida com um usuário e uma senha nomeados ao início de uma sessão à base de dados (nenhum authentication do OS de Windows - )Nós usaremos esta primeira página para exibir um DataGrid com informação da vista geral da tabela dos empregados da base de dados do exemplo de Northwind do usuário do SQL. Os certificados do SQL para gerar esta base de dados do exemplo podem ser encontrados.

Abra o nó da conexão do usuário do SQL à base de dados de Northwind, arraste a tabela dos empregados do Data Explorer  para seu formulário. Isto criará automaticamente um componente de BdpConnection e de BdpDataAdapter na área non-visual dos componentes . Selecione o BdpDataAdapter, clique com o botão direito do mouse e escolha a opção Configuration Data Adapter , será aberto a janela de diálogo do Configuration Data Adapter, vá à aba DataSet e selecione uma série de dados nova para pôr o resultado do comando SELECT.

Na sequência, na aba Borland Data Provider, clique em BDPDataAdapter.
Este componente representa um objeto de acesso e manipulação a uma tabela de banco de dados. As condições de obtenção de dados, bem como, persistência são funções suas.
Clicando com o botão direito do mouse sobre BDPDataAdapter, selecione Configure Data Adapter.

 examn66b.gif

Fechar a janela de diálogo, pressionando o botão “ok”.

Agora, coloque um DataGrid no formulário, e ajuste sua propriedade de DataSource para  dataSet1, e sua propriedade de DataMember aos empregados. Duplo-clique na área do formulário (abaixo do DataGrid ) ,no evento de Page_Load no editor do código, escreva a seguinte linha de código:

  procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);  begin    if not Page.IsPostBack then DataGrid1.DataBind  end; 

 Delphi 2005 Deployment Manager
O Delphi 2005  inclui uma administração de distribuição que pode ser usado em projetos de ASP.NET ou de IntraWeb , pode ser usado também em outras situações. Vá ao Project Manager, clique botão direito  no nó da distribuição e selecione "New ASP.NET Deployment”. Isto mostrará a página do Deployment Manager ASP.NET, alistando todas os arquivos que são parte de seu projeto de ASP.NET e necessitam ser desdobrados. Ou quase todos estes arquivos, você pode observar que não parece alistar todos os conjuntos de arquivos requeridos. Especificamente, não mostra os conjuntos de BDP no screenshot abaixo:

 examn66c.gif

Você deve ter notado que os conjuntos de BDP (como Borland.Data.Common.dll e Borland.Data.Provider.dll) são conjuntos assinados. Desde que ASP.NET não oficialmente os conjuntos de sustentação assinados com um nome a ser desdobrado no diretório bin  ou no diretório virtual, estes necessitam oficialmente ser desdobrados no Assembly Cache.

BDP Assemblies
A explanação real porque os Borland BDP assemblies não mostram acima no Deployment Manager é por causa da maneira que ele é referenciado  em nosso projeto. Se você abrir acima do nó das referências para o projeto de DelphiClinics, você observará os conjuntos de Borland.Data.Common.dll e de Borland.Data.Provider.dll assemblies. A fim adicionar estes dois assemblies ao diretório do projeto, clique com botão direito neles e escolha a opção Copy Local option ajuste-a para True (você pode também fazer isto no Object Inspector do objeto). Em conseqüência, quando nós compilamos o projeto de ASP.NET, estes dois assemblies serão colocados no diretório do target (ao lado do DelphiClinics.dll no bin subdirectory do  diretório virtual de DelphiClinics).

Entretanto, adicionar Borland.Data.Common.dll e Borland.Data.Provider.dll não é ainda o bastante. Como você pode recordar, nós usamos o usuário de Microsoft SQL Server e um componente de BdpConnection  conectado ao usuário do SQL Server. No entanto a lista dos arquivos não mostra a um usuário do SQL Server específico BDP driver. A razão para isto é o fato que os drivers de BDP estão carregados dinâmicamente basearam em sua referência na propriedade de ConnectionString property do componente de BdpConnection. Este é o lugar onde a referência é feita ao conjunto de Borland.Data.Mssql.dll assembly. Em "fix" (para reparar este), nós devemos também adicionar uma referência ao Borland.Data.Mssql a nosso projeto, usando o diálogo da referência da adição (Add Reference dialog):

 examn66d.gif

Note que outros  assemblies BDP existem também para o interBase, o oracle, a IBM DB2, o MS acesso, etc., e notem também que o número de versão é 2.2.0.0 (este é o número de versão que você possui após ter instalado o update #2 para Delphi 2005 - o número de versão original destes conjuntos de BDP é 2.0.0.0).

Depois que a referência a Borland.Data.Mssql é adicionada, clique com o botão direito do mouse no nó novo para assegurar que a  Copy Local option está habilitada, e então recompile o projeto. O Deployment Manager da distribuição deve agora ter uma lista razoavelmente completa : 

 examn66e.gif

Você pode agora conectar à máquina da deployed, e clicar no botão "deploy new and changed files". Então copie automaticamente(ou fazendo upload do ftp) todos os seus arquivos novos e modificados. Aquilo é realmente um time-saver, especialmente naquelas situações do fim do prazo onde tudo que você quer fazer deve focalizar nas mudanças que você faz ao código, sem necessitar preocupar-se sobre os arquivos reais para desdobrar-se.

Deployment Test
Uma vez que todas estes arquivos são desdobrados, você pode começar a aplicação especificando o endereço da máquina da distribuição(deployment) e o nome do formulário principal. Obviamente, o usuário do SQL e a base de dados própria devem também ser desdobrados na máquina de alvo (ou em um usuário separado da base de dados), e você tem que assegurar-se de que a propriedade de ConnectionString esteja atualizada para conectar à base de dados na posição nova. Eu quero apenas focalizar agora na aplicação  nos arquivos BDP-específicos requeridos.
Depois que nós desdobramos uma aplicação de ASP.NET usando o Deployment Manager (gerente da distribuição) como esboçado acima, nós podemos tentar ver uma página de ASP.NET que use os componentes de BDP conectar à base de dados. Infelizmente, uma mensagem de erro parece dizer-lhe que nem tudo trabalha muito bem.
.

 examn66g.gif

Não está muito desobstruída desta mensagem de erro o que é o problema. Mensagem: "user friendly error message". Estes podem ser controlados usando o nó dos customErrors no arquivo de web.config: 

 codigo1.bmp Isto  produzirá a seguinte informação mais útil do erro:

 

 examn66h.gif

Parece que a bdpmss20.dll está sendo solicitada também pela aplicação de ASP.NET. Esta não era a caixa para Delphi 2005 aplicações de ASP.NET antes do update # 2, mas desde o update # 2, nós necessitamos desdobrar este arquivo adicional.
A maneira mais fácil é adicioná-lo ao conjunto de arquivos da distribuição : você deve copiar bdpmss20.dll ao diretório do DelphiClinics na máquina do desenvolvimento (se pode encontrar no diretório de BDS\3.0\Bin - onde as outras  bdpXXX20.dll podem ser encontradas também - mas não no diretório comum dos conjuntos de Files\Borland Shared\BDS\3.0\Shared).
Copie Bdpmss20.dll  para o diretório bin do projeto, adicione-o  à lista de arquivos da distribuição no Deployment Manager (gerente da distribuição).

Borland.Data.Mssql
Isto traz-nos uma etapa a   mais. Entretanto, isto é seguido por um outro erro do usuário, desta vez  queixa-se sobre a definição manifestada do conjunto encontrado com o nome Borland.Data.Mssql que não combina com a referência do assembly (conjunto) : 
 

 examn66i.gif

Se você ler a informação de erro detalhado, você observará o problema. Este problema é devido ao fato que eu estou usando o update de Delphi 2005 # 3, que - como o update #2 - a versão 2.2.0.0 dos usos dos conjuntos de arquivos  BDP.
Entretanto, se você verificar o bdpConnections.xml ou  BdpDataSources.xml em sua máquina de desenvolvimento, você observará que os conjuntos de BDP estão alistados ainda com um número de versão 2.0.0.0. Este é o número de versão que é usado também dentro dos componentes de BdpConnection (especificamente, seu ConnectionString usado para carregar os BDP assemblies). Mas desde que nós estamos desdobrando as 2.2.0.0 versões destes conjuntos, o usuário da distribuição queixa-se(conforme a mensagem de erro).
Nossa máquina do desenvolvimento não se queixa, desde que contem uma definição da posição que permita que 2.2.0.0 sejam usados quando 2.0.0.0 são mencionados (sem esse, nosso pre-pre-Update #2 Delphi que 2005 projetos que mencionam ainda 2.0.0.0 não mais por muito tempo compilariam ou trabalhariam com os 2.2.0.0 conjuntos novos).

Workaround Possível
Em todo o caso, um workaround deve modificar o número de versão 2.0.0.0 no ConnectionString dos componentes de BdpConnection, e mudá-los a 2.2.0.0. Então, recompile a aplicação, e redeploy para fazer-lhe finalmente todo o trabalho (veja a aplicação
desdobrada de DelphiClinics para o exemplo).

Alterne O Workaround
Update: Uma solução alternativa (trazida a minha atenção por Peter Sawatzki) deve  ser aplicada as posições do conjunto ao web server da distribuição. Infelizmente, as da posição são escondidas no update de Delphi 2005 # 2, mas você pode obter as posições dos arquivos DLLs e dos config para aqueles diretórios do GAC de sua máquina desenvolvimento indo ao \Windows\assembly\GAC\policy.2.0.Borland.Data.Common, ao \Windows\assembly\GAC\policy.2.0.Borland.Data.Provider, e ao \Windows\assembly\GAC\policy.2.0.Borland.Data.XXX (com XXX ser o nome do database driver; DB2, interbase, Msacc, Mssql, oracle, ou Sybase), e opcionalmente também os diretórios de \Windows\assembly\GAC\policy.2.0.Borland.Data.DataSync. Você necessita desdobrar os arquivos dll e do config destes diretórios ao GAC no web server.

solução de web.config
Update novo: Eu investiguei se você pudesse também desdobrar estes arquivos da posição em seu próprio diretório virtual (se você não tem nenhum acesso ao GAC no web server).
Entretanto, eu encontrei que nós necessitamos somente copiar os ajustes da posição do arquivo config, e aqueles com o próprio  arquivo de web.config. Para o conjunto de Borland.Data.Mssql, nós necessitamos copiar os índices do conteúdo de policy.2.0.Borland.Data.Mssql.config, e colocarmos  no  arquivo web.config (que integra os Tag da configuração) como segue:    

codigo4.bmp 
  Depois que você modificou o web.config, você pode redeploy a aplicação, que trabalhará então
sem queixas mais adicionais.

ASP.NET Database Access  

Naturalmente, você pode obter um erro sobre outros assemblies faltantes (como o
Borland.Data.Web.dll), mas estes são uns relacionados ao Borland Data Provider, e devem apenas
ser adicionados à lista dos arquivos para desdobrar-se.
Uma outra mensagem de erro que você possa encontrar é um problema que conecta a sua base
de dados. Ao usar interBase você pode obter um erro "unavailable database", que pode ser
resolvido se certificando que o serviço interBase acima esteja funcionando, e seu
ConnectionString especifique um hostname como o prefixo para o trajeto da base de dados.

Ao usar o usuário de Microsoft SQL você pode receber uma mensagem que lhe diga que o SERVIÇO do NT AUTHORITY/NETWORK da REDE do NT não está permitido alcançar a base de dados do usuário do SQL. O problema pode ser devido ao uso do usuário MSDE do SQL como a base de dados em Windows xp ou em usuário 2003 de Windows. O erro é devido ao fato que MSDE permite somente que o authentication do OS de Windows seja usado, contudo aos funcionamentos de um usuário de ASP.NET sob o cliente do SERVIÇO do NT AUTHORITY/NETWORK que não tem nenhuma permissão de acesso a suas bases de dados. É possível resolver este problema concedendo o acesso do SERVIÇO do NT AUTHORITY/NETWORK a suas bases de dados, mas uma idéia melhor é evitar de usar o authentication do OS de Windows em primeiro lugar, e começa usar uma sessão e uma senha específicos para sua base de dados. O único problema é que MSDE pelo defeito permite somente que o authentication do OS seja usado, a menos que você instale MSDE com o parâmetro de SECURITYMODE=SQL, que a maioria das pessoas não sabem, aproximadamente até depois que instalaram MSDE. Com este parâmetro, MSDE será instalado com authentication misturado da modalidade: authentication do OS de Windows e de usuário do SQL authentication.
Você necessita modificar manualmente o registro (em seu próprio risco!).O  MSDE supondo foi instalado como o exemplo do defeito, você necessita o valor do registro em HKLM\Software\Microsoft\MSSqlserver\MSSqlServer\LoginMode e o muda (com cuidado!) de 1 (authentication de Windows somente) a 2 (authentication misturado).
Note que você necessita reiniciar MSDE para permitir que o ajuste novo se torne eficaz.

Summary
Neste artigo, eu expliquei e demonstrei como nós necessitamos desdobrar o Borland.Data.Common.dll e o Borland.Data.Provider.dll as.well.as o Borland.Data.xxx.dll para o excitador específico de BDP, mais um arquivo bdpxxx20.dll (encontrado no diretório de BDS\3.0\Bin). Além disso, nós podemos necessitar ou modificar o número de versão do excitador de BDP no ConnectionString do componente de BdpConnection, ou faça o usuário da distribuição ciente das posições do conjunto para os assemblies de BDP (especificamente conjuntos de Borland.Data.xxx.dll), que pode ser feito instalando no GAC do usuário, ou (mais fácil) adicionando no web.config com os detalhes da política.
Estas etapas têm que ser feitas exame para toda a aplicação (WinForms ou ASP.NET formulários) que usa o Borland Data Provider alcançe access databases. Para aplicações de ASP.NET você necessita também assegurar-se de que você possa alcançar a base de dados corretamente.

 

 Traduzido do original: http://www.drbob42.com/examines/examin66.htm