Krok 1. Tworzenie składnika transakcyjnego
Cele
W tym kroku poznasz następujące elementy:
- Jak napisać składnik transakcyjny w programie Microsoft Visual Basic
- Jakie są domyślne ustawienia usług COM+
- Jak skonfigurować usługi COM+
Opis
Składnik UpdateAuthorAddress, składnik, który ma zostać utworzony w tej sekcji, aktualizuje adres istniejącego autora w bazie danych Pubs. Baza danych Pubs to przykładowa baza danych dostarczana z programem Microsoft SQL Server. Zawiera informacje o publikowaniu, takie jak nazwy autorów, adresy i tytuły książek.
Notatka
Pubs to magazyn danych, który jest używany w całym tym podręczniku.
Ponieważ UpdateAuthorAddress aktualizuje magazyn danych, zaleca się włączenie tej operacji do transakcji, jak pokazano na poniższej ilustracji, aby gdy klient wywołuje składnik, COM+ automatycznie rozpoczął transakcję i włączył bazę danych (menedżera zasobów) do tej transakcji. (Aby uzyskać szczegółowe informacje o transakcjach w COM+, zobacz Transakcje COM+.)
Aby element UpdateAuthorAddress był składnikiem transakcyjnym, wymagane są następujące kroki:
Składnik musi być zapisany. W celu zapewnienia dodatkowej ochrony dodawana jest podroutyna, sprawdzając, czy com+ utworzył obiekt w transakcji. Ponadto podstawowa obsługa błędów jest zawarta w składniku w celu uproszczenia odzyskiwania błędów. Weryfikacja transakcji i obsługa błędów zwiększają niezawodność składnika. (Zobacz przykładowy kod kroku 1, aby uzyskać pełną listę składnika UpdateAuthorAddress).
Po dodaniu składnika do aplikacji COM+ i zainstalowaniu aplikacji należy ustawić atrybut transakcji na Wymagane, co gwarantuje, że com+ tworzy każdy obiekt UpdateAuthorAddress w transakcji. Aby uzyskać instrukcje dotyczące ustawiania atrybutu transakcji dla składnika, zobacz Ustawianie atrybutu transakcji.
Notatka
Ustawienie atrybutu transakcji w składniku definiuje sposób tworzenia każdego obiektu w odniesieniu do transakcji. Wartości atrybutów transakcji to: ignorowane, nieobsługiwane, obsługiwane, wymaganei wymaga nowego. Wymagana wartość nie jest jedną z domyślnych wartości atrybutów składnika.
Com+ wiąże usługę transakcji z aktywacją just in time (JIT) i współbieżnością. Podczas deklarowania składnika jako transakcyjnego program COM+ wymusza również aktywację JIT i ochronę współbieżności (synchronizację).
Przykładowy kod
Składnik UpdateAuthorAddress otwiera połączenie z bazą danych Pubs, umożliwiając użytkownikowi modyfikowanie nazwy, adresu lub stanu kontraktu autora. Wywołuje on również drugi składnik, który jest omówiony w Krok 2: Rozszerzanie transakcji między wieloma składnikami.
Aby użyć następującego kodu w projekcie Microsoft Visual Basic, otwórz nowy projekt ActiveX.dll i dodaj odwołania do biblioteki obiektów danych Microsoft ActiveX i biblioteki typów usług COM+.
Notatka
Przykładowy kod w tym poradniku jest przeznaczony do celów ilustracyjnych i może nie być najbardziej wydajny w przypadku rzeczywistego wdrażania i produkcji.
Option Explicit
'
' Purpose: This class is used for updating an author's address.
'
' Notes: IMPT: This component implicitly assumes that it will
' always run in a transaction. Undefined results may
' otherwise occur.
'
'----------------------------------------------------------
' VerifyInTxn subroutine
' Verifies that this component is in a transaction.
' Throws an error if it is not.
'
Private Sub VerifyInTxn()
If Not GetObjectContext.IsInTransaction Then
' Transactions turned off.
Err.Raise 99999, "This component", "I need a transaction!"
End If
' Component is in a transaction.
End Sub
'----------------------------------------------------------
' UpdateAuthorAddress subroutine
' Procedure to update an author's address.
'
Public Sub UpdateAuthorAddress( _
ByVal strAuthorID As String, _
ByVal strPhone As String, _
ByVal strAddress As String, _
ByVal strCity As String, _
ByVal strState As String, _
ByVal strZip As String)
' Handle any errors.
On Error GoTo UnexpectedError
' Verify that component is in a transaction.
VerifyInTxn
' Get object context.
Dim objcontext As COMSVCSLib.ObjectContext
Set objcontext = GetObjectContext
' Get the IContextState object.
Dim contextstate As COMSVCSLib.IContextState
Set contextstate = objcontext
' Validate the new address information.
' The ValidateAuthorAddress function is described in Step 2.
Dim oValidateAuthAddr As Object
Dim bValidAddr As Boolean
Set oValidateAuthAddr = _
CreateObject("ComplusPrimer.ValidateAuthorAddress")
bValidAddr = oValidateAuthAddr.ValidateAuthorAddress( _
strAddress, strCity, strState, strZip)
If Not bValidAddr Then
Err.Raise 99999, "The UpdateAuthorAddress component", _
"The address of the author is incorrect!"
End If
' Open the connection to the database.
Dim conn As ADODB.Connection
Set conn = CreateObject("ADODB.Connection")
' Specify the OLE DB provider.
conn.Provider = "SQLOLEDB"
' Connect using Windows Authentication.
Dim strProv As String
strProv = "Server=MyDBServer;Database=pubs;Trusted_Connection=yes"
' Open the database.
conn.Open strProv
' Execute the query.
conn.Execute "update authors set phone= '" & strPhone & "'" & _
" set address= '" & strAddress & "'" & _
" set city= '" & strCity & "'" & _
" set state= '" & strState & "'" & _
" set zip= '" & strZip & "'" & _
" where au_id = '" & strAuthorID & "'"
' Close the connection.
conn.Close
' Get rid of the connection.
Set conn = Nothing
' Everything works--commit the transaction.
contextstate.SetMyTransactionVote TxCommit
contextstate.SetDeactivateOnReturn True
Exit Sub
UnexpectedError:
' There's an error.
contextstate.SetMyTransactionVote TxAbort
contextstate.SetDeactivateOnReturn True
End Sub
Streszczenie
- Com+ przypisuje domyślne wartości atrybutów. Można ponownie skonfigurować większość atrybutów usługi.
- Ustawienie atrybutu transakcji składnika na Wymagane gwarantuje, że COM+ musi utworzyć każde wystąpienie tego składnika w transakcji, ale niekoniecznie rozpoczyna nową transakcję.
- Sprawdzenie obecności transakcji potwierdza, że wartość atrybutu transakcji składnika nie została przypadkowo zresetowana do wartości nie transakcyjnej, takiej jak Ignore lub Not Supported.
- Obsługa błędów sprawia, że komponent jest bardziej niezawodny i łatwiejszy do diagnozowania problemów.
- COM+ wymusza aktywację JIT oraz usługi ochrony współbieżności dla składników transakcyjnych.
- Zamknięcie połączenia bazy danych, gdy skończysz z niego korzystać, umożliwia innemu składnikowi w tej samej transakcji ponowne użycie połączenia z puli połączeń. pl-PL: (Buforowanie połączeń nie powinno być mylone z pulą obiektów.)
Tematy pokrewne