Freigeben über


Schritt 1: Erstellen einer Transaktionskomponente

Ziele

In diesem Schritt erfahren Sie folgendes:

  • So schreiben Sie eine Transaktionskomponente in Microsoft Visual Basic
  • Was die Standardeinstellungen für COM+-Dienste sind
  • So konfigurieren Sie COM+-Dienste

BESCHREIBUNG

Die Komponente UpdateAuthorAddress, die in diesem Abschnitt erstellt werden soll, aktualisiert die Adresse eines vorhandenen Autors in der Pubs-Datenbank. Die Pubs-Datenbank ist eine Beispieldatenbank, die Microsoft SQL Server enthält. Sie enthält Veröffentlichungsinformationen wie Autorennamen, Adressen und Buchtitel.

Hinweis

Pubs sind der Datenspeicher, der in diesem Primer verwendet wird.

 

Da UpdateAuthorAddress einen Datenspeicher aktualisiert, empfiehlt es sich, die Arbeit in eine Transaktion einzuschließen, wie in der folgenden Abbildung dargestellt, sodass beim Aufrufen der Komponente COM+ automatisch eine Transaktion gestartet und die Datenbank (Ressourcen-Manager) in dieser Transaktion aufgeführt wird. (Ausführliche Informationen zu Transaktionen in COM+finden Sie unter COM+-Transaktionen.)

Diagram that shows a COM+ transaction with UpdateAuthorAddress.

Um UpdateAuthorAddress eine Transaktionskomponente zu erstellen, sind die folgenden Schritte erforderlich:

  1. Die Komponente muss geschrieben werden. Für zusätzlichen Schutz wird eine Unterroutine hinzugefügt, um sicherzustellen, dass COM+ das Objekt in einer Transaktion erstellt hat. Außerdem ist die grundlegende Fehlerbehandlung in der Komponente enthalten, um die Fehlerwiederherstellung zu vereinfachen. Transaktionsüberprüfung und Fehlerbehandlung verbessern die Zuverlässigkeit der Komponente. (Siehe Schritt 1 Beispielcode für einen vollständigen Eintrag der UpdateAuthorAddress-Komponente.)

  2. Nachdem Sie die Komponente zu einer COM+-Anwendung hinzugefügt und die Anwendung installiert haben, muss das Transaktionsattribute auf "Erforderlich" festgelegt werden, was garantiert, dass COM+ jedes UpdateAuthorAddress-Objekt in einer Transaktion erstellt. Anweisungen zum Festlegen des Transaktionsattributes für eine Komponente finden Sie unter Festlegen des Transaktionsattributes.

    Hinweis

    Durch Festlegen des Transaktionsattributes auf einer Komponente wird definiert, wie COM+ jedes Objekt in Bezug auf Transaktionen erstellt. Transaktionsattributewerte werden ignoriert, nicht unterstützt, Unterstützt, Erforderlich und Neu erforderlich. Der Erforderliche Wert ist keine der Standardattributewerte einer Komponente.

     

COM+ bindet den Transaktionsdienst mit just-in-time-Aktivierung (JIT) und Gleichzeitigkeit. Wenn Sie eine Komponente als Transaktion deklariert haben, erzwingt COM+ auch DIE JIT-Aktivierung und den Parallelitätsschutz (Synchronisierung).

Beispielcode

Die UpdateAuthorAddress-Komponente öffnet eine Verbindung mit der Pubs-Datenbank, sodass der Benutzer den Namen, die Adresse oder den Vertragsstatus eines Autors ändern kann. Außerdem wird eine zweite Komponente aufgerufen, die in Schritt 2 erläutert wird: Erweitern einer Transaktion über mehrere Komponenten hinweg.

Um den folgenden Code in einem Microsoft-Visual Basic-Projekt zu verwenden, öffnen Sie ein neues ActiveX.dll Projekt, und fügen Sie Verweise auf die Microsoft ActiveX Data Objects Library und die COM+ Services Type Library hinzu.

Hinweis

Der Beispielcode in diesem Primer dient zur Abbildung und ist möglicherweise nicht die effizienteste für die tatsächliche Bereitstellung und Produktion.

 

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

Zusammenfassung

  • COM+ weist Standardwerte zu. Sie können die meisten Dienstattribute neu konfigurieren.
  • Wenn Sie das Transaktionsattribute einer Komponente auf "Erforderlich " festlegen, muss COM+ jede Instanz dieser Komponente in einer Transaktion erstellen, aber nicht unbedingt eine neue Transaktion starten.
  • Bei der Überprüfung der Anwesenheit einer Transaktion wird bestätigt, dass der Transaktionsattributewert der Komponente nicht versehentlich auf einen nicht transaktionsbezogenen Wert zurückgesetzt wurde , z. B. "Ignorieren" oder " Nicht unterstützt".
  • Die Behandlung von Fehlern macht Ihre Komponente zuverlässiger und einfacher, die Problembehandlung zu beheben.
  • COM+ erzwingt JIT-Aktivierung und Concurrency Protection Services für Transaktionskomponenten.
  • Das Schließen der Datenbankverbindung, wenn Sie damit fertig sind, ermöglicht es einer anderen Komponente in derselben Transaktion, die Verbindung aus dem Verbindungspool wiederzuverwenden. ( Verbindungspooling sollte nicht mit Objektpooling verwechselt werden.)

Schritt 2: Erweitern einer Transaktion auf mehrere Komponenten

Schritt 3: Erneutes Verwenden von Komponenten

COM+ Just-in-Time-Aktivierung

COM+ Synchronisierung

Konfigurieren von Transaktionen

Erstellen von COM+-Anwendungen

Festlegen des Transaktionsattributes