Sei sulla pagina 1di 91

Detalles DNA

LABORATORIO DNA, 2001


Roberto Pardo
Consultor
Regional Director, Microsoft Colombia

OBJETIVOS

Mostrar cmo estructurar aplicaciones


empresariales (DNA 2000) con tecnologa
MS
Explicar los conceptos bsicos de las
tecnologas claves usadas en desarrollo

COM, MTS/COM+, XML, ADO/OLE-DB,


ASP/IIS, SOAP, etc..

Preparar la teora para los ejercicios de


los siguientes dos das

AGENDA

Arquitecturas
Objetos
COM
MTS/COM+
XML
ADO
SOAP
Presentacin
Seguridad

AGENDA

Arquitecturas
Objetos
COM
MTS/COM+
XML
ADO
SOAP
Seguridad

Puntos a tratar

Visin Global de la Estructura Interna


Programacin
Transacciones
Concurrencia
Lo nuevo y especfico de COM+

Qu es MTS?

Microsoft Transaction Server (MTS) es una adicin


a COM!
Es un administrador de objetos.

Es un sistema de optimizacin de manejo de


recursos (object Request Broker)

Propiedades declarativas
Seguridad
Deployment

Pooling de conexiones, threads, etc.


JIT
Concurrencia

Es un manejador de Transacciones (ACID, DTC)

COM+

COM+ reemplaza a COM en Windows 2000:


1: Une MTS y COM en un slo runtime y modelo de
programacin
Olvidarse de uso o no uso MTS?

2: Crea nueva infraestructura de informacin para


tipos (cambia type library, compilador IDL, etc.)

Nuevas Funciones y Mejoras


Modelo de Concurrencia ms poderoso
Modelo de Seguridad ms fino
Nueva funcionalidad: Queue Components,
Eventos, Component Load Balancing

Arquitectura de MTS (Para


NT)

Un run time para componentes COM (mtxex.dll)


Herramienta de administracin (MTS Explorer)

Distributed Transaction Coordinator (DTC)

Corre en Microsoft Management Console (MMC)


Coordina transacciones sobre recursos
hetereogneos

..Todo como parte de IIS, Option Pack 4.0

COM+
Arquitectura de MTS
DLLHOST.EXE

COM+ RUNTIME

W2000

Arquitectura de MTS (con


WebServer)

Arquitectura COM+

Arquitectura COM+ (con Web Server)

Objetos Configurados

Objetos deben explcitamente


inscribirse en MTS (para NT) o en
COM+ (para W2K)
Se inscriben via herramienta
interactiva (MMC) y un Wizard

NT -> MTS Explorer


W2K -> Component Services

Inscritos

NT -> Objetos MTS


W2K -> Objetos Configurados

Ejemplo de Creacin de
Objetos configurados via
Component Services

Usar Component Services

Ejemplo de Creacin de
Objetos configurados via
Programacin
COMAdminCatalog

COMAdminCatalogCollection

COMAdminCatalogObject

Ejemplo de Creacin de
Objetos configurados via
Programacin
Dim Catalog
Set Catalog = CreateObject ("COMAdmin.COMAdminCatalog")
Dim collApplications
Set collApplications = Catalog.GetCollection("Applications")
collApplications.Populate
Cree nueva App
Dim objApp
Set objApp = collApplications.Add
Propiedad de la nueva app
objApp.Value("Name") = Compras
objApp.Value("QueuingEnabled") = True
objApp.Value("QueueListenerEnabled") = True
objApp.Value("Authentication") = 1
objApp.Value("RunForever") = True
collApplications.SaveChanges
Catalog.InstallComponent "Purchase Order", C:\Comps\POData.dll ,"",""
Catalog.InstallComponent "Purchase Order",C:\Comps\POBusiness.dll ,"",""

Cambios de MTS a COM+:


Trminos

Objeto MTS
Paquete (Package)
Explorador MTS
Mts.exe (surogate)
Catlogo MTS
Registry

Objeto COM+ Configurado


Aplicacin COM+
Component Services
dllhost.exe
Catlogo COM+
RegistrationDB (versin
optimizada de Registry)

Catalog Manager en COM+

CM intercepta lectura y escritura de


atributos de componentes configurados.
Intercepta registry tambin

Creacion de Objeto MTS


remoto

Usa SCM y en el registry del server


encuentra

en [LocalServer32] se pone
\System32\mtx.exe /p:{0EAC413A4696-11D1-B156-0080C72D2182}
El GUID es el del paquete

Explorador de MTS ayuda a crear


setups de servidores y clientes
manteniendo seguridad, puede manejar
varios servidores y correr en clientes

Estructura Interna de MTS

Dos objetos claves

CW: Context Wrapper

Intercepta TODAS las llamadas


Angel de la Guarda

OC: Object Context

Objeto COM con Interfases para manejar


propiedades del objeto

CW Context Wrapper
Mtx.exe
Stub
Proxy
CW

Objeto
MTS

MTS Executive

Objeto interno creado automticamente por MTS


cuando se instancia un objeto MTS
Intercepta todas las llamadas
Toda la interaccin es a travs de este objeto

Puntos interesantes del CW

Hace pre y postprocesamientos antes y


despus de invocar mtodos del objeto
Mira atributos definidos via Explorador MTS
Entre 600-700 bytes
Mismo CW para varias interfases
Cliente nunca sabe de CW, no distingue entre
objeto COM u objeto MTS
Interesante: puede haber referencia sin haber
objeto!

OC Object Context
Stub
Proxy

MTS Executive

Objeto
MTS

CW

OC

Otro objeto interno de MTS asociado con objeto MTS


original que permite comunicarse con MTS para
crear otros componentes, averiguar sobre seguridad,
controlar transaccionalidad

Puntos interesantes del OC

OC no siempre existe durante la vida del


objeto MTS (CW s)
OC jams los debe usar el cliente, es de
consumo interno del objeto MTS
Type Library de MTS
En COM+ OC puede ser compartido entre
varios objetos si sus requerimientos de
runtime son compatibles
Objetos intrnsecos de ASP (Request,
Response) se tienen como propiedades de
OC

Object Context vs Context


Wrapper

Object Context es interno y


ContextWrapper es la visin externa

Creacin de Objetos en MTS

Programacin

Un objeto, 3 mtodos principalmente

Set ctxObject = GetObjectContext() OJO!


NUESTRO CODIGO
No cdigo TX
NUESTRO CODIGO
No cdigo thread

No cdigo locking
etc.

Set objfoo =
ctxObject.CreateInstance(Cuenta.1)
NUESTRO CODIGO
NUESTRO CODIGO
ctxObject.SetComplete
ctxObject.SetAbort

Obtiene
contexto
Para crear otro
objeto, hereda mi
contexto
Si todo bien
Si mal

Tres mtodos Claves


Sub RunMyTransaction()

' . . . . . . . . . .
' Haga el meollo de la cuestin
' . . . . . . . . . .
'
Exit Sub

End Sub

Tres mtodos Claves


Sub RunMyTransaction()
Dim ObjCtx As ObjectContext
Set ObjCtx = GetObjectContext()
' . . . . . . . . . .
' Haga el meollo de la cuestin
' . . . . . . . . . .
' Si todo acaba bien
ObjCtx.SetComplete
Exit Sub

End Sub

Tres mtodos Claves

Sub RunMyTransaction()
On Error GoTo WriteError
Dim ObjCtx As ObjectContext
Set ObjCtx = GetObjectContext()
' . . . . . . . . . .
' Haga el meollo de la cuestin
' . . . . . . . . . .
' Si todo acaba bien
ObjCtx.SetComplete
Exit Sub
WriteError:
' Si no se acaba bien
ObjCtx.SetAbort
Err.Raise vbObjectError + 1, ,"Transaction unsuccessful"
End Sub

Tres mtodos Claves

Sub RunMyTransaction()
On Error GoTo WriteError
Dim ObjCtx As ObjectContext
Set ObjCtx = GetObjectContext()
' . . . . . . . . . .
' Haga el meollo de la cuestin
Dim Customers As CCusts
Set Customers = ObjCtx.CreateInstance(Market.CCusts)
ObjCtx.SetComplete
Exit Sub
WriteError:
' Si no se acaba bien
ObjCtx.SetAbort
Err.Raise vbObjectError + 1, ,"Transaction unsuccessful"
End Sub

Interfases del Object


Context
IUnknown
IObjectContext

IContextState
Dim
Dim
Dim
Dim
Set
Set
Set
Set

ContextInf
o
Security
ObjectContext

objCtx As COMSVCSLib.ObjectContext
objInfo As COMSVCSLib.ContextInfo
objSec As COMSVCSLib.SecurityProperty
objSt As COMSVCSLib.IContextState
objCtx = COMSVCSLib.GetObjectContext()
objInfo = objCtx.ContextInfo
objSec = objCtx.Security
objSt = objCtx

Interfase IObjectContext :
Mtodos

CreateInstance
DisableCommit
EnableCommit
IsCallerInRole

IsInTransaction
IsSecurityEnabled
SetAbort
SetComplete

Dim objCtx As COMSVCLib.ObjectContext


Set objCtx = GetObjectContext
If objCtx.IsInTransaction Then
Do Something
End If

Interfase IObjectContext :
Mtodos
Dim ObjCtx As ObjectContext
Set ObjCtx = GetObjectContext()

contiene info sobre seguridad


Dim IsAppSecure As Boolean
IsAppSecure = ObjCtx.IsSecurityEnabled()
info sobre creador del objeto
Dim Creator As String
Creator = ObjCtx.Security.GetOriginalCreator()
info sobre quien invoca al objeto
Dim Caller As String
Caller = ObjCtx.Security.GetOriginalCaller()

Interfases (MTS y COM+)


Interface

Type

Uses

Available in
MTS?

ObjectContext

Object context and


call context

Transaction control; Programmatic security; Obtaining


references to ASP objects such as Request,
Response, and Application

Yes

ContextInfo

Object context

Obtaining contextual information about the current


context, activity, and transaction

No

IContextState

Object context

Transaction control

No

SecurityCallC
ontext

Call context

Programmatic security

No

JIT (Just In Time Activation)

Ciclo de Vida de un Objeto:


Cuatro Etapas

Creacin

Activacin

Desactivacin

Destruccin

JIT y Ciclo de Vida de un


Objeto

Cmo se habilita JIT

Desactivacin de Objetos

Via SetComplete() SetAbort() de ObjectContext,


SetDeActivateOnReturn() de IContextState
O tambin declarativamente

Activacin JIT

Al invocarse SetComplete el componente pierde estado


(stateless)

Se comporta como componente recin creado

No hay estado en variables miembro

Esto se llama DESACTIVADO

Los clientes pueden seguir teniendo referencias a l

La siguiente invocacin de uno de sus mtodos lo


ACTIVA

La propiedad de desactivar y reactivar un objeto MTS


mientras cliente mantiene referencia se llama Just-

In-Time activation

Estado de objeto se pierde al


desactivarse
Private m_CustID As Long
Property Let CustID(ID As Long)
m_CustID = ID
End Property

objVar.CustID = 1234

Function PlaceOrder(Item As String, Qty As Long)

objVar.PlaceOrder(C 15, 3)

Haga lo que sea para poner orden


GetObjectContext.SetComplete
End Function

Solucin?

objVar.PlaceOrder(A 12, 1)

Otra Interfase: ObjectControl


Implements ObjectControl
Private Sub ObjectControl_Activate()
' codigo de iniciacin, reemplaza initialize
End Sub
Private Sub ObjectControl_Deactivate()
' codigo de terminar, reemplaza terminate
End
Private Function ObjectControl_CanBePooled() As Boolean
' no en MTS 2.0, si True lo pone en pool en COM+
ObjectControl_CanBePooled = False
End Function

Recuerde!!!!

SetComplete() es un mtodo de la
interfase al objeto ObjectControl
Y hace dos cosas DIFERENTES

Transaccional

Voto

Desactiva el Objeto!!!!!!

Creacin de Componentes
MTS desde VB

Creacin

Cree ActiveX DLL con propiedad


Instances en Public MultiUse para la(s)
clase(s)

Instalacin via MTS Explorer

Drag and drop en Componente de un


Package

Creacin objeto (MTS)

Clase AppServer con dos mtodos SafeRef y


GetObjectContext
COM+ Services Type Library

Pooling, Transaccionalidad

Pools de Conexiones
Pool de Threads
Pool de Objetos
El debate State vs Stateless
Transacciones

Terminologa

Clientes Base: Los que crean


componentes MTS. Primer componente
es el objeto raz

Pooling: tcnica que hace que recursos


se asignen de un pool

De conexiones

De threads

De Objetos

Manejo de Conexiones

Pool de Conexiones

Si mismo string de conexin

Vida Conexin = Vida de la


Instancia
' class CCustomerManager
Private conn As ADODB.Connection
Sub Class_Initialize()
Set conn = New ADODB.Connection
conn.Open sConnect
End Sub
Sub AddCustomer(ByVal Customer As String)
' code to add new customer record using conn
End Sub
Sub Class_Terminate()
conn.Open sConnect
Set conn = Nothing
End Sub

Vida Conexin por Mtodo


Sub MyMethod()
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.Open sConnect '(1)establish
connection
'*** your code here (2) conduct rw
ops
conn.Close
' (3) close
connection
Set conn = Nothing
End Sub

Transacciones

Reglas ACID

Transaccin debe cumplir 4 requerimientos


Debe ser atmica

Deber ser consistente

Nunca debe quedar en estado invlido una vez que


termine la transaccin

Debe ser isolated (aislada)

Todo o nada

Cambios uncommitted no los puede ver nadie

Debe se durable

Commited implica persistente

Operaciones (implcitas a
veces) en Transacciones
Sub HagaAlgo()
.....
Begintransaction()
.....
Lock Tabla Clientes
Update Tabla Clientes
....
Lock Registro Proveedores
Update Registro Proveedores
.....
If todobien then
CommitTransaction
Else
AbortTransaction
End Sub

Transacciones

Granularidad

Normalmente implcito
Se puede controlar via hints
UPDATE Products WITH (ROWLOCK)
SET Quantity = Quantity - 1
WHERE Name = 'Dog'

Problemas potenciales de
Concurrencia

Lost Updates
Dirty Reads
Unrepeatable Reads
Phantoms
EJERCICIO EN QUERY ANALYZER

Grados de Aislamiento (Isolation),


de Proteccin entre ellas

Read Uncommitted
Read Committed

Repeatable Read

Reads se liberan antes de acabar trans


Default en SQLServer y ADO cuando se
corre tran sin COM+
RC + todos los locks de lectura se
mantienen hasta final de trans

Serializable

RR + si query se invoca varias veces da


siempre el mismo resultado. No phantoms
(v.g., no puede haber insert de otra Tx)
Default en COM+

Grados de Aislamiento

Que ocurran o no estos problemas


depende del grado de aislamiento
Degree

2.999

Common Name

Chaos

Read
Uncommitted

Read
Committed
Cursor
Stability

Repeatable
Read

Serializable

AKA

Browse

Isolated

Lost Updates?

Yes

No

No

No

No

Dirty Reads?

Yes

Yes

No

No

No

Unrepeatable Reads?

Yes

Yes

Yes

No

No

Phantoms?

Yes

Yes

Yes

Yes

No

Transaction y Lock Manager


Client 1

VB
Object

ADO
Conn

Lock
Manager

Transaction
Manager

Activity

Client 2

VB
Object

ADO
Conn

Activity

Client N

VB
Object

Data
ADO
Conn

Activity

COM+ Application

Concurrencia implica locking

DBMS
SQLSERVR.EXE

Tx y Aislamiento en ADO
Dim conn As Connection
Set conn = New Connection
conn.Open "DSN=Market;UID=sa;PWD="
conn.IsolationLevel = adXactSerializable
conn.BeginTrans
' SQL statements omitted for clarity
conn.Execute SQL_DecrementInventory
conn.Execute SQL_ChargeCustomer
conn.Execute SQL_AddOrder
conn.CommitTrans

Tx en SQL

Control transaccional usando SQL

Lgica SQL metida en batch SQL o en


stored procedure (disminuye trfico)
Nivel de aislamiento (isolation) se
puede ajustar en cada statement
usando hints.
Normalmente se requiere usar SQL
que es especfico de cada DBMS
Con este enfoque, escribir cdigo
OLTP supereficiente que funcione en
varios DBMS es casi imposible

Tx en T-SQL
-- set isolation level to serializable
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
-- run transaction to purchase a product
BEGIN TRANSACTION
-- decrement product quantity from inventory
UPDATE Products
SET Quantity = Quantity - 1
WHERE Product = 'Dog'
-- charge price to customer account
UPDATE Customers
SET AccountBalance = AccountBalance + 20
WHERE Customer = 'Bob'
-- add order record
INSERT Orders(Customer, Product, Quantity, Price)
VALUES('Bob', 'Dog', 1, 20)
COMMIT TRANSACTION

Transacciones Distribuidas

Las transacciones locales slo


funcionan si datos en la misma
mquina

Qu pasa si los datos estn en


diferentes mquinas?

Problema difcil
Commit/Abort toca coordinarlo entre
mltiples fuentes de datos

Una Transaccin Distribuida


Computer 2
RM2 -SQL Server

Computer 1
RM1 - MSMQ

Your Tx COM+ Application


RM Proxy

Queue

RM Proxy

Data

Participating DTC

RM Proxy

Computer 3
The Coordinating DTC

RM3 - ORACLE
Data

Participating DTC

Protocolo 2PCP
CTM

PTM 1

PTM 2

PTM n
......

FASE 1
VOTO
VOTO
VOTO
DECISION!
FASE 2

El DTC de Microsoft

DTC es el Distributed Transaction Coordinator

Es el transaction manager de MS
Coordina transacciones distribuidas y garantiza
reglas ACID
Implementa el 2PCP

Originalmente parte de SQLServer, hoy en da


parte de MTS y COM+
MTS/COM+ es como la transaccin lgica

DTC crea objeto transaccional y le da interfase


ITransaction a MTS

Esqueleto Tpico en cdigo


Sub EjecuteTransaccion()
On Error GoTo ManejeError
Dim ObjCtx As ObjectContext
Set ObjCtx = GetObjectContext()
' ................
' lea y escriba en la base de datos
' si todo sale bien
ObjCtx.SetComplete
Exit Sub
ManejeError:
' Si hubo problema: lgica, bd, etc.
ObjCtx.SetAbort
Err.Raise vbObjectError + 1, ,"Transaccion abortada"
End Sub

Uso del ObjectContext

Si Tx involucra VARIOS
objetos

Objeto base (raz): donde arranca

Commit o abort son los que realmente resuelven


la transaccin
Los Commit y Aborts de los dems objetosson
simplemente votos que se consultan cuando
base resuelva

Transaccin fluye entre los objetos

Su ID y caractersticas abrcan varios objetos


No pasa frontera de aplic COM+

Propiedades Transaccionales
de Objetos

Propiedades transaccionales de
los Objetos

Requires a transaction: Hereda transaccin del


creador, COM+ crea una si es necesario (si
creador no tena transaccin)
Requires a new transaction: no hereda
transaccin, siempre crea una nueva
Supports transactions: hereda transaccin del
creador si ste tiene, o si no ejecuta sin
transaccin
Does not support transactions: no hereda,
ejecuta sin transaccin

Procesamiento de
Transacciones

Transacciones multicomponentes

Programacin Transacciones
Cmo declarar

En ASP:
<%@ TRANSACTION=Required Language=JScript %>

En C++ y Java

Use atributos en type library


#include <mtxattr.h>
[ uuid(04CF0B76-1989-11D0-B917-0080C7394688),
helpstring("Account Class"),
TRANSACTION_SUPPORTED ]
coclass CAccount
{ [default] interface IAccount; };

En Visual Basic

Use MTS/COM+ Explorer, Component Manager

Creacin de Objetos Secundarios

Transaction 1

Client

Transaction 2

Root

Joe

Brian

Jason

COM+ Runtime

Activity boundary

Ted

Mtodo del Broker


Function SubmitOrder(ByVal Customer As String, _
ByVal Product As String, _
ByVal Quantity As Long, _
ByRef OrderStatus As String) As Long
On Error GoTo SubmitError
Dim ObjCtx As ObjectContext
Set ObjCtx = GetObjectContext()
Dim Products As CProducts, Price As Currency
Dim Customers As Ccustomers
Dim Orders As COrders, OrderNumber As Long
Set Products = ObjCtx.CreateInstance(Market.CProducts)
Set Customers = ObjCtx.CreateInstance(Market.CCustomers)
Set Orders = ObjCtx.CreateInstance(Market.COrders)

Mtodo del Broker

Price)

Price = Products.Purchase(Product, Quantity)


Customers.Charge Customer, Price
OrderNumber = Orders.Add(Customer, Product, Quantity,

OrderStatus = The order has been accepted. & _


Your order number is & OrderNumber
SubmitOrder = OrderNumber
ObjCtx.SetComplete
SubmitError: if something goes wrong call SetAbort and
get out ASAP
ObjCtx.SetAbort
Err.Raise Err.Number, , Err.Description
End Function

Ejemplo Mtodo
' class CProducts
' Transaction setting: Supports transactions
' ADO code omitted for clarity
Function Purchase(ByVal ProductID As String, _
ByVal Quantity As Long) As Currency
Dim ObjCtx As ObjectContext
Set ObjCtx = GetObjectContext
' ADO code: query to determine quantity in inventory
If(InventoryLevel>=Quantity)
' ADO code: modify inventory level
' ADO code: determine price per unit
Purchase = Quantity * Price
ObjCtx.SetComplete
Else
ObjCtx.SetAbort
Err.Raise vbObjectError + 1, , "Quantity unavailable"
End If
End Sub

Arquitectura Tx Managers

Arquitectura MTS para Transacciones

DTC: Manejador de transacciones


Resource Managers: Manejan durable state y 2PCP
(v.g.,SQLServer, MSMQ). Trabaja en llave con DTC
Resource Dispenser: Manejan nondurable shared state (v.g.,
conexiones)

Comportamiento del
Commit/Abort

Cuando se desactiva el objeto raiz

Runtime de MTS/COM+ llama Commit o Abort


Se manejan 3 flags
COM+ Transaction
Context A

Client

Root
Object

COM+
Proxy

Doomed

Happy

TRUE

Done

FALSE

FALSE

Flags

Happy = Es el voto. Default es True.


Done = Objeto le dice a COM+ si ya
acab. Si el bit DONE de la raiz (obj.
Base) se pone en True se desactiva.
Default es false.
Doomed: Estado global. COM+ lo
inspecciona al desactivarse objeto
raiz. Si True llama Abort, SI False
hace Commit (Default es False).

Cmo funciona el voto?

Cmo funciona el voto?

Cualquier objeto puede evitar que la transaccin


haga commit

Si un objeto secundario se desactiva en estado


unhappy entonces MTS/COM+ coloca el flag de
doomed en true
Es irreversible una vez se coloca en true
COM+ Transaction
Doomed

True/False

proxy
Happy

Client

proxy
Happy

Done

Root
Object

Done

proxy
Happy

Done

proxy
Happy

Done

Secondary
Object 1

Secondary
Object 2

Secondary
Object 3

Cmo se Observa una


Transaccin

Lista de Transacciones

Cmo se Observa una


Transaccin

Estadsticas

Control de una Transaccin

La interfase ObjectContext permite que los


objetos voten explcitamente

Todo objeto que muere unhappy har que la


transaccin falle (doom = true)
Todo objeto secundario que no vota est dando
consetimiento (en forma pasiva) para que se haga
commit
El objeto raiz DEBE invocar SetComplete para que
se haga el commit de la transaccin

Interfase ObjectContext

Mtodos claves

DisableCommit: objeto est diciendo Estoy


unhappy pero no he acabado todava alguien
me puede volver happy."
EnableCommit: objeto est diciendo Estoy
happy pero no he acabado. Alguien todava me
puede hacer cambiar de opinin. "
SetComplete: objeto est diciendo " Estoy
happy y he acabado. Me desactivo."
SetAbort: objeto est diciendo " Estoy unhappy
y he acabado. Me desactivo y la transaccin va
a fallar (ddom=true) "

Interfase IContextState

Los mtodos de ObjectContext manejan los bits de


DONE y HAPPY

COM+ ofrece la interfase IContextState

SetMyTransactionVote
GetMyTransactionVote
SetDeactivateOnReturn
GetDeactivateOnReturn

En qu difiere IContextState de ObjectContext?

SetComplete, SetAbort, DisableCommit, EnableCommit

Puede leer los valores de los bits de done y happy


Los mtodos generan errores si el objeto no est en la
transaccin

Se debe usar IContextState en vez de ObjectContext?

Realmente no a menos que se quiera leer bits de happy y done

AutoComplete

Mtodos pueden
tener flag marcado
para indicar que
default de Done es
True

Util cuando no se
puede cambiar
cdigo

Consideraciones en transacciones
Multiobjeto

Cada transaccin tiene un objeto raz


la raiz la crea un cliente base

Todos los objetos en una transaccin


comparten la misma actividad

Elimina problemas de concurrencia y sincronizacin

En COM+, la raiz crea objetos secundarios


invocando CreateObject
En MTS, la raiz crea objetos secundarios
invocando CreateInstance
Recuerde que el operador New puede causar
problemas en MTS o COM+

Potrebbero piacerti anche