É muito comum o emprego de componentes COM+ como a camada de negócios em aplicações n-tiers. Dessa forma, a nosso conhecimento em desenvolver aplicativos que suportem esta estrutura, torna-se proeminente, também, na arquitetura .NET. Neste artigo, espero passar o mínimo para que você seja capaz de escrever um componente COM e usá-lo em suas aplicações .NET.
A estrutura do componente
O componente que escreveremos é bastante simples: ele acessará um banco de dados do SQL Server (Northwind) e retornará os dados solicitados pelo nosso programa. Os campos da tabela que consultaremos podem ser vistos na Figura 1.
Com o banco de dados já pronto podemos iniciar o desenvolvimento do nosso componente COM. No Visual Studio .NET inicie uma nova aplicação do tipo Class Library e salve com o nome pBusinessComp. Para que possamos acessar e incluir as funcionalidades de um componente COM legado em nosso objeto, devemos referenciar o namespace System.EnterpriseServices em nosso projeto, e adicionarmos adicioná-lo em nossa classe:
Imports System.EnterpriseServices
Imports System.Data
Imports System.Data.SqlClient
Altere o nome da classe para BComp e acrescente os seguintes atributos na declaração da classe, listados na Listagem 1.
ObjectPoolingAttribute(5, 20, 30)> _
Public Class BComp
Inherits ServicedComponent
O atributo TransactionAttribute nos permite configurar o comportamento do nosso objeto transacional. Em nosso exemplo não trabalharemos com modificações nos registros (INSERT, UPDATE, DELETE). Sendo assim, poderíamos omitir este atributo de nossa classe sem nenhuma perda de desempenho.
ObjectPoolingAttribute configura a atuação do pooling de objetos - pense no pooling de objetos como uma espécie de repositório de objetos já criados - do COM+ sobre o nosso componente. E por último, observe que a nossa classe herda de ServicedComponent, que é a classe base para o desenvolvimento de componentes COM transacionais.
Após ter configurado o comportamento da nossa classe implementaremos um método chamado GetEmployeeInfo. Este método recebe como parâmetro um Id numérico e retorna um DataSet com os dados do banco. Implemente o método como descrito na Listagem 2.
Const strSel = "SELECT EmployeeID, LastName, FirstName, Title
FROM Employees
WHERE EmployeeID = "
Const strConn = "Initial Catalog=Northwind;Data Source=SqlServer;
User id=sa;
password=;"
Public Function GetEmployeeInfo(ByVal number As Integer)
As DataSet 'Criando os objetos
Dim objConn As New SqlConnection(strConn)
Dim objAdap As New SqlDataAdapter(strSel +
Convert.ToString(number), objConn)
Dim dsDados As
New DataSet 'Recuperando os dados do bd
objConn.Open()
objAdap.Fill(dsDados, "Dados")
'Fechando o banco
objConn.Close()
'Enviando o Dataset
GetClientInfo = dsDados
End Function
Após ter codificado o componente como exibido nas listagens acima, devemos instalá-lo no catálogo do COM+. Para isso devemos gerar um Strong Name para nosso componente. Este nome forte, serve como uma chave identificadora exclusiva do nosso componente, sendo pré-requisito para sua instalação no ambiente COM+. Para criar esta chave, usaremos o utilitário de linha de comando sn incluso no Framework .NET.
No console de sua máquina, entre com o seguinte comando: sn -k BusinessCompKey.snk. Este comando criará uma chave de nome BusinessCompKey em nosso diretório.
O próximo passo será referenciá-la em nosso componente. No Solution Explorer aplique um clique duplo sobre o arquivo AssemblyInfo.vb e acrescente a seguinte linha:
AssemblyKeyFile("C:\BusinessCompKey.snk")>
Pronto! agora é dar um Build Solution.
Instalando o componente
Para instalarmos o nosso componente utilizaremos outro utilitário de linha de comando do Framework, chamado RegSvcs. Volte à janela de console e entre com o comando regsvcs BusinessComp.dll, que efetuará a instalação (Figura 2) e configuração do nosso componente seguindo as informações descritas em nosso código.
Usando o componente
Para avaliar o funcionamento do nosso componente criaremos uma aplicação ASP.NET que receberá os dados do banco Access. No Visual Studio.NET inicie uma nova aplicação do tipo ASP.NET e salve com o nome WebComApp. Para trabalhar com o componente COM+, nossa aplicação deverá referenciar o namespace System.EnterpriseServices e o assembly BusinessComp.dll. Após ter adicionado as referências pressione F7, para alternar a visualização para o código do form e insira a seguinte linha:
Public objCOM As BusinessComp.BComp
Abra a região chamada "Web Form Designer Generated Code" da nossa classe e insira o código da Listagem 3 no método Page_Init. Este código instanciará o nosso objeto.
Private Sub Page_Init(ByVal sender
As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Init
InitializeComponent(
'Instanciando o objeto
objCOM = New BusinessComp.BComp()
End Sub
Volte para o Form Design (Shift+F7) e inclua os controles como exibido na Figura 3.
Implemente o manipulador do evento OnClick do botão como mostrado na Listagem 4. Neste código faremos uma consulta ao banco de dados, através do método GetEmployeeInfo passando o conteúdo do TextBox como parâmetro.
Private Sub Button1_Click(ByVal sender
As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
'DataSet que receberá os dados
Dim myDataSet As DataSet= objCOM.GetEmployeeInfo
(CInt(TextBox1.Text)) 'Ligando o grid aos dados
DataGrid1.DataSource = myDataSet
'Carregando os dados
DataGrid1.DataBind()
End Sub
Pronto! Basta executar a aplicação, informar um parâmetro no TextBox e consultar os dados (Figura 4).
Conclusão
Vimos neste artigo como tirar proveito do suporte ao COM+ do .NET Framework, e para maiores informações examine o MSDN Library. Até a próxima!