Makale Özeti

p&p grubunun Haziran 2005'te piyasaya son versiyonunu sunduğu Enterprise Library'nin önemli bloklarından biri olan Exception Handling Application Block (EHAB) yapısına hep beraber bakıp, Error Handling mekanizmasnını, Custom Handler, Wrap Handler, Replace Handler configürasyon ayarlarını nasıl girebileceğimizi göreceğiz.

Makale

EL-Exception Handling Application Block -1

 

 Uygulama Geliştiriciler yazılım geliştirirken, güvenlik açıkları ve buglar bırakmasınlar diye Hata Ayıklama mekanizmaları oluştururlar. EHAB'da bu mekanizmaları bir bütün halinde içine almak için oluşturulmuş bir Uygulama Bloğudur. Enterprise Library'den önce ayrı bir blok olarak yer alan Exception  Management Application Block ise, daha çok EnterpriseLibrary içindeki, Logging Application Block'un yaptığı görevi yapmakta idi. (İleri yazılarda bu konuya değineceğiz). EHAB uygulama katmanları arasında ve katmanın kendi içerisinde kullanılabilir.

 

EHAB  genel olarak kullanılan, exception bilgilerinini loglama, orjinal hatayı başka bir hata ile değiştirerek önemli bilgileri saklama, orjinal hatayı bir başka hatanın içerisinde saklayarak  (wrapping) metin ekleme gibi hata ayıklama fonksiyonlarını sağlar. Bı fonksiyonlar exception handler denilen .NET classları içerisinde enkapsüle edilmişlerdir. EHAB ile kendi exception handler'imizi oluşturabilmekle beraber exception handler'leri birleştirerek istediğimiz cevabı almayı da sağlayabiliriz. Mesela bir hatayı loglarken aynı zamanda başka bir hata ile  de değiştirebiliriz.

EHAB ile uygulamanın mimari katmanları arasında hata ayıklama mekanizması sağlarız   Uygulamanın kodlarına dokunmadan, hata ayıklama mekanızmaları için kurallar koyabilir, kuralları değiştirebiliriz.

EHAB catch bloğu içerisinde bulunan statementleri desteklemek görevi görür. Birbirine benzer catch blokları arasında bu kodları tekrarlamak yerine, tekrar kullanılabilir exception handler olarak enkapsüle edilmelerini sağlar.Exception Handler'lar, exception handling lojiğini enkapsüle eden ve EHAB'ın IExceptionHandler interface'ini implemente eden :NET class'larıdırlar. Az sonra detaylı bakacağımız üzre, 3 tane Exception Handler çeşidi vardır.

 

Exception Handling Application Block Bağımlılıkları:

EHAB diğer bloklara ve EL'de bulunan kodlara bağımlı bir bloktur. Bunlar şunlardır

   ::::The Enterprise Library Configuration Application Block. EHAB configurasyon bilgilerini buradan okur.

    ::::Ortak kütühane fonksiyonları : Sistem yönetimi için kullanılan data ve expose olmuş eventler için fonksiyonlar sağlarlar

    ::::The Logging and Instrumentation Application Block. EHAB logging'i kullandığı zaman bağımlı hale gelir. Logging Handler'i seçtiğimiz zaman otomatik olarak  Logging ve Intrumentation Blok eklenir.

Uygulamamızın EHAB'ı kullanabilmesi için, uygulamamıza ,daha önceki yazılarımda da yaptığımız gibi, uygun referansları eklememiz gerekli.

Bunun için References'ı sağ tıklayıp, Add References>>C:\Program Files\Microsoft Enterprise Library June 2005\bin klasürüne gidip

EHAB için:

Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dll 

 EHAB'ın Bağımlılığı bulunan CoAB için 

Microsoft.Practices.EnterpriseLibrary.Configuration.dll 

  EHAB'ın Bağımlılığı bulunan Common assembly için:

 Microsoft.Practices.EnterpriseLibrary.Common.dll.

Logging Handler seçilirse:

Microsoft.Practices.EnterpriseLibrary.Logging.dll.

eklememiz gereklidir.

 

Uygulama'non kod kısmında da, şu namespace'leri eklemek gerekli.

VB.NET:

Imports Microsoft.Practices.EnterpriseLibrary.ExceptionHandling

 

 

C#.NET:

using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling;

 

Tüm hata ayıklama mekanızmaları için genel şablon aşağıdaki gibidir:

VB.NET: C#.NET
Try

     'Hata ayıklanmak istenen kod kısmı

Catch ex As Exception  

     If (ExceptionPolicy.HandleException(ex, "Benim Policy İsmim")) Then

           Throw

     End If

End Try

 

 

   try

    {

   // Hata ayıklanmak istenen kod kısmı

   }

 

   catch(Exception ex)

  {

           if (ExceptionPolicy.HandleException(ex, "Benim Policy İsmim"))

  {

       throw;

   }

 

The HandleException method accepts a string containing a policy name as input. The ExceptionPolicyFactory object uses this policy name to locate the appropriate exception policy information, such as the exception handlers to be run, within the application's configuration file.

HandleException metodu, Policy ismini input olarak alan bir string içerir.ExceptionPolicyFactory objesi bu policy ismini kullanarak, uygun policy bilgilerine ulaşarak,  uygulamanın configurasyon dosyasında exception handlerların çalışmasını

HandleException Method, true veya false dönerek, If bloğuna girilip girilmemesini belirler.Eğer bu Policy'de tanımlanmış bir hata var ise, If bloğuna girilerek hata mesajının ( EHAB'da belirlendiği üzere ) yollanması sağlanır. Biz EHAB'da, Policy ismi dışında kodda herhangi bir ekleme,değiştirme yapmayız çünkü diğer tüm ayarlar, kodların dışında, Enterprise Library sayesinde ayarlanmaktadır.(Bu da zaten p&p grubunun Enterprise Library ile yapmak istediği şey değil mi?:=)

 

Şimdi hep beraber EHAB'ın ayarlarının  nasıl/nelere dikkat edilerek yapıldığını inceleyelim.

 

Configurasyon Bilgilerini Oluşturmak için:

1-Programlar>>Microsoft patterns and practices,Enterprise Library-June 2005>> Enterprise Library Configuration' gelip

a-Ya var olan Uygulamayı açacağız(Open Existing Application),

b-Ya da yeni bir Uygulama açacaçız (New Application). Karşımıza çıkan pencerede Windows Uygulamaları için App.config , Web Uygulamarı için Web.Config'i açaçağız)

2- Uygulama Düğümünü sağ tıklayıp, New>>Exception Handling Application Block Configuration'i seçersek,Exception Handling Application Block düğümü ile Configuration Application Block düğümü eklenir.(CoAB için önceki makalelerime bakabilirsiniz)

 

 

3-Exception Handling Application Block'u sağ tıklayıp,>>New>>Exception Policy'i seçelim. Exception Policy düğümü  eklenir. Birden fazla policy ihtiyacımıza göre ekleyebiliriz.

 

 

Buradaki Exception Policy ismi bizim kodlamada kullanacağımız isimdir. Policy'mize uygun, (Gloabal Policy, Log Only Policy gibi) isimleri  sağ tıklayıp Rename ile  vermemiz uygun düşer. Aşağıda bir örnek görüntü bulunmaktadır.

 

        EHAB configurasyonundan birden fazla Policy kullanabiliriz.Policy'lerde de birden falza exception türü kullanabiliriz. Exception türlerinde de birden fazla Event Handler kullanabiliriz.

 4-Burada genel olarak konuya baktığımız için biz ismi olduğu gibi bırakalım. Exception Policy>>New>>Exception Type seçersek burada Type Selector'den Exception çeşidi seçeriz.

 

 

Eğer başka bir assembly'de var olan bir türü seçmek istiyorsak, Load An Assembly tuşuna basıp, çıkan pencereden Assembly'nin olduğu direktory'e gidip, assembly'i seçersek, System.Exception'dan derive -edilmiş exception türleri yüklenir ve Type Selector'da gösterilir.

5-Seçilen Exception'unun özellikleri sağ panoda görülebilir. Burada istediğimiz PostHandlingAction' ı seçebiliriz. Bu özellik hata ayıklama zinciri bittiği zaman ne action'un olacağını belirlememizi sağlar.

---None:  Bunu kontrol eden uygulamalar, execution'a devam ederler.

---NotifyRethrow: Bunu kontrol eden uygulamalar, orjinal hatayı gönderirler.(Default olarak  bulunur)

---ThrowNewException: Son handler çalıştıktan sonraki exception'u gönderir.

 

6-Exception türünü sağ tıklayıp>>New dersek karşımıza çıkan Exception Handler'lardan birini seçebiliriz. Her handler'in orjinal exception'u değiştirme şansı bulunmaktadır ve her Handler kendi versiyonunun bilgilerini bir sonraki handler'a gönderir.

 

---Custom Handler: Uygulama tanımlı (application defined) exception handlerları configüre etmemizi sağlar.Attributes karşısındaki (...)ları tıklarsak, karşımıza  isim ve Value girebileceğimiz ekran çıkar, istediğimiz kadar isim ve değeri buradan ekleyebiliriz.

 

 

 Custom Handler'i seçmek için Type Selector'deki Load Assembly'i tuşlamamız gerekir.

 

----Logging Handler: İlerideki makalelerde göreceğimiz Logging ve Insturmentation Application Bloğunu kullanan uygulama bloğudur. Bu handler seçildiğinde otomatik olarak Logging and Instumentation Application Blok eklenir. . (Bir sonraki makaledeki uygulamada hep beraber göreceğiz). Eğer bu handler'i remove etmek istersek,  Logging and Instumentation Application Blok'u ayrıca remove etmemiz gerekir. Sağ taraftaki panoda konfigurasyon ayarları yapabiliriz.

 

 

 

   ::::EventID: Default olarak 100'dür, istediğimiz değeri verebiliriz.

   ::::LogCategory:   istediğimiz Log kategorisi ismi verebiliriz.

   ::::Severity: Log'un ne logu olduğu bilgisi için seçilir. Default olarak error'dur, ve 4 türü vardır.(aşağıdaki resme bakınız)

 

   ::::Title: Başlık

   ::::FormatterTypeName loglanmadan önce exception bilgisini formatlamak için seçtiğimiz formatter ismidir.

        a-TextExceptionFormatter: Default  olarak seçilidir,ekranda loglamada veya benzer durumlarda exception bilgisini okunabilsin diye exception'un  text  görüntüsünü oluşturur.

       b-XmlExceptionFormatter: Exception'un XML görüntüsünü oluşturur ve her exception özelliği ayrı bir XML element'i olarak tutulur.

   ::::Priority: Default olarak sıfırdır. Logging ve Insrumtentation Block belirli öncelikten daha düşük olanları filtrelemeyi sağlar.

---Replace Handler

 

   ::::ExceptionMessage: Yeni exception icin yazılacak hata mesajı burada yazılır.

 

 

  ::::ReplaceExceptionTypeName: Orjinal Exception yerine kullanıcak Exception'un ismidir.(...) seçilerek exception ismi seçilir. Eğer  Assembly seçilmek isteniyorsa gene Load Assembly tuşuna basılarak Type Selector'un içi o assembly'deki exception'larla doldurularak seçim yapılır.

 

 

---Wrap Handler

  

    ::::ExceptionMessage: Hata mesajı buraya yazılır.

    ::::Name: Wrap Handler ismi yazılır

.

 

    ::::WrapExceptionTypeName: Burada orjinal exception'u wrap edecek exception türü, (...) tıklanarak ve/ya Load Assembly tuşuna basılarak seçilir.

 

 

Son olarak istediğimiz konfigürasyonları yaptıktan sonra da, kaydet düğmesine basarak, uygulamamızın hata ayıklama mekanızmalarını oluşturmuş oluruz.

 

Sonuç: EHAB'ın configürasyonu hakkında genel bir bilgi sahibi olduk ve Error Handling mekanizmasnını, Custom Handler, Wrap Handler, Replace Handler configürasyon ayarlarını nasıl gireceğimizi gördük Bundan sonraki yazıda, EHAB'la iki uygulama geliştirip daha yakından konuyu inceleyeceğiz.

Serdar Temiz   serdartemiz@yahoo.com