Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
OBJETIVOS
AGENDA
Arquitecturas
Objetos
COM
MTS/COM+
XML
ADO
SOAP
Presentacin
Seguridad
AGENDA
Arquitecturas
Objetos
COM
MTS/COM+
XML
ADO
SOAP
Seguridad
Puntos a tratar
Qu es MTS?
Propiedades declarativas
Seguridad
Deployment
COM+
COM+
Arquitectura de MTS
DLLHOST.EXE
COM+ RUNTIME
W2000
Arquitectura COM+
Objetos Configurados
Inscritos
Ejemplo de Creacin de
Objetos configurados via
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 ,"",""
Objeto MTS
Paquete (Package)
Explorador MTS
Mts.exe (surogate)
Catlogo MTS
Registry
en [LocalServer32] se pone
\System32\mtx.exe /p:{0EAC413A4696-11D1-B156-0080C72D2182}
El GUID es el del paquete
CW Context Wrapper
Mtx.exe
Stub
Proxy
CW
Objeto
MTS
MTS Executive
OC Object Context
Stub
Proxy
MTS Executive
Objeto
MTS
CW
OC
Programacin
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
' . . . . . . . . . .
' Haga el meollo de la cuestin
' . . . . . . . . . .
'
Exit Sub
End Sub
End Sub
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
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
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
Interfase IObjectContext :
Mtodos
Dim ObjCtx As ObjectContext
Set ObjCtx = GetObjectContext()
Type
Uses
Available in
MTS?
ObjectContext
Yes
ContextInfo
Object context
No
IContextState
Object context
Transaction control
No
SecurityCallC
ontext
Call context
Programmatic security
No
Creacin
Activacin
Desactivacin
Destruccin
Desactivacin de Objetos
Activacin JIT
In-Time activation
objVar.CustID = 1234
objVar.PlaceOrder(C 15, 3)
Solucin?
objVar.PlaceOrder(A 12, 1)
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
Pooling, Transaccionalidad
Pools de Conexiones
Pool de Threads
Pool de Objetos
El debate State vs Stateless
Transacciones
Terminologa
De conexiones
De threads
De Objetos
Manejo de Conexiones
Pool de Conexiones
Transacciones
Reglas ACID
Todo o nada
Debe se durable
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
Read Uncommitted
Read Committed
Repeatable Read
Serializable
Grados de Aislamiento
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
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
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
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
Problema difcil
Commit/Abort toca coordinarlo entre
mltiples fuentes de datos
Computer 1
RM1 - MSMQ
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
Es el transaction manager de MS
Coordina transacciones distribuidas y garantiza
reglas ACID
Implementa el 2PCP
Si Tx involucra VARIOS
objetos
Propiedades Transaccionales
de Objetos
Propiedades transaccionales de
los Objetos
Procesamiento de
Transacciones
Transacciones multicomponentes
Programacin Transacciones
Cmo declarar
En ASP:
<%@ TRANSACTION=Required Language=JScript %>
En C++ y Java
En Visual Basic
Transaction 1
Client
Transaction 2
Root
Joe
Brian
Jason
COM+ Runtime
Activity boundary
Ted
Price)
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
Comportamiento del
Commit/Abort
Client
Root
Object
COM+
Proxy
Doomed
Happy
TRUE
Done
FALSE
FALSE
Flags
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
Lista de Transacciones
Estadsticas
Interfase ObjectContext
Mtodos claves
Interfase IContextState
SetMyTransactionVote
GetMyTransactionVote
SetDeactivateOnReturn
GetDeactivateOnReturn
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