COM + Nesneleri

Merhaba,
COM+ nesneleri ile ilgili yazılmış güzel bir makalenin bir kısmını sizinle paylaşmak istedim.
Makaleyi yazan Tamer Öz makalenin tamamına http://www.tameroz.com adresinden ulaşabilirsiniz.

"Nedir bu COM+

Geçtigimiz uzun yıllar boyunca programcılık tek parça uygulama gelistirmekten ibaretti.
Monolithic (tek parça) uygulamalarda bir veya birden fazla fonksiyonalite bir arada
bulunuyordu. Böyle bir ortamda ise uygulamaların çalısabilmesi için IBM tarafından
gelistirilmis server teknolojisi olan mainframe sunucular kullanılmaktaydı. Ancak genis
monolithic uygulamalarda tek sorun sunuculara yapılan yatırımlar degildi. Yazılım gelistirici
tarafındada bir çok problemle karsılasılıyordu. Bu problemlerin belli baslılarını arasında
monolithic uygulamaların gelistirilmesinin uzun bir süre alması, bakım ve uygulamada
yapılacak düzeltme, yeni özellik ekleme gibi islemlerinin zor olması ve çok efor gerektirmesi
ve günümüzde hakim olan yazılım gelistirme mimarisi ve mantıgına aykırı olarak monolithic
uygulamalarda yazılmıs olan bir islevsellik veya bir özellik tasıyan bilesen aynı programlama
dilinde yazılmıs olsa bile baska bir uygulamada kullanılamaması ve yazılım gelistiricilerin
yeni uygulama için aynı kodu tekrar yazmak zorunda kalması veya uygulamanın bir kısmını
degistirilmesinin,kaldırılmasının istenmesi durumunda bile tüm uygulamanın kodu üzerinde
degisiklik yapılması gerekmesi bulunmaktadır.
Zamanla yazılım dünyasındaki bu probleme karsı çözümler gelistirilmistir. 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ı islemlerin clientta, data erisimi ve diger islemlerin
serverda bulunacak sekilde paylastırılması sonucu monolithic uygulamaların kompleksligine
kısmen çözüm bulunabilmesine karsın bilesenlerin tekrar kullanılamaması sorununa çözüm
gelistirememistir. Yani Visual Basic’te yazılmıs bir bileseni C temelli diller desteklemiyor,
kullanamıyordu yada C temelli bir dille yazılmıs bir bilesen Visual Basic de kullanılamıyordu.
Diger bir çözüm yöntemi olarak gelistirilen Component Model (Bilesen Modeli) hem
monolithic hemde Client/Server uygulamaların problemlerine çözüm bulmustur. Artık yazılım
gelistiriciler gelistirdikleri uygulamaları bilesenler ile yazarak bu bilesenleri ileride baska
projelerde tekrar kullanabiliyorlardı.
COM (Component Object Model) uzun zamandır yazılım dünyasının karsılastıgı 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üsünce yazılım bilesenlerinin en az
isgücü ile en verimli biçimde yeniden kullanılabilmesidir. Bu tanım bir yazılım gelistirici için
daha önceden yazılmıs 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ılabilirligini
saglamıstır. Yani iki veya daha fazla uygulama veya bu uygulamalara ait bilesenler
birbirleriyle iletisim saglayabilmektedirler. Burada esas can alıcı nokta bu uygulamaların
farklı dillerde yazılmıs olduklarında ve hatta farklı bilgisayarlar üzerinde bulunan farklı
isletim sistemleri üzerinde çalısıyor olmaları durumunda bile bu iletisimin basarıyla
saglanmasıdır.

COM ve .NET

COM ile server tabanlı uygulama gelistirmenin faydaları arasında yazılım gelistiricilerin
COM uygulamalarını farklı diller ile farklı platformlar (Unix vs.) için gelistirilmis olsalar bile
uygulamaların birbirleri ile çalısabilir bir yapıda olmaları, COM nesneleri baska makinelerde
olsalar bile client programın bir parçasıymıs gibi çalısabilmeleri,COM bileseni gelistirmek
için gerekli olan standartlar Interface ler ile saglandı, böylece bir programın COM nesnesini
kullanırken Interface leri kullanarak COM nesnesine erisebilmesi, Versiyon özelligi yani her
bir class a yeni interfaceler ekleyerek ek islevselliklerin katılması ve bu islevsellik katılırken
uygulamayı halihazırda kullanan kullanıcıların herhangi bir kesinti yasamaması,bir COM
nesnesinin, COM arayüzlerini olusturmayı destekleyen bir programlama dili ile çok hızlı bir
sekilde gerlistirilebilmesi, örnegin VB 6.0, C++ gibi diller varsayılan olarak COM
standartlarına uyum saglaması bulunur.
COM Server tabanlı program gelistirmede birçok soruna çözüm olmasına ragmen zamanla
ortaya bazı diger sorunlar çıkmıstır. Ortaya çıkan bu sorunlara COM’un çözüm
saglayamamasına karsın .NET Framework bu sorunla çözüm olmustur.
.NET Framework’un çözüm getirdigi konular;Bir COM uygulamasının belirli bir platform
için gelistirilmesi sonucu sadece o platformda çalısabilir olmasıdır. Ancak .NET
teknolojisinde gelistirilen çözüm .Net dillerinden herhangi biri kullanılarak yazılmıs
bilesenlerin MSIL (Microsot Intermediate Language) ‘e derlenmesi ve kullanılacak
platformda CLR(Common Language Runtime) yüklü olması sonucu her platformda çalısabilir
olmasısır. Bunun yanı sıra COM’un cevap veremedigi diger bir sorun ise .NET’te gelistirilmis
uygulamaların sadece kendi yetkileri olan memory alanlarına erisebilmesidir. Yani çalısan bir
uygulama diger bir uygulamaya özel degiskenlere erisemez ve diger uygulamanın
kilitlenmesine sebep olamaz. .NET’i ön plana çıkaran bir diger özellik ise daha gelismis bir
versiyon kontrol mekanizmasını barındırmasıdır. COM’da bulunan ve biraz önce
inceledigimiz versiyonlama özelligine 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ı saglanmıstır.
Birçok kisi tarafından COM+ programcılıgının eskidigi düsü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 erisim hakkı vermektedir. Bunun
yanı sıra bunu bildiginiz veya sevdiginiz programlama dilini kullanarak gelistirme sansı
sunmaktadır. Eger enterprise-level uygulamalar yazacaksanız COM+ servislerinin
avantajlarından yararlanmak bazı noktalarda kaçınılmaz olacaktır.

COM+ Uygulamaları

COM+ uygulamaları configured bilesenlerin bir araya gelmesinden olusmaktadır. COM+
uygulamaları aynı zamanda bir güvenlik sınırını yapısı olarak koyar. COM+ uygulamaları
Server Uygulaması ve Library uygulaması olmak üzere iki çesitte olabilir.
Surrogate çalıstırılabilir bir görevdir ve DLL olarak olusturulmus bir COM bilesenini
barındırabilir. Surrogate Exe uygulamasını çalıstırmak suretiyle uzaktaki bir bilgisayardaki
DLL sunucusunu çalıstırılabilir.
Bir server uygulaması kendisine özel tahsis edilmis islemde çalısır. COM+ server
uygulamalarını barındırmak için Dllhost.exe’yi kullanır. Her bir server uygulaması kendi
Dllhost.exe örneginde çalısmaktadır.
Dllhost.exe surrogate’i COM+ çalısma zamanının çekirdegini olusturur. Bilesenlere servisleri
kullanabilmek için gerekli olan thread yönetimi, es zamanlı baglantı yönetimi gibi hizmetlerin
altyapısını sunar. Server uygulaması COM+ servislerinin tamamını desteklemektedir.
Library uygulamaları client in isleminde aktive olurlar.Client islemi unmanaged bir islem
olabilir. Örnegin IIS üzerinde çalısan bir asp uygulamasının configured bileseni çagırabilir.
Çogu durumda bu islem DllHost.exe nin bir örnegi olmasına karsın üzerlerindeki
sınırlamalardan dolayı COM+ ‘ın bazı özelliklerini kullanamazlar.
Kitaplık uygulamalarının sunucu uygulamalarına göre daha iyi performans saglamalarının
sebebi kitaplık uygulamasında bulunan bir nesneye erisim süresinin islemler ve bilgisayarlar
arasında dolasarak erisebilecek bir nesneye erisme süresinden çok daha kısa olmasıdır. Ancak
kitaplık uygulamalarındada connection pooling, queued bilesen yüklenememe, bazı güvenlik
ayarlarının çagırıcıdan yani classımızdan türetilmesinden dolayı bir kısım güvenlik ayarlarını
kullanamama gibi bazı sınırlandırmaları vardır.Ayrıca bir islemde hata olusması durumunda
sunucu uygulama sadece dllhost.exe yi sonlandıracak ve diger çalısmakta olan islemlere bir
zarar gelmeyecektir. Ancak kitaplık uygulamasındaki hata istemci tarafındaki islemlerin
tamamen durmasına sebep olacaktır. Bu sebepten dolayı server uygualamaları çogunlukla
tercih edilmektedir.
Her iki tip uygualamanında birbirine üstünlüklerini inceleyecek olursak Sunucu uygulamalar,
hata olusturabilecek bir koda karsı izolasyon gelistirilmistir, queued bilesenleri ve object
poolingi destekler ancak islemler arası metod çagırmalar çok maliyetlidir. Kitaplık
uygulamalarında ise metod çagırımları daha hızlı olmasına ve istemciye özel bazı kaynaklara
erisilebilmesine ragmen, sunucu uygulamalarındaki avantajları saglamamaktadır.
COM+ ın yeni versiyonu olan 1.5 numaralı versiyonu gelistirilmis bir sunucu uygulamayı
windows servis olarak kullanabilme olanagı sunar. Bu ise bilgisayar yeniden basladıgında
belirtilen kullanıcı veya sistem hesabının o islemi yeniden baslatacagı böylece uygulamamızın
sürekli çalısır halde olacagı anlamına gelmektedir. Bilesenleri Windows Service olarak
çalıstırabilmek için My Application Properties penceresinden ve Activation tabından Server
Application’ a tıklandıktan sonra Run Application As NT Service isaretlenmelidir."...

Volkan Acar

volkan.vacar@gmail.com

Hiç yorum yok: