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

COM+ Catalog (COM+ Kataloğu)

COM+ çalışma zamanı mimarisinin çok önemli bir elemanıda COM+ kataloğudur. COM+ kataloğu uygulamalarla ilgili tüm bilgileri tutar. Mesela ismi IlkUygulamam olan ve IlkBilesenim bileşenini içeren bir server uygulamasına ait tüm veriler burada saklanmaktadır. En basit anlamda COM+ kataloğu serverda bulunan uygulama adını,türünü ve uygulamada kullanılan bileşenlerin tutulduğu bir veritabanıdır. Aynı zamanda çalışma zamanı gereksinimleride bu katalogdan sağlanr, yani bir bileşen transaction içinde yer alacaksa bu bileşen yaratıldığı zaman transactiona girmesi gerektiğini COM+ kataloğu bilir. Component Services Yönetim Aracında yapılmış olan her tür değişiklik bu katalogda saklanır. Ayrıca bu ayarları uygun API’leri kullanarakta yönetmek mümkündür.

COM+’da Uygulama Yaratalım

Yeni bir uygulama yaratmak için öncelikle Component Services Yönetim Aracı açılıp Component Services ve My Computer klasörlerini genişletilmelidir. COM+ Applications klasörüne sağ tıklanır ve açılan menüden New ve Application seçilir. Karşımıza COM+ Uygulama Yükleme Sihirbazı gelir, ilk pencrede next’e basarak ilerlenir. Karşımıza çıkan pencereden eğer yeni bir uygulama yaratacaksak Create An Empty Application, daha önceden Application Export Wizard kullanılarak export edilmiş bir uygulamayı eklemek için Install Pre-Built Applications seçilir.

Yaratacağımız uygulama yeni bir uygulama olduğundan Create An Empty Application ı seçtikten sonra uygulamamızın ismini ve tipini belirleyeyip next’e basarız.

Bir sonraki adımda ise  uygulamamızın sistemde hangi kullanıcı ile çalışacağını seçilir ve next’e basılır.

Kitabın son kısımlarında inceleyeceğimiz roller yaratılır ve daha sonra.Son ekranda Finish’e basarak uygulamamızın kurma işlemini biter.

Mevcut uygulamamıza bir bileşen eklemek için Component Services Yönetim ekranında bileşen eklemek istediğimiz uygulamanın altındaki Components klasörüne sağ tıklanır ve New ve Component seçilir. Shirbazın ilk sayfası next e basılarak geçildikten sonra açılan pencerede bileşen eklemek için üç seçenek vardır bunlar; Install New Component, Import Components That Are Already Registered, Install New Event Class dır.Anlamlarını inceleyecek olursak Install New Component yeni bir bileşen yüklemek için kullanılır, Import Components That Are Already Registered ise daha önceden Regsvr32.exe ile sistemin registy kayıtlarına kaydedilmiş bileşenleri uygulamaya katmak içindir, Install New Event Class ise COM+ Event Service içinde kullanılmış COM+ olaylarını eklemek içindir.

Bu adımdan sonra çıkan pencereden bileşenimizi seçerek Add’e basarız ve next, finish ile sihirbazdan çıkarız.

Yarattığımız uygulamalardaki bileşenlerin aktivitelerini görmek için Component Services Yönetim Aracında Distributed Transaction Cordinator seçilir ve daha sonra Transaction Statistics seçilir. Bu pencereden Transaction istatistikleri izlenebilir.

Context ve Interception

Contextler aynı çalışma zamanı gereksinimlerini barındıran nesneleri guruplamak için kullanılırlar. Bir COM+ uygulamasında çalışması için yaratılmış bileşenler  configured bileşenlerdir ve bu bileşenlerin çalışma zamanı gereksinimleri COM+ kataloğunda belirli özelliklerin bir bileşimidir. Çalışma zamanı gereksinimlerinin özellikleri o nesnelerin hangi COM+ servislerini kullanacaklarını ve bu servisleri nasıl çalıştıracaklarını belirler. Bir class’ın örneği yaratıldığı zaman COM+ bu örneği çalışabileceği bir ortam olan ve classın istediği özellikleri taşıyan Context’e koyar. Contextlerin özellikleri tanımlarını daha önce yaptığımız Senkronizasyon, Transaction, Threading, JIT, Object pooling, Securit olabilmektedir.  Her COM+ nesnesi bir Context gurubu içinde bulunmalıdır. Context’ler ise en az bir COM+ nesnesi içermelidirler. Her class’ın çalışma zamanı gereksinimleri farklı olabileceğinden class’lar farklı contextlerde yer alabilirler. Dolayısıyla çoğunlukla olduğu gibi bir işlem birden fazla context kaplıyor olabilir.

İki çeşit context vardır. Bunlar object context ve call context tir. Object context yaşam süreci boyunca hafızada ve uygulamada kalırken call context sadece çağrıldığı metodun işi bitinceye kadar aktif kalacaktır. Bu sebepten dolayı call context genelde güvenlik için kullanılır.

Bir istemci serviced bileşen yaratmaya çalıştığı zaman COM+ servisleri yeni bileşenin özelliklerini COM+ kataloğundan okuyarak belirler ve eğer çalışma zamanı gereksinimleri aynı ise aynı context içinde, farklı ise farklı bir context içine nesne yaratılır. Aynı context içindeki nesnelerin  iletişiminde bir problem yoktur ancak farklı context’lerde bulunan nesneler için .NER Enterprise Services bize yönetilebilir bir proxy sunar. Bu proxy bize sadece gerekli gerekli güvenlik koşullarının sağlandığı zaman diğer context gurubundaki metodları çağırabilem avantajını getirir.

Ancak Contextlerin bazı özellikleri her context için tekrar yaratılırlar. Bunlar;

Transaction Id : Nesnenin içinde bulunduğu Distributed (dağıtılmış) Tansaction’a ait Id numarasıdır. Bu numara bir transactionda hangi nesnelerin bulunduğunun anlaşılmasını sağlar ve  transaction ayarlarına göre üretilebilir.

Activity Id : Çalışmakta olan aktivitiye ait Id numarasıdır. Bu numara senkronizasyon için kullanılmaktadır ve senkronizasyon ayarlarına göre üretilebilir.

Consistent Flag : İşin nesne tarafından tutarlı bir şekilde yapıldığını ve transaction’ın commit edilebileceğini bildirir. True veya False değerlerini alabilir.

Done Flag : Nesnenin işini yapıp bitirdiğini ve metod içinde deaktive edilebileceğini belirtir. True veya False Değerlerini alabilir.

COM+ contexti aktivasyonu ve çalışma zamanı özelliklerini belirleyip servislerin bileşenlerde nasıl etkili olacağına karar verir. Ancak COM+ context ile tamamen farklı bir yapı olan ve hiçbirzaman iletişim içinde olmayan .NET context sadece çoklu threadler için senkronizasyonu belirler.

Yukarıda incelediğimiz gibi farklı context’ler arasında metod çağırımları söz konusu olduğu zaman bir proxy yaratılıyordu. Bu işleme Interception adı verilmektedir. İki çeşit Interception vardır bunlardan ilki Activation Interception diğeri ise Method-Call Interception’dur.

Activation Interception bir nesnenin aktive edilmesi veya client trarafından gelen yaratılma isteğinin COM+ tarafından alınmasından sonra method düzeyinde interception oluşturması için gereklidir. Bunun yanısıra Object Pooling ve Object Constructor Stringlerinin Servislerinin COM+ tarafından sunulmasını sağlar. Farklı context’lerde bulunan objeler arasındaki iletişim sağlanırken bir context ten diğer context e giderken çağrı arada Interception katmanından geçer ve asıl nesneye erişir, geri dönüştede izlenen yol aynıdır.

Method düzeyinde inteception bileşenin çalışabilmesi için gerekli tüm koşulların sağlanmış olduğu bitr ortamda çalışmasını sağlar vede JIT Activation ve transaction gibi bazı hizmetlerin nesneye erişimlmesinden önce devreye girmesinde rol oynar.

Interceptionun gerekli olduğu zamanları inceleyecek olursak,

Objeden objeye olan isteklerde : bir objeden bir objeye olan istek hiçbir sınır geçmez. Her iki nesneninde aynı bilgisayarda ve aynı çalışma zamanı gereksinimlerinde oldukları zaman gerçekleşir ve çok hızlıdır.

Cross context istekler : farklı contextlerde bulunan yani aynı çalışma zamanı gereksinimleri bulunmayan bileşenler arasında olan istektir ve nispeten hızlı bir yöntemdir. Bu yönteme örnek olarak iki bileşen ele alacak olursak ve bu bileşenlerden birinde transaction servisi gerekli ise ve diğerinde desteklenmiyorsa farklı çalışma zamanı gereksinimlerinden dolayı farklı contextlerde bulunacaklardır ve metod çağırımları interception üzerinden yapılacaktır.

Cross application calls : iki nesnenin farklı COM+ uygulamalarında bulundukları zaman gerçekleşir ve her metod çağrılışında bileşenler farklı uygulamalarda olduklarından farklı güvenlik sınırlandırmalarına tabi olduklarından interception gereklidir.

Cross appdomain calls : bu call eğer iki nesneninde farklı .Net frameworkleri uygulama domaini üzerinde yeralması durumunda gerçekleşir. Uygulamalar birbirinden tamamen bağımsızdır. Böyle bir uygulamada remoting ve interception kullanılması şarttır.

 



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