Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Srs.
Vi num POST que um membro gostaria de aprender sobre COM+.
Acho que posso ajudar, pois trabalho muito com isso, e particularmente, adoro.
COM+ , ou COM Plus, estas são as denominações que os Senhores vão encontrar por aí.....
Mas, para que serve ???...Como Utilizar ????
Comecemos com a primeira pergunta.
O COM+ é uma aplicação desenvolvida pela Microsoft para controlar Transações, mas, o que é uma transação ?.
Podemos definir que uma transação é um acesso entre cliente e servidor, ou entre a aplicação e banco de dados.
Toda vez que temos uma aplicação requerendo informações do servidor, temos uma transação, esta mesma idéia é utilizada com Banco de Dados (SQL, Oracle), e é aí que entramos.
O COM+ consegue controlar uma, ou várias transações, ou seja, ao iniciarmos uma transação o COM+ começa a rastrear todas as ações da aplicação, e é capaz de Confirmar ou Abortar a transação, caso aborte, o próprio COM+ irá desfazer todas as alterações que foram feitas.
O Exemplo mais claro que podemos utilizar é o caso de uma Transação Bancário de Trasferência de Crédito.
Podemos repartir um "TED" em duas partes, creditar um valor numa determinada conta e debitar o mesmo valor numa outra conta.
Imaginemos que ao creditar um valor numa determinada conta, ocorra um erro com a aplicação, e ela não consiga terminar a operação e acaba não debitando o valor de outra conta.
Neste caso, entra o COM+, pois, ele capaz de desfazer tudo o que fora feito, neste caso, o COM+ se encarregaria de desfazer o crédito que ocorreram retornando ao cliente o erro ocorrido.
O COM+ pode ser utilizado com o próprio ASP ou ainda com componentes (mais fácil, eficaz, correto e etc.....)
Caso utilizemos o COM+ no ASP, devemos começar nosso código com uma TAG, conforme abaixo
ASP
[*]'==================
[*]'Set oContext = getObjectContext()
[*]'==================
[*]
[*]'==================
[*]'SE OCORRER TUDO CERTO
[*]'==================
[*]'oContext.SetComplete
[*]'==================
[*]
[*]
[*]'==================
[*]'SE OCORRER ALGO DE ERRADO
[*]'==================
[*]'oContext.SetAbort
[*]'==================
[*]
[*]
[*]'==================
[*]'EXEMPLO
[*]'==================
[*]
[*]'==================
[*]'DIZEMOS AO SISTEMA QUE UTILIZAREMOS
[*]'TRANSAÇÃO
[*]'==================
[*]Set oContext= GetObjectContext
[*]
[*]on Error Resume Next
[*]
[*]Set oConn = Server.CreateObject("adodb.Connection")
[*]Set ORs = Server.CreateObject("adodb.recordset")
[*]
[*]oConn.open "PROVIDER=SQLOLEDB;etc"
[*]
[*]'==================
[*]'INCLUIMOS UM USUÁRIO
[*]'==================
[*]ORs.Open "tb_usuario",oConn,1,3,2
[*]ORs.Addnew
[*]ORs("ds_usuario") = Request("ds_usuario")
[*]ORs("nome_usuario") = Request("nome_usuario")
[*]ORs.Update
[*]
[*]cd_usuario = ORs("cd_usuario")
[*]
[*]ORs.Close
[*]
[*]
[*]If Err <> 0 then
[*] oContext.SetAbort
[*]End if
[*]
[*]'==================
[*]'INCLUIMOS O ACESSO DO USUARIO
[*]'==================
[*]
[*]ORs.Open "tb_acesso_usuario",oConn,1,3,2
[*]ORs.AddNew
[*]ORs("cd_usuario") = cd_usuario
[*]ORs("cd_menu") = cd_menu
[*]ORs("cd_submenu") = cd_submenu
[*]ORs.Close
[*]
[*]if Err <> 0 then
[*] oContext.SetAbort
[*] else
[*]
[*]'==================
[*]'AQUI INDICAMOS QUE NÃO OCORREU
[*]'NENHUM ERRO E QUE A TRANSAÇÃO
[*]'PODE SER CONFIRMADA
[*]'==================
[*] oContext.SetComplete
[*]
[*]End if
Podemos (e devemos), sempre que possível, utilizar componentes ASP, e para isto teremos que dominar uma outra linguagem, que pode ser C++, C#, ou o próprio VB (que é muito parecido com o ASP).
No caso de utilizarmos os componentes, estaremos entretando numa outra matéria, ou seja, um sistema de 3 camadas.
E porque esse nome ? 3 camadas ?....
Pq é isso mesmo, nós trabalhamos com 3 camadas de Softwares para processar as informações.
Então temos : 1ª Camada (ASP - Apresentação para o cliente)
2ª Camada (VB - Componentes que se comunicam com o banco de dados)
3ª Camada (SQLServer - O Banco de Dados que guarda as informações)
Voces que estão olhando e pensando, poxa, mas então eu trabalho com 2 camadas, pois, eu só não utilizo o VB.
É isso mesmo, normalmente, nas páginas da WEB utilizamos o ASP para se conectar diretamente com o Banco, quando, no sistema de 3 camadas, temos que passar pelo VB.
Apesar de alguns estarem pensando, poxa....Mais de tenho somente duas camadas, é mais rápido, afinal, é menos lugar para as informações transitarem.
Neste caso, os que pensam assim estão enganados, pois, se esquecem que o ASP é uma linguagem de interpretação "online", ou sejam a cada vez que uma página ASP é chamada, o servidor tem que compila-la para entender o que foi escrito ali.
No caso do VB, linguagem compilada é processamento é em média 100 vezes mais rápido. É isso mesmo 100 vezes. É muita coisa.
Para quem gostaria de fazer um teste, utilize o Vb para dar um LOOP num recordset de 10.000 registros, conte quanto tempo isto demora (contagem através do código) e faça a mesma coisa no ASP.
O VB é aproximadamente 100 vezes mais rápida, pois utiliza um linguagem compilada, sendo acessada muito mais rapidamente, além de trazer outros benefícios (Posso fazer um outro tópico para explicar isto direito)
Mas, não vamos sair do tópico, vamos falar do COM+ e os componentes.
Neste caso, utilizando componentes, temos que criar um arquivo através do VB do tipo "DLL" - "Dinamic Link Library", e aí, podemos incluir diversos métodos , funções, propriedades.
Para fazer um teste, vamos incluir uma função muito simples, aliás, os testes do testes.
Iniciamos uma DLL através do VB, incluimos uma classe que agora se chamara "MeuProjeto" e salvem o projeto com o nome "MinhaDLL"
>
Function TestedeVB(Byval ds_texto as String) as String
TestedeVB= ds_texto
End Function
Registrem a DLL com o comando RegSvr32 "C:\MinhaDLL.dll"Agora abrimos nossa página ASP e escrevemos o seguinte código
>
Set MeuObjeto = Server.CreateObject("MInhaDLL.MeuProjeto")
strTexto = MeuObjeto.TestedeVB("OI Mundo")
Response.Write strTexto
Set MeuObjeto = Nothing
No Exemplo acima, não utilizamos transação, e por isso não vamos mexer com o COM+
No exemplo abaixo, iremos utilizar a mesma DLL para incluir uma transação.
Para isso click em "Project" --> "References" e inclua a opção "COM+ Services Type Library"
>
Sub UtilizarTransacao(Byval nome_usuriario as String, Byval ds_senha as String)
On Error GoTO TrataErro
'=================
'INICIA A TRANSAÇÃO
'=================
Set oContext = getObjectContext()
Dim OConn as Object
Dim ORs as Object
Set ORs = oContext.CreateInstance("Adodb.recordset")
Set oConn = oContext.CreateInstance("Adodb.connection")
OConn.open "stringSQL"
ORs.open "tb_usuario",oConn,1,3,2
ORs.Addnew
ORs("ds_usuario") = ds_usuario
ORs("ds_senha") = ds_senha
ORs.Update
ORs.Close
Set ORs = nothing
oConn.Close
Set oConn = nothing
TrataErro:
If Err <> 0 then
oContext.SetAbort
else
oContext.SetComplete
End if
End Sub
Compilem a DLL e abram o COM+, inclua um novo Pacote com as opções genéricas e registrem a DLL através do COM+.
Pessoal,
POr enquanto é isso, caso precisem de mais ajuda, postem...
Estarei por perto.
At.
Marcelo Eduardo B. Kopczynski
Carregando comentários...