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

Merhabalar,

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. Bu makale COM+'ı temel anlamda öğretmeyi amaçlamaktadır ve yazılırken Microsoft MOC 2557 - Building COM+ Applications Using Microsoft .NET Enterprise Services' den faydalanılmıştır.

 

Nedir Bu COM

Geçtiğimiz uzun yıllar boyunca programcılık tek parça uygulama geliştirmekten ibaretti. Monolithic (tek parça) uygulamalarda bir veya birden fazla fonksiyonalite bir arada bulunuyordu. Böyle bir ortamda ise uygulamaların çalışabilmesi için IBM tarafından geliştirilmiş server teknolojisi olan mainframe sunucular kullanılmaktaydı. Ancak geniş monolithic uygulamalarda tek sorun sunuculara yapılan yatırımlar değildi. Yazılım geliştirici tarafındada bir çok problemle karşılaşılıyordu. Bu problemlerin belli başlılarını arasında monolithic uygulamaların geliştirilmesinin uzun bir süre alması, bakım ve uygulamada yapılacak düzeltme, yeni özellik ekleme gibi işlemlerinin zor olması ve çok efor gerektirmesi ve günümüzde hakim olan yazılım geliştirme mimarisi ve mantığına aykırı olarak monolithic uygulamalarda yazılmış olan bir işlevsellik veya bir özellik taşıyan bileşen aynı programlama dilinde yazılmış olsa bile başka bir uygulamada kullanılamaması ve yazılım geliştiricilerin yeni uygulama için aynı kodu tekrar yazmak zorunda kalması veya uygulamanın bir kısmını değiştirilmesinin,kaldırılmasının istenmesi durumunda bile tüm uygulamanın kodu üzerinde değişiklik yapılması gerekmesi bulunmaktadır.

Zamanla yazılım dünyasındaki bu probleme karşı çözümler geliştirilmiştir. Bu çözümlerden ilki uygulamaları server (sunucu) ve client (istemci) tarafına bölmektir. Client/Server Model adı verilen bu çözümde arayüzün ve bazı işlemlerin clientta, data erişimi ve diğer işlemlerin serverda bulunacak şekilde paylaştırılması sonucu monolithic uygulamaların kompleksliğine kısmen çözüm bulunabilmesine karşın bileşenlerin tekrar kullanılamaması sorununa çözüm geliştirememiştir. Yani Visual Basic’te yazılmış bir bileşeni C temelli diller desteklemiyor, kullanamıyordu yada C temelli bir dille yazılmış bir bileşen Visual Basic de kullanılamıyordu.

Diğer bir çözüm yöntemi olarak geliştirilen Component Model (Bileşen Modeli) hem monolithic hemde Client/Server uygulamaların problemlerine çözüm bulmuştur. Artık yazılım geliştiriciler geliştirdikleri uygulamaları bileşenler ile yazarak bu bileşenleri ileride başka projelerde tekrar kullanabiliyorlardı.

COM (Component Object Model) uzun zamandır yazılım dünyasının karşılaştığı birçok probleme çözüm olan ve sürekli yenilenerek zamana ayak uyduran bir teknolojidir. Bu teknolojinin yaratılmasının arkasında bulunan temel düşünce yazılım bileşenlerinin en az işgücü ile en verimli biçimde yeniden kullanılabilmesidir. Bu tanım bir yazılım geliştirici için daha önceden yazılmış olan bir kodun tekrar yazılmaması, bir IT yöneticisi için ise bu kodun tekrar yazılmasından kaynaklanan maliyet ve zamandan tasarruf demektir.

Nesne tabanlı bir programlama modeli olan COM uygulamaların birlikte kullanılabilirliğini sağlamıştır. Yani iki veya daha fazla uygulama veya bu uygulamalara ait bileşenler birbirleriyle iletişim sağlayabilmektedirler. Burada esas can alıcı nokta bu uygulamaların farklı dillerde yazılmış olduklarında ve hatta farklı bilgisayarlar üzerinde bulunan farklı işletim sistemleri üzerinde çalışıyor olmaları durumunda bile bu iletişimin başarıyla sağlanmasıdır.

COM ve .NET

COM ile server tabanlı uygulama geliştirmenin faydaları arasında yazılım geliştiricilerin COM uygulamalarını farklı diller ile farklı platformlar (Unix vs.) için geliştirilmiş olsalar bile uygulamaların birbirleri ile çalışabilir bir yapıda olmaları, COM nesneleri başka makinelerde olsalar bile client programın bir parçasıymış gibi çalışabilmeleri,COM bileşeni geliştirmek için gerekli olan standartlar Interface ler ile sağlandı, böylece bir programın COM nesnesini kullanırken Interface leri kullanarak COM nesnesine erişebilmesi, Versiyon özelliği yani her bir class a yeni interfaceler ekleyerek ek işlevselliklerin katılması ve bu işlevsellik katılırken uygulamayı halihazırda kullanan kullanıcıların herhangi bir kesinti yaşamaması,bir COM nesnesinin, COM arayüzlerini oluşturmayı destekleyen bir programlama dili ile çok hızlı bir şekilde gerliştirilebilmesi, örneğin VB 6.0, C++ gibi diller varsayılan olarak COM standartlarına uyum sağlaması bulunur.

COM Server tabanlı program geliştirmede birçok soruna çözüm olmasına rağmen zamanla ortaya bazı diğer sorunlar çıkmıştır. Ortaya çıkan bu sorunlara COM’un çözüm sağlayamamasına karşın .NET Framework bu sorunla çözüm olmuştur.

.NET Framework’un çözüm getirdiği konular;Bir COM uygulamasının belirli bir platform için geliştirilmesi sonucu sadece o platformda çalışabilir olmasıdır. Ancak .NET teknolojisinde geliştirilen çözüm .Net dillerinden herhangi biri kullanılarak yazılmış bileşenlerin MSIL (Microsot Intermediate Language) ‘e derlenmesi ve kullanılacak platformda CLR(Common Language Runtime) yüklü olması sonucu her platformda çalışabilir olmasısır. Bunun yanı sıra COM’un cevap veremediği diğer bir sorun ise .NET’te geliştirilmiş uygulamaların sadece kendi yetkileri olan memory alanlarına erişebilmesidir. Yani çalışan bir uygulama diğer bir uygulamaya özel değişkenlere erişemez ve diğer uygulamanın kilitlenmesine sebep olamaz. .NET’i ön plana çıkaran bir diğer özellik ise daha gelişmiş bir versiyon kontrol mekanizmasını barındırmasıdır. COM’da bulunan ve biraz önce incelediğimiz versiyonlama özelliğine ek olarak .NET’te uygulamanın eski sürümünün eski istemcilere hizmet vermeye devam etmesinin garanti altına alınması vede yeni halinin ise yeni istemcilerde kullanılabiliyor olması sağlanmıştır.

Birçok kişi tarafından COM+ programcılığının eskidiği düşünülse bile COM+ sundugu enterprise-level (genis çaplı) uygulamalar halen gelistiriciler tarafından .NET e uygulanmaktadır ve .NET su an COM+ servislerine tam erişim hakkı vermektedir. Bunun yanı sıra bunu bildiğiniz veya sevdiğiniz programlama dilini kullanarak geliştirme şansı sunmaktadır. Eğer enterprise-level uygulamalar yazacaksanız COM+ servislerinin avantajlarından yararlanmak bazı noktalarda kaçınılmaz olacaktır.

COM+ Servisleri

Geliştirilmiş başarılı bir uygulamanın altyapısının aynı anda birden çok kullanıcı tarafından kullanılabileceğinin düşünülmesi, bu kullanıcıların herbirinin aynı yetkilere sahip olmayacağından dolayı yetkilendirme ve güvenlik, aynı anda bazı datalarda işlem yapılmasından dolayı kaynaklanacak problemler, veri tutarlılığı problemlerine ait çözüm geliştirilmesi çok uzun zamanlar alabilecek bir geliştirme süreci içermektedir. Ancak COM+’da bu problemlere ait çözümler geliştirilmiş olarak hazırda bulunmaktadır. COM+ servislerinin bu avantajı sayesinde uygulama geliştirme süreleri kısalmakta ve yazılım geliştiriciler daha verimli çalışabilmektedir. Bu servisler transaction, kaynak yönetimi, senkronizasyon ve güvenlik gereksinimlerini karşılayabilmektedir. Şimdi bu temel servislerin neler olduğunu basitçe inceleyelim.

Transactionlar

Transactionların veri tutarlılığı ve uygulama stabilitesi bakımından kullanılması kaçınılmazdır. Çok kullanıcılı bir Distributed Application (Dağıtık Uygulama) da değişikliklerin veritabanında bulunan tablolara ve hatta bazen diğer nesnelere(örn message queue) yansıması gerekebilir. Böyle bir durumda uygulamada birbirine bağlı birden fazla iş yapılmaktadır ve bu işlerden sadece birinin bile başarısız olma durumunda uygulamanın bunu yakalayıp aksiyonda bulunması gerekmektedir. Yapılan iş tutarsız(kararsız) bir şekilde yani bir kısmı yapılmış bir kısmı yapılmamış bir şekilde bırakılamaz. Burada transaction devreye girer. Transaction yapılan işlerin toplu olarak başka bir iş gurubunda bulunması gibi düşünülürse alt iş guruplarından herhangi birinde bir hata oluştuğunda kapsayan gurubun işleminin yapılamayacağı anlamına gelir. Transactionlar ya hep ya hiç prensibine göre çalışır. İşlemlerin ya tamamı gerçekleştirileceğinden yada hiçbiri gerçekleştirilmeyeceğinden veri tutarsız bir şekilde kalmayacaktır.

Database işlemlerinde ve diğer işlemlerde transactionların birlikte kullanılmasının bir uygulamaya adapte edilmesi çok zordur. Ancak COM+ bu transaction yönetim sistemini altyapısının bir parçası olarak sunar. COM+ bileşenler aktive olduğu anda otomatik olarak transactionlarınıda yaratır. Bu sayede bileşenlere transactional herhangi bir kod yazmak zorunda kalmayız.

Compensating Resource Managers(Telafi Edici Kaynak Yöneticileri)

COM+ transaction yapısı içermeyen bileşenlerin transaction içinde yeralabilmeleri için Compensating Resource Managers (CRM) denilen bir yapı sunar. Bu yapı sayesinde bu bileşenleri bir transaction içinde kullanarak gerekli durumlarda yapılmış değişiklikleri geri alabiliriz.

Resource Management (Kaynak Yönetimi)

Bir uygulama çok client tarafından kullaılıyorsa uygulamadaki nesneler kaynak paylaşımında bulunmalıdır. Bu paylaşım çoğu zaman veri tabanı, diski hafıza, bant genişliği şeklinde olabilir. Bu kaynaklar sadece gerektiği zamanlarda ve en verimli şekilde kullanmalıdır. COM+ faydası tartışılmayan bu hizmetleri Just In Time (JIT) Activation ve Object Pooling adı verilen iki servis ile sunmaktadır.

Just In Time (JIT) Activation (Tam Zamanında Aktivasyon)

COM+ de yer alan kaynak yönetimi ile ilgili bu servis bir nesnenin sadece çağrıldığı zaman aktive olması ve işi bittiği zaman hafızadan silinmesi temeline dayalıdır. Bu şekilde hafızadan kazanç sağlanmış olur. Server bu sayede daha fazla client yükünü kaldırabilecekdir. Bu servisin adı yaptığı işle benzer olarak tam zamanında aktivasyon olarak belirlenmiştir. Bir nesnenin bir metoduna client tarafından istekte bulunulduğunda COM+ nesneyi yaratır ve aktive eder. Nesneye yapılan istek bittiğinde yani metod cevabı döndürdüğünde COM+ nesneyi hafızadan kaldırmak suretiyle deaktive eder. Daha sonraki işlemlerde bu nesne her çağrıldığında aktive edilip tekrar deaktive edilecektir.

Object Pooling (Nesne Havuzları)

COM+ tarafından sağlanan bu otomatik servis sayesinde uygulamada bulunan bileşenlerin belirtilen sayıda birer instanceleri (örnek) hafızada bulunan havuzda kullanıma hazır olarak saklanır. Bu sayede Object Creation Time dan (Nesne Yaratım Zamanı)kazanç elde edilmiş olur. Pool Size (hafızada hazır bulunacak nesne sayısı) ve time out (zaman aşımı) süresi bileşen özelliklerinden ayarlanabilir. Örneğin bir bileşen hafızada 10 örnek yaratılmışsa yani pool size’ı 10 olarak belirlenmişse 11. istek geldiği zaman timeout süresi kadar hafızadaki bir nesnenin işinin bitmesi beklenir, biterse o nesnenin yerini 11. istek alır bitmezse geriye hata döner. Bir uygulama tarafından çok sık kullanılan bileşenlerde yaratma zamanının sebep olduğu gecikmeler ve yavaşlamaların önüne geçilebilmesi için gerekli ve çok kullanılan bir servistir.

Synchronization (Senkronizasyon)

Distributed Applicationlar (dağıtık uygulamalar) aynı anda birden fazla client tarafından kullanılabilmeli ve client lardan gelen bu istekleri eşzamanlı olarak karşılayabilmektedirler. Aynı zamanda bu uygulamalardaki iş kuralları birçok farklı bilgisayarda aynı anda thread ler kullanarak işlem yapabilmelidir. Çoklu bilgisayarlarda çoklu thread yönetimi yazılım geliştirici bakımından geliştirilmesi oldukça zordur. COM+ basit bir eş zamanlı çalışma modeli sunarak bu ağır kodlama gerektiren senkronizasyon işlemi ile vakit kaybedilmemesi için büyük bir avantaj sunmaktadır 

COM+’ın sunduğu bu servis aktiviteler sayesinde sağlanır. Aktivite bir nesnenin client tarafından istenip yaratılmasından sonra çalışma süreci boyunca ilerleyip serbest bırakılması sürecine kadar geçen ve client’ın nesneye eriştiği zaman aralığını kapsar. Nesnein bu isteklere cevap verebilmesi için aynı aktiviteye ait ek COM+ nesneleri yaratması gerekmektedir. Aktivite sayesinde yazılım geliştiriciler tek kullanıcı gibi düşünerek çoklu kullanıcıya hizmet edebilen programları gayet kolaylıkla yazabilmektedir.

Security (Güvenlik)

Uygulamanın birden fazla client tarafından kullanılabilirliğinden dolayı kuşkusuz olarak authentication (doğrulama) ve authorization (izin verme) mekanizmalarının COM+ tarafından içerilmesi kaçılnılmazdır. Bu sayede sadece uygulamada işlem yapabilecek kullanıcıların uygulamaya erişebilmesi dolayısıyla uygulamanın güvenliği sağlanmış olmaktadır/ 

COM+’ın güvenlik mekanizmasının temelinde roller tanımlanması ve bu rollerin yetkilendirilmesi yatmaktadır. Roller Windows NT tabanlı kullanıcılar ve guruplardan yaratılır ve rollere belirli classlardaki (sınıf) belirli interfaceler atanır. Daha sonra bu rollere Sistemde bulunan (Windows NT tabanlı kullanıcılar ve guruplar)  kullanıcılar atanarak sadece izin verilen nesnelere erişmeleri COM+ tarafından yazılım geliştircinin ekstra hiçbir kod yazmasına gerek duyulmaksızın denetlenir.

Loosely Coupled Events (İnce Bağlı Olaylar)

Birçok event handling (olay tutucu) sistemde olay kaynağı ve olay yatırıcısı çalışma zamanında birbirilerini refere etmelidir. Bu tür bir ilişki sıkı bir çift oluşturmaktadır. Birçok senaryoda sıkı ilişkili olay çiftlerini yönetmek kolay olmayacaktır. COM+ bu sorunların aşılması için ince bağlı olaylar adı verilen bir servis sunmaktadır.

Queued Components (Sıralanmış Bileşenler)

Dağıtık uygulamalar her zaman senkron çalışma prensibine dayalı olarak çalışmamakta bazen asenkron çalışmaları gerekmektedir. Windows XP bize Message Queuing adı verilen bir asenkron servis sunmaktadır. Bu servis sayesinde kaynak makina işlemleri mesajlar olarak sıralı durabilecekleri bir şekilde oluşturur ve istemciler bu mesajları sıra ile alarak işlerler. Bu servisin asenkron çalışması sayesinde veri iletişiminin kolaylıkla sağlanabilmesine karşın uygulamaların bir bileşen üzerindeki metoda asenkron isteklerde bulunmasını desteklememektedir. COM+ servislerinden Queued Components Message Queuing i kullanarak bu desteği sunmaktadır.



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