Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcelo Barcellos

com+

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara muito bom este tópico....Vou fazer uns testes, só uma pergunta. Qual programa que eu gero a DLL !?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá...estou muito interessado em aprender a programar dessa maneira...em 3 camadas ..... utilizando COM+Gostaria onde poderia obter um tutorial mais avançado sobre isso..... Na verdade sobre a programação de DLLs em VB ...Outras perguntas: - Quando devo utilizar um objeto em VB - Quais as vantagens, - Quais as desvantagens ?Obrigado ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara.Tutorial eu não conheço, mas tem um livro muito bom "Componentes COM+", dá uma procurada no submarino.Quando devo utilizar o VB. ?R: No sistema tres camadas o VB é o responsável pelo "vai" e "vem" das informações entre as páginas e o banco de dados. Portanto, qualquer conexão com o banco deve ser feita pelo VB e nunca pela página.Quais as vantagens?R: Escalabilidade, Tempo de Processamento, Reutilização do Código, Organização do Código, Compilação do Código, etc,etcDesvantagens?R: Mais trabalhoso. Não há nenhum desvantagem técnica na utilização de componentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa...valeu mesmo pelas dicas, mas, nao querendo ser chato...você poderia me passar um exemplo legal dessa utilização em tres camadas ... tipo, quais os processos que eu deveria fazer, tipo, que funções teriam : talvez inserção de dados, consultas ????Eu possso usar componentes para outras funções, tipo, login, validação de campos, calculos e algumas outras utilidades ?????valeu mesmo ....! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplo:

 

ASP

[*]

 

[*]'============================

 

[*]'PÁGINA ASP

 

[*]'============================

 

[*]

 

[*]cd_usuario Request("cd_usuario")

 

[*]ds_usuario Request("ds_usuario")

 

[*]ds_senha  Request("ds_senha")

 

[*]dt_inclusao = Now

 

[*]

 

[*]Set MyObject Server.CreateObject("MeuComponente.Generico")

 

[*]Call MyObject.IncluirUsuario(cd_usuario, ds_usuario,ds_senha,dt_inclusao,varErro)

 

[*]

 

[*]if varErro(0) then

 

[*] Call TrataErro(varErro)

 

[*] else

 

[*] Response.Redirect "confirma_inlcusao.asp?cd_usuario=" & cd_usuario

 

[*]End if

 

[*]

 

 

ASP

[*]

 

[*]'============================

 

[*]'COMPONENTE VB

 

[*]'============================

 

[*]Option Explicit

 

[*]Sub IncluirUsuario(ByRef cd_usuario as Variant, _

 

[*] Byval ds_usuario as String, _

 

[*] Byval ds_senha as String, _

 

[*] ByVal dt_inclusao as Date, _

 

[*] ByRef varErro as Variant)

 

[*]

 

[*]On Error GoTo TrataErro

 

[*]

 

[*]'=====================

 

[*]'CONTROLAR TRANSAÇÃO

 

[*]'=====================

 

[*]Call IniciarTransacao(True)

 

[*]

 

[*]'=====================

 

[*]'DECLARAR VARIAVEIS

 

[*]'=====================

 

[*]Dim oConn as New adodb.connection

 

[*]Dim ORs as New adodb.recordset

 

[*]

 

[*]'============================

 

[*]'VALIDAÇÕES NECESSÁRIAS

 

[*]'============================

 

[*]

 

[*]

 

[*]'=====================

 

[*]'ABRE CONEXÃO

 

[*]'=====================

 

[*]oConn.Open getConexaBD()

 

[*]

 

[*]'=====================

 

[*]'ABRE RECORDSET

 

[*]'=====================

 

[*]ORs.open "tb_usuario",oConn,1,3,2

 

[*]ORs.AddNew

 

[*]ORs("ds_usuario"= ds_usuario

 

[*]ORs("ds_senha"= ds_senha

 

[*]ORs("dt_inclusao"= dt_inclusao

 

[*]ORs.Update

 

[*]cd_usuario ORs("cd_usuario")

 

[*]

 

[*]'=====================

 

[*]'FECHA CONEXÃO

 

[*]'=====================

 

[*]ORs.Close

 

[*]Set Ors = nothing

 

[*]oConn.Close

 

[*]Set oConn = Nothing

 

[*]

 

[*]TrataErro:

 

[*]  Call TrataVarErro(varErro)

 

[*]  ConfirmaTransacao(varErro(0))

 

[*]

 

[*]

 

[*]End Sub

 

[*]

 

Cara...Esse é só um exemplo, mas, trabalhando com componentes existem mil maneiras de fazer uma só coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Show, muito boa a introdução ao uso de Com+!

 

Valeu Marcelo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.