Makale Özeti

Bu makale dizinsinde COM+'ın ne olduğu, ne işe yaradığını anlatan temel bir dökümanı 9 bölümde inceleyeceğiz. Makale serisinin sonunda COM+ ın temel özellikleri hakkında bilgiye sahip olacak ve kolaylıkla kullanabilir halde olacağız.

Makale

Stateler
 
State bir uygulamanın işlevini yerine getirebilmesi için ihtiyaç duyduğu verilerdir. Bu veriler program tarafından her istenildiğinde erişilebilir durumda olmalıdır. State’e örnek vermek veya tiplerini belirlemek istersek karşımıza birçok tip çıkacaktır. Ancak biz burada en genel tiplerinden bahsedeceğiz.
 
User State : Kişiye özel bilgilerin tutulduğu statedir. Örneğin bir alışveriş sitesindeki kullanıcının alışveriş sepeti içinde bulunan ürünler.
Application State : Uygulama bazında bazı bilgilerin tutulduğu state’dir. Örneğin bir alışveriş sitesindeki ürün bilgilerinin tutulduğu state.
System State : Uygulama bazındaki statelerin bir adım önünde olan bu state tipi server bazında olabilmektedir.
Object State : Metod parametreleri veya local değişkenler gibi bazı state’ler bu statü içinde yer almaktadırlar.
 
State tiplerini inceledikten sonra şimdi bir state’de ne gibi temel özellikler olması gerektiğini inceleyelim.
 
Durability (Uzun Ömürlülük) : Birçok durumda state system çökmelerinden etkilenmemli ve uzun ömürlü olmalıdır, bunun için tercih eilen yöntem ise genellikle verileri bir dosyada veya database’de tutmaktır.
 
Volatility (Değişkenlik) : State de saklanan veriler update edilebilir. Bundan dolayı statelier bu özelliği desteklemektedirler.
 
Speed (Hız) : Bazı statelier çok hızlı işlemelidir, bu tarz gereksinimler barındıran state’ler genellikle memoryde tutulurlar.
 
Lifetime (Yaşam Süresi) : Tüm state’lerin bir başlangıç ve bitiş süreleri vardır. Nesneler bu sure boyunca state2de tutulmalıdır. Buna örnek olarak ASP.Net te bulunan caching özelliğini verebiliriz.
 
Affinity (İlişki) : Bir uygulama içinde state’ler her zaman bir identity ile tanımlanırlar ve bu sayede tanımlandıkları kullanıcıya özel olurlar vede bu kullanıcı sistemden çıkıp tekrar girdiğinde state’leri aynen korunur.
 
Size (Boyut) : Network üzerinden transfer edilecek bir state senaryosunda çok büyük boyutlu state’ler tutmak mümkün olmayacaktır.
 
Statelerin taşıması gereken özellikleri inceledikten sonra şimdi ise state’lerin deplolanabilecekleri yapıları inceleyelim.
 
Memory : Hızlı olan bu yöntemin kalıcı olmama gibi bazı dezavantajlarıda mevcuttur.
 
File System : Sistem kapatıldığında sistemin state bilgilerini kaybetmemesi gerekliliği gerektiren durumlarda state XML gibi yapılarda saklanabilir.
 
Database : Sistem kapatıldığında satate bilgilerini kaybetmeyen bir başka yapı ise database’dir ve diğer artıları arasında transactionlarla veri bütünlüğünün sağlanması ve performans bulunur.
 
Tavsiye edilen yöntem ise state’lerin database üzerinde saklanması ve uygulama çalıştırıldığında memory’e yüklenerek kullanılmasıdır. Bunun yanı sıra server-client uygulamalarında state’ler kimi zaman client makinaların hafızasındada saklanabilir.
 
State Yönetimi Çözümleri
 
State’leri saklamak için birçok teknoloji vardır. Bunların herbirininin diğerlerine karşı bazı üstünlükleri mevcuttur. Şimdi bu çözümleri sunan teknolojileri inceleyelim.
 
Shared Property Manager : Hafızadaki state’lerin yönetimini sağlayan bu teknoloji COM+’ın bir parçasıdır ve .Net Enterprise Services tarafından erişilerek kullanılabilir. Bu teknoloji sayesinde property guruplarını key value bazında ilişki ile tanımlayabilirsiniz.
 
ASP.NET : Direkt bu işe spesifik bir teknoloji olmamasına karşın bazı uygulamalarda Asp.Net çok başarılı bir memory state manager olarak görev yapabilmektedir. ASP.NET ‘de application düzeyinde veya session düzeyinde vede en önemlisi cache’lenmiş bazda state saklayabilir ve bunların hafızada kalacakları süreleri belirleyebilirsiniz. Bu yintem genellikle ASP.NET sayfalarıyla veya Web Servisleri ile çalışan servis verilen bileşenler dahilinde kullanılır.
 
Database : State yönetiminde çok başarılı ve kullanılması tavsiye edilen Microsoft SQL Server’i kullanarak statelerinizi database üzerinde yönetebilirsiniz ve çok sorgulanan datalar içinse memoryde bir cacheleme çözümü üretebilirsiniz.
 
Shared Property Manager Yapısı
 
SPM (Shared Property Manager) ‘ın bir örneği her zaman Dllhost.exe içinde çalışır durumdadır. Aynı işlem içinde SPM’I kullabab tüm bileşenler bu kaynaktan faydalanırlar.
 
Ayrıca SPM Shared Property guruplarını yönetir ve bu sayede sizde kendi gurubunuzu yaratabilir veya mevcut bir guruba erişim sağlayabilirsiniz. Tüm gurupların benzersiz isimleri olması gerekliliği unutulmamalıdır. Her bir gurup sınırsız sayıda property taşıyabilir.
 
Guruplara aynı anda erişimi engellemek amacıyla SPM aynı zamanda bize bir lock mekanizması sunar. Bu lock mekanizması gurup veya property düzeyinde olabilir ve lock düzeyi belirlenebilir.
 
Biz uygulamamıza SPM’I implemente ederken kullanacağımız classlar elbetteki System.EnterpriseServices namespace’i altındadır. SPM ise SharedPropertyGroupmanager in bir örneğinin alınması ile aktif olacaktır. Şimdi ise nasıl bir Shared Property yaratabileceğimizi inceleyelim.
 
Shared Property Yaratılması
 
İlk once mutlaka SharedPropertyGroupManager nesnesinden yaratmalıyız ve bu nesnenin CreatePropertyGroup metodunu kullanarak istediğimiz shared property’i yaratabiliriz. Bu metodun parametrelerini inceleyelim ;name parametresi bu gurubu tanımlayan ismi alır, diğer parametreler ise metodun isolation düzeyini ve ne zaman yok edileceğine dair bilgileri alırken out parameter olan fExist ise gurubun zaten mevcut olup olmadığı bilgisini bize verir. SharedPropertyGroup nesnesinin CreateProperty nesnesini kullanarak yeni bir property tanımlayabilir ve buna değer atayabiliriz.
 
Bir property metod yaratırken isolation modunun nasıl ayarlanacağını inceleyelim. Bunun için CreatepropertyGroup metodunun dwIsoMode parametresini kullanarak bu ayarı yapabiliriz. Bu parametreye yollayacağımız PropertyLockMode enumaration’unda iki adet değer mevcuttur. Bu değerler;
 
PropertyLockMode.SetGet : Bu özellik property’i okunurken veya modifiye edilirken kilitler. Buda property okunurken modifiye edilemeyeceği vede modifiye edilirken okunamayacağı anlamına gelmektedir.
 
PropertyLockMode.Method : Mevcut metod çalıştırıldığı sürece property gurubunu kilitler, bu metod genellikle birlikte update edilmesi gereken property’ler için kullanılır.
 
Bunun dışında bir diğer önemli nokta ise Release modunun nasıl ayarlanacağıdır buda isolation mode gibi CreatePropertyGroup metoduna yollanacak dwRelMode parametresi ile ayarlanabilir. Bu parametreye yollanabilecek değerler ise PropertyReleaseMode enumeration’u içinde bulunur. Şimdi bu enumeration içindeki değerleri ve ne anlama geldiklerini inceleyelim.
 
PropertyReleaseMode.Standard : Bu ayar yapıldığı takdirde property gurubu kendisine referans eden bir interface bulunduğu sürece hafızada kalır. Ancak son referee den objede hafızadan silindikten sonra SheredPropertyGroup nesnesi yokedilir ve daha sonra garbage Collectorun devreye girmesiyle tamamen hafızadan kaldırılır.
 
PropertyReleaseMode.Process : Bu ayar yapılırsa process çalıştığı sürece property gurubu hafızada kalacaktır ve hiçbir koşulda yokedilmeyecektir. Ancak dikkat edilmesi gereken bu özelliği taşıyan property guruplarında çok büyük data bulunması durumunda hafıza kullanımının çok artacağıdır.
 
Şimdi ise yeni bir property’nin nasıl yaratılabileceğini inceleyelim, bu işlemi yapabilmek için SharedPropertyGroup nesnesinin CreateProperty metodunu veya CreatePropertyByPosition metodunu kullanabilirsiniz. Bu metodlardan CreateProperty property’i ismiyle birlikte tanımlayarak yaratmamızı sağlarken CreatePropertyByPosition ise propertyi numeric indexini tanımlayarak yaratmamızı sağlar. Ve bu metodların ikiside geriye SharedProperty nesnesini döndürürken aut parametrelerden fExists ise o property nin zaten mevcut olup olmadığı bilgisini bize geri döndürür.Bir property’I yaratırken o property’e aynı anda hem isim hemde index atamak mümkün değildir, yani property yaratılırken ya ismine yada index numarasına gore yaratılır. Fakat unutulmamalıdırki isme gore yapılan işlemler index’e gore yapılan işlemlere gore her zaman daha yavaştır.
 
Şimdi ise bu metodun nasıl kullanıldığını ve bir property’nin nasıl yaratıldığını örnek bir kod üzerinde inceleyelim;
 
 
 
Dim fExists As Boolean
    Dim spgm As New SharedPropertyGroupManager()
    Dim spgrp As SharedPropertyGroup = spgm.CreatePropertyGroup("GurupAdi", PropertyLockMode.SetGet, PropertyReleaseMode.Standard, fExists)
    Dim prp As SharedProperty = spgrp.CreateProperty("PropertyAdi", fExists)
 
Shared Propertydeki Degerlerin Geri Okunması
 
Öncelikle SharedProperty’ler SharedPropertyGroup’larının içinde yaratıldıkları için SharedPropertyGroupManager nesnesi yaratılmalı, daha sonrasında bu nesnenin group metodu kullanılarak property gurubuna erişilmeli ve dahasa sonrasında Property veya PropertyByPosition metodları sayesinde propertylere erişilir vedeğerleri okunabilir. Şimdi bu işlemin nasıl yapılacağını örnek bir kodla inceleyelim.
 
Dim fExists As Boolean
        Dim spgm As New SharedPropertyGroupManager()
        Dim spgrp As SharedPropertyGroup = spgm.CreatePropertyGroup("GurupAdi", PropertyLockMode.SetGet, PropertyReleaseMode.Standard, fExists)
        Dim prp As SharedProperty = spgrp.CreateProperty("PropertyAdi", fExists)
        'prp.Value ile propertylerin degerlerini okuyabiliyoruz.
        'Bir diger yontem ise spgm.Group("GurupAdi").Property("PropertyAdi").Value seklinde okumaktir.


oztamer@hotmail.com
tamer.oz@yazgelistir.com
oztamer@hotmail.com