Jump to content

Com+ Da İnce Bağlı Olaylar (loosly Coupled Events)


wmismail

Recommended Posts

Com+ da İnce bağlı olaylar (Loosly Coupled Events)

Merhabalar, bu yazımızda Com+ ın .Net e göre olan üstünlüklerinden birisi olan Loosely Coupled Events (ince bağlı olaylar) tan bahsedeceğiz.

İlk önce bilmeyenler için Com+ Microsoft un Com teknolojisini geliştirdikten sonra MTS teknolojisini Com teknolojisi ile birleştirip Win DNA mimarisinden üretilen bir yapıdır. Win DNA mimarisi .Net çıkmadan önce geliştirilen bir yapıdır. Win DNA nın esas amacı Distributed Application (dağıtık uygulama) geliştirmekti (zaten DNA nın açılımıda Distributed Network Application olarak geçiyor).

Olay kavramını biraz inceleyelim. olay bir uygulamanın bir işi yapması ile tetiklenen bir iştir. Öreğin windows da çok sık kullandığımız, butona basılması bir olaydır. Butona basıldığında bu butonun Click olayı tetiklenir ve Click olayına göre bir işlem yapılır. (Windows da olaya dayalı programalama olduğu için her windows yada Asp.Net programcısı olayları kullanmak zorundadır.)

İki türlü olay modeli vardır.

Puul model ve push model,

Puul Modeli : pull modelinde bir nesne olayları toplar ve bu topladığı olaylara göre işlemler yapar.

Push Modeli : push modelinde ise her olay oluştuğunda bu olay iletilir. İletilen olaya göre işlemler yapılır.

Genellikle bu işlemler bir nesne ve bu nesnenin olaylarını dinleyen bir yapı ile yapılır. Yani bir olayı tetikleyen birde olayı dinleyen (olayı yakalayan) yapıya ihtiyaç vardır.

Olayı yakalama mekanizmalarıda bir kaç çeşide ayrılır. Biz .Net Framework’teki ve Com+ daki LCE üstünde duracağız.

.Net Framework’teki yapı delegate tabanlı (yetki verme) bir yapıdır (buda aslında temel olarak CallBack tabanlı yapıdır.) yani .Net FW de bir olay oluşur. Bu olay bir olay yakalayıcısı ise yakalanır ve delegate vasıtası ile bu olay ile ilgili olan fonksiyona olayı tetikleyen nesne yönlendirilir (olay fonksiyonlarındaki sender nesnesi gibi).

COM+ daki LCE modelinde ise, yayıncılar (Publisher) ve aboneler (Subscriber) den faydalanılır. Veriye ulaşan bileşen (yani yayıncı) ve yayıncının haberi olmadan tetiklenen olay yakalama yapısı üstüne kurulmuştur. Bu şekilde iki bileşende birbirlerini etkilemeden değiştirlebilir ve geliştirilebilir. Bu mimaride tam ortaya yerleştirilecek bir aracı class (Event Class) vasıtası ile yayıncılar ve aboneler birbirlerine bağlanırlar. Bu olay class ı çok basit bir class dır ve içinde temel olarak arayüzler (event interface) barındırır. Yayıncıların ve abonelerin ortak noktaları bu olay classıdır (aslında olay arayüzüdür) bu iki olayı birbirinede COM+ katalogdan Abonelik (subscription) bölümünden bağlayarak oluşturabilirsiniz.

img4.gif

Şimdi bu işlemlerin adım adım nasıl yapılacağına bakalım.

İlk önce yeni bir Windows Uygulaması oluşturun ve adına ComLceWin yazın. Bu olayı tetiklememize yarayacak uygulama. Şimdi Solution Explorer penceresinden Solution a sağ tıklayarak Add -> New Project adımlarını izleyin. Burada ise yeni bir Class Library seçin ve adınada ComLceComp yazın. Bu oluşan Class sayfası bizim aracı classımız yada interfacemiz, bu sayfayı sadece bir interface (Event Interface) yazmak için kullanacağız. Bu yüzden o sayfadaki herşeyi silin (public class Class1 ve End Classı) ve şunları yazın,

Public Interface IEvents

Function metot1() As String

End Interface

Daha sonra Class Library mize yeni bir Class File ekleyin. Bunun için Projeye sağ tuş tıklayarak Add -> Add Class tıklayın. Yeni Class dosyasını ekledikten sonra Com+ Nesnemizi yaratmak için gerekli bazı ayarları yapacağız. Örneğin System.EnterpriseServices Assembly Referans larınıza ekleyin. Daha sonra Class dosyasının en başına System.EnterpriseServices ve System.Reflection Namespace lerini import edin. Aşağıdaki kodları yazın.

Imports System.EnterpriseServices

Imports System.Reflection

<Assembly: AssemblyKeyFile("f:\comp.snk")>

<Assembly: ApplicationName("Com+ LCE")>

<Assembly: Description("LCE ornegi")>

<Assembly: ApplicationActivation(ActivationOption.Server)>

Public Class OlayClass

Inherits ServicedComponent

Implements IEvents

Public Function metot1() As String Implements IEvents.metot1

End Function

End Class

Bu kodlardaki Assembly ile başlayan bölümler tamamen Com+ bileşenimizin yaratılması ile alakalıdır ve bizim konumuz dışındadır ancak ben yinede çok basitçe anlatayım. İlk satır yani AssemblyKeyFile bir Strong Name oluşturmak için gerekli olan Key dosyasının konumunu gösteriyor (sn –k comp.snk komutu ile VS.NET command Prompttan yaratabilirsiniz.) ApplicationName bileşenimizin görüntülenecek ismi, Description bileşenin açıklamasını ApplicationActivation ise bileşenimizin bir server uygulamasımı olduğunu yoksa bir library uygulamasımı olduğunu anlatıyor. Dediğim gibi bu bölümler Com+ nesnesi ile alakalı. Önemli olan bölüm Classın başındaki EventClass deyimi böylece bu Classın Yayıncı olduğunu anlatıyoruz. ServiceComponent Classını inherit az önce oluşturduğumuz IEvents isimli Interfacemizi de implement ediyoruz. Vs.Net otomatik olarak bu interfacedeki Metodu getiriyor. Buradaki metot bir iş yapabilir ama şu anda bu beni ilgilendirmiyor ben o yüzden bu metodu boş bırakıyorum.

Son olarak bir Class dosyası daha ekleyin bu dosya ise bizim abonemiz bu abone olay classında tetiklenen metodu yakalayacak ve ona göre bir iş yapacak. Bu class dosyasına aşağıdaki kodları yerleştirin.

Imports System.EnterpriseServices

Imports System.Reflection

Public Class Abone

Inherits ServicedComponent

Implements IEvents

Public Function metot1() As String Implements IEvents.metot1

MsgBox("Calisti")

End Function

End Class

Yapılan işlemler çok basit ServicedComponentten türetiyorumki Com+ bileşeni olsun sonra benim interfacemi implement ediyorum. Metot yine otomatik olarak geliyor ben sadece MsgBox ile çalıştı metnin görüntülenmesini sağlıyorum.

Bileşenlerimiz tamam şimdi sıra geldi bunları kullanmaya. İlk önce oluşturduğumuz windows projesine gelin References klasörüne sağ tuş tıklayın ve Add Reference ye basın, açılacak olan formun en son sekmesine Project sekmesine geçin, demin oluşturduğumuz projeye iki kere tıklayın ve OK a basın daha sonra formun üstüne bir buton yerleştirip Clik lenme olayına şu kodları yazın

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim srv As ComLceComp.OlayClass = New ComLceComp.OlayClass

srv.metot1()

End Sub

Burada ben OlayClass ımdaki Interfaceden gelen metot1 isimli metot u tetikledim.

Şimdi uygulamanızı çalıştırın. Uygulamayı çalıştırmaktaki amacımız Com+ nesnemizin katalogda oluşturulması, ilk kez butona tıkladığımızda sadece nesnemiz katalog a kaydedilecek, kaydedildikten sonra abonelerimizi bağlayacağız.

Şimdi çalıştırın ve kataloga kaydedin. Katalog a kaydedilip kaydedilmediğini görmek için başlat çalıştıra dcomcnfg yazın ve entere basın. Şekilden nesnemizin oluşup oluşmadığını görebilirsiniz.

img1.gif

Şimdi ise abonelikleri tanımlayacağız. Abone Classımızdan oluşturulmuş olan ComLceComp.Abone yi genişletin ve Subscriptions klasörüne sağ tuş tıklayarak New den Subscription a tıklayınız, Hoş geldiniz ekranını next ile geçin yeni gelecek formda ise sizin abone olabileceğiniz yapılar listelenecek biz en alttaki IEvents i bulup onu seçeceğiz.

img2.gif

Daha sonra yine next e basın. Gelen diğer formda OlayClassınızı seçip Next e basın, bu ekranda bu aboneliğe bir isim vermenizi istiyor. Ben abonelik yazacağım. İsim verdikten sonra altta bir checkbox var. Bu Checkbox ı check leyin. Eğer checklemezseniz bu abonelik yaratılacak ancak enable olmayacaktır.

img3.gif

En son olarak Finish e basın ve bu ekranı kapatın. Alttaki ekranda oluşturulan aboneliği görüyoruz.

img5.gif

Artık projemizi bir kez daha çalıştırmak kaldı geriye. Dikkat etmeniz gereken nokta ben Formda butonun Click lenmesinde OlayClass ını oluşturdum. Ancak bu classdaki metotda hiç bir iş yoktu. Abone Classımda MsgBox vardı. Ben OlayClassımdaki metotu çağaracağım o Aboneliği vasıtasıyla gidip diğer Class daki metotu tetikleyecek.

img6.gif

Böylece Com+ ın çok fazla bilinmeyen ancak .Net e göre bir üstünlüğü olan LCE yi incelemiş olduk. bu projenin kodlarını buradan indirebilirsiniz. Bu makale ile ilgili herhangi bir sorunuz için mailimi kullanabilirsiniz.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...