Hola compañeros...
Tengo una clase que hereda de System.EnterpriseServices.ServicedComponent,
esta clase se llama Manager y tiene algunas propiedades y un método (entre
otros) que utilizo para escribir hacer actualización e inserciones en una
base de datos. La clase Manager la idea es crearla transaccional con MTS y de
ahí el motivo de la herencia de ServicedComponent.
El método que se invoca para las actualizaciones e inserciones se llama Save.
Coloco un pequeño fragmento de código donde implemento la clase.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim om As Manager
om = New Manager()
'configuro algunas propiedades
om.Propiedad1 = "Algo1"
om.Propiedad2 = "Algo2"
om.Propiedad3 = "Algo3"
'llamo al método para insertar información
'el método Save llama internamente a ContextUtil.SetComplete(), tras haber
'realizado cualquier actualización o inserción en la base de datos; esto no
tiene
'problema alguno, no hay inconvenientes
om.Save()
'AQUÍ!!!!!! tengo el problema
MsgBox( om.Propiedad1 )
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
En la línea del MsgBox se presenta algo que nunca había presenciado, y es
que la instancia om de la clase Manager se pierde, es decir, se vuelve a
crear un nuevo objeto o instancia de la clase Manager. Para el ejemplo
anterior, el MsgBox muestra que Propiedad1 está vacía o en blanco, cuando no
debería ser así puesto que anteriormente le había asignado "Algo1".
La clase Manager cumple con la finalidad de procesar las transacciones con
MTS, es decir, si actualizo o inserto algo en la base de datos y luego llamo
a ContextUtil.SetAbort() se hace el Rollback esperado; y si se llama
ContextUtil.SetComplete() se hace el Commit esperado. El problema radica en
que se pierde la instancia que tengo y se crea otra.
¿Este es siempre el comportamiento cuando se trabaja en .NET con COM?
¿Es posible cambiar el comportamiento?
Les agradezco su oportuna respuesta.
Leer las respuestas