3. Adım: Bileşenleri Yeniden Kullan
Hedef
Bu adımda, aşağıdakiler hakkında bilgi edineceksiniz:
- Yeniden kullanılabilir bileşenler.
- Yeniden kullanılabilirlik için planlama.
Açıklama
Bu COM+ hizmetlerinin önceki iki bölümü, Adım 1: İşlem Bileşeni oluşturma ve 2. Adım: İşlemi Birden Çok Bileşen Arasında Genişletme, microsoft SQL Server Pubs veritabanında bazı çalışmaları tamamlamaya, yazar bilgilerini güncelleştirmeye yardımcı olmak için ikinci bir bileşeni çağıran bir bileşenin nasıl yazıldığını gösterir; tüm çalışmalar tek bir işlemle korunur. Örnek bileşenler, bir yazarın verilerini güncelleştirme ve yazarın adresini doğrulama ve COM+ tarafından sağlanan işlem işleme, JIT etkinleştirmeve eşzamanlılık korumasıüzerinde odaklanmıştır.
Bu adım, 1. ve 2. adımlarda oluşturulan bileşenlerin nasıl yeniden kullanılmasını gösterir ve bu bileşenlerin tasarımı için bunun ne anlama geldiğini inceler. Aşağıdaki çizimde gösterildiği gibi bu, UpdateAuthorAddress
çağırarak veritabanına yeni yazar ekleyen yeni bir bileşen (AddNewAuthor
) oluşturmak anlamına gelir.
Bileşenleri yeniden kullanırken akışı gösteren
AddNewAuthor
, mevcut bileşen işlevselliğini yeniden kullanmakla birlikte ValidateAuthorName
adlı başka bir yeni bileşeni çağırır. Yukarıdaki çizimde gösterildiği gibi, ValidateAuthorName
işlemsel değildir. Bu bileşenin işlem özniteliği değeri, çalışmasını işlemden dışlamak için varsayılan ayarında (Desteklenmiyor) bırakılır. 3. adım örnek kodunda gösterildiği gibi, ValidateAuthorName
veritabanında salt okunur sorgular gerçekleştirir ve bu küçük görevin başarısız olması işlemi durdurma potansiyeline sahip olmamalıdır. Ancak, AddNewAuthor
bileşeninin işlem öznitelik değeri Gerekliolarak ayarlanır.
AddNewAuthor
, UpdateAuthorAddress
ve ValidateAuthorAddress
bileşenlerinin tümü işlemde oy alır. Bu işlemde AddNewAuthor
kök nesne olarak yer almaktadır. COM+ her zaman işlemde oluşturulan ilk nesneyi kök nesnesi yapar.
Bu örnekte, UpdateAuthorAddress
bileşeninin yeniden kullanımı kolaydır; COM+ beklenen hizmetleri otomatik olarak sunar. Ancak, UpdateAuthorAddress
bileşeninin işlem öznitelik değeri başlangıçta Gerekliyerine Yeni Gerektirir olarak ayarlanırsa sonuçlar farklı olurdu. Yüzeyde her iki ayar da benzer görünür; her ikisi de bir işlemi garantiler.
Yenigerektirir, ancak her zaman yeni bir işlem başlatırken Gerekli yalnızca nesnenin çağıranı işlem dışı olduğunda yeni bir işlem başlatır.
UpdateAuthorAddress
dikkatli ve düşünceli bir şekilde yapılandırmanın ne kadar önemli olduğunu buradan görebilirsiniz. Aksi takdirde COM+, hizmet isteğini farklı yorumlamış ve aşağıdaki çizimde gösterildiği gibi bir işlem yerine iki ilgisiz işlem oluşturmuş olabilir.
"Requires New" ile bileşenleri yeniden kullanırken akış gösterimi yapan
Not
Bileşenleri yeniden kullandığınızda, hizmetlerin istediğiniz sonucu destekleyecek şekilde yapılandırıldığından emin olun.
Örnek kod
AddNewAuthor bileşeni, istemci nesneye referansını serbest bırakana kadar nesnenin etkin kalmasına izin vererek yeni yazarların toplu eklenmesini gerçekleştirir.
Option Explicit
'
' Purpose: This class is used for adding a new author.
'
' Notes: IMPT: This component implicitly assumes that it will
' always run in a transaction. Undefined results may
' otherwise occur.
'
' AddNewAuthor
'
Public Sub AddNewAuthor( _
ByVal strAuthorFirstName As String, _
ByVal strAuthorLastName As String, _
ByVal strPhone As String, _
ByVal strAddress As String, _
ByVal strCity As String, _
ByVal strState As String, _
ByVal strZip As String, _
ByVal boolContracted As Boolean)
' Handle any errors.
On Error GoTo UnexpectedError
' Verify component is in a transaction.
' The VerifyInTxn subroutine is described in Step 1.
VerifyInTxn
' Get our object context.
Dim objcontext As COMSVCSLib.ObjectContext
Set objcontext = GetObjectContext
' Get the IContextState object.
Dim contextstate As COMSVCSLib.IContextState
Set contextstate = objcontext
' Validate that the author is OK.
' The ValidateAuthorName function is described after this function.
Dim oValidateAuthName As Object
Dim bValidAuthor As Boolean
Set oValidateAuthName = CreateObject("ComplusPrimer.ValidateAuthorName")
bValidAuthor = oValidateAuthName.ValidateAuthorName( _
strAuthorFirstName, strAuthorLastName)
If Not bValidAuthor Then
Err.Raise 999999, "The AddNewAuthor component", _
"You tried to add an author on the banned list!"
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
' Tell the database to actually add the author; use empty strings
' for this part and rely on the UpdateAuthorAddress
' component to validate the address/phone/etc data.
' Default Contract flag is off.
Dim strUpdateString As String
strUpdateString = "insert into authors values(_
'789-65-1234'," & _
strAuthorLastName & ", " & _
strAuthorFirstName & ", " & _
"'(555) 555-5555', ', ', ', '98765', "
If boolContracted Then
strUpdateString = strUpdateString + "1)"
Else
strUpdateString = strUpdateString + "0)"
End If
conn.Execute strUpdateString
' Close the connection; this potentially allows
' another component in the same transaction to
' reuse the connection from the connection pool.
conn.Close
Set conn = Nothing
' Create the UpdateAuthorAddress component.
Dim oUpdateAuthAddr As Object
Set oUpdateAuthAddr = CreateObject("ComplusPrimer.UpdateAuthorAddress")
' The component throws an error if anything goes wrong.
oUpdateAuthAddr.UpdateAuthorAddress "", strPhone, _
strAddress, strCity, strState, strZip
Set oUpdateAuthAddr = Nothing
' Everything works--commit the transaction.
contextstate.SetMyTransactionVote TxCommit
' Design issue: Allow batch additions of new
' authors in one transaction, or should each new author be added
' in a single new transaction?
contextstate.SetDeactivateOnReturn False
Exit Sub
UnexpectedError:
' There's an error.
contextstate.SetMyTransactionVote TxAbort
contextstate.SetDeactivateOnReturn True
End Sub
ValidateAuthorName
bileşeni, AddNewAuthor
adı veritabanına eklemeden önce yazar adlarını doğrular. Bu bileşen beklenmeyen bir şey olursa çağıranına bir hata döndürür.
Option Explicit
'
' Purpose: This class is used for validating authors before
' adding them to the database.
'
' Notes: This component doesn't need to be in a transaction because
' it is performing read-only queries on the database,
' especially since these queries are not overlapping with
' any updates of end-user data. If an unexpected error
' happens, let the error go back to the caller who
' needs to handle it.
'
Public Function ValidateAuthorName( _
ByVal strAuthorFirstName As String, _
ByVal strAuthorLastName As String _
) As Boolean
ValidateAuthorName = False
' 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
' Suppose another hypothetical table has been added to the Pubs
' database, one that contains a list of banned authors.
Dim rs As ADODB.Recordset
Set rs = conn.Execute("select * from banned_authors")
' Loop through the banned-author list looking for the specified
' author.
While Not rs.EOF
If rs.Fields("FirstName") = strAuthorFirstName And _
rs.Fields("LastName") = strAuthorLastName Then
' This is a banned author.
conn.Close
Set conn = Nothing
Set rs = Nothing
Exit Function
End If
rs.MoveNext
Wend
' None of the added authors found in the banned list.
ValidateAuthorName = True
conn.Close
Set conn = Nothing
Set rs = Nothing
End Function
Özet
- Bir bileşenin işlemde oy vermesini istemediğiniz zamanlar vardır.
- COM+, işlem dışı bileşenlerde JIT etkinleştirme veya eşzamanlılık koruması uygulamaz. Bu hizmetleri ayrı ayrı yapılandırabilirsiniz.
- Çağıran bileşenin yapılandırması, COM+ uygulamasının çağrılan bileşenin hizmet isteklerini yorumlama biçimini etkiler.
İlgili konular