Makale Özeti

Shared Property Manager uzerine ornek

Makale

Com+

Com+’da Hatırlama Sorunu mu Var ?

 

Com+ dan yararlanıyorsanız bir sorun yakanızı bırakmıyordur. O da komponentizin bir önceki değeri unutmasıdır. Öncelikle bu sorunun nerden kaynaklandığına bakalım daha sonra da çözüm önerisinde bulunalım.

 

Sorunun çıkış noktası com objelerinin stateful olmamasıdır. Bunun anlamı şu ; istemci com objesinden istekte bulunduğunda bağlantı sağlanır, iş bittikten sonra ise bağlantı kesilir ve her şey unutulur. Peki bir değişkeniniz varsa ve bu değişkeni unutmak istemiyorsanız ne olacak ?

 

Bunun için değişik yöntemler sözkonusu , eğer asp.net uygulaması yapıyorsanız application değişkeni kullanabilirsiniz veya dosya ya yada veritabanına yazdırabilirsiniz.

(Static i As Integer

i += 1 gibi bir ifade com uygulamanızda çalışmayacaktır)

 Biz ise bu durum için oluşturulmuş bir değişkenden yararlanacağız. Öncelikle kısıtlarımızı bildirmekte fayda var. Bunu bir şekil üzerinde anlatalım;

 

 

(resim kaynak: http://www.devx.com/vb2themax/Article/19897)

 

COM+ uygulamalarını server ve library olarak iki başlıkta inceleyebiliriz. Eğer com uygulamanızı library olarak ayarladıysanız o zaman istemci kaynaklarından yararlanacaksınız demektir. Bu durumda anlatacaklarımızı kullanamazsınız. Server uygulamalarında bahsedeceğimiz değişkenleri kullanabilirsiniz. Ama ilk başta server dendiğinde com uygulamarının nasıl çalıştığını yukarıdaki şekilde inceleyelim. İstemcinin her com isteğine karşın DLLHOST.EXE dosyası server tarafında çalıştırılır. Ve bu dllhost.exe dosyasının içinde bizim değişkenimiz saklanır. Ikinci olarak bir kısıtımızı da bu noktada belirtebiliriz. O da sakladığınız değşkeni tek bir com uygulamasında kullanabiliyor olmanızdır. Bu da aslında SingleTone anlamına gelmektedir.

 

Şimdi ise veri saklayacağımız değişkenin yapısını inceleyelim. Bu yapıyı kodlara baktığınızda daha iyi anlayacaksınız.  Verileri saklamak için value kısmını kullanıyoruz.

 

 

 

(kaynak: 2557A, Building COM+ Applications Using Microsoft® .NET Enterprise Services.)

 

PropertyGroup için bilinmesi gereken parametreleri aşağıdaki başlıklarda toplayabiliriz.

 

dwIsoMode  için PropertyLockMode enumerator’ları ve özellikleri aşğıdaki gibidir.

 

PropertyLockMode.SetGet  property’i  okunurken ve değiştirilirken kilitlenmesini sağlar.  

PropertyLockMode.Method  o anki metot çalıştığında property grubunun kilitlenmesini sağlar

.

dwRelMode için PropertyReleaseMode enumerator’ları için’se  aşağıdaki tanımlamaları yapabiliriz.

 

PropertyReleaseMode.Standard  Tüm referanslar bittiğinde property grubunun yokedilmesi için kullanılır.

 

PropertyReleaseMode.Process  Shared propertty group process kapatılana kadar mevcuttur. Bu ayarla shared property’nin yok edilmesi imkansızdır.

 

Şimdi bu anlatılanları bir uygulama üzerinde görelim. Bunun için bir class içinde aşağıda metodumuz var ve bir düğme ile çalıştırdığımız düşünelim.

 

 

_

    Function paylas() As Integer Implements kurallar.paylas

        Dim mevcut, fExists As Boolean

        Dim ctr As Integer

        Dim plockmode As PropertyLockMode = PropertyLockMode.SetGet

        Dim prelmode As PropertyReleaseMode = PropertyReleaseMode.Standard

        Dim gm As New SharedPropertyGroupManager

        Dim grp As SharedPropertyGroup = gm.CreatePropertyGroup("Counters", plockmode, prelmode, mevcut)

        Dim prop As SharedProperty

        prop = grp.CreateProperty("Count", fExists)

        ctr = prop.Value

        prop.Value = ctr + 1

       

        Return ctr

 

    End Function

 

Düğmeye her basışımızda ileti kutusunda gelen değerin 1 arttığını göreceğiz. Değişkeniniz aynı DLLHOST.exe dosyası içine yer aldığından değeri unutmadığını görebilirsiniz.

 

Atakan Kesler

atakan.kesler@bilgeadam.com