Udostępnij za pośrednictwem


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+.)

Diagram przedstawiający transakcję COM+ z funkcją UpdateAuthorAddress.

Aby element UpdateAuthorAddress był składnikiem transakcyjnym, wymagane są następujące kroki:

  1. 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).

  2. 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.)

Krok 2. Rozszerzanie transakcji przez wiele składników

Krok 3. Ponowne tworzenie składników

funkcja COM+ natychmiastowej aktywacji

Synchronizacja COM+

Konfigurowanie transakcji

tworzenie aplikacji COM+

ustawianie atrybutu transakcji