Saturday, October 31, 2015

Oracle Service Bus'da Dinamik Yönlendirme (=Dynamic Routing)

Oracle'ın Orta Katman Platformu üzerinde Servis Odaklı Mimari (SOM, =Service Oriented Architecture) uygulaması geliştirilmek istenirse, karşımıza üç ayrı çözüm ve iki ayrı ürün ailesi çıktığını görüyoruz:
1. Oracle SOA and BPM Suite 11g
    Business Process Execution Language (BPEL)
    Business Process Modeling Notation (BPMN)
2. Oracle Service Bus 11g
   Enterprise Service Bus (EBS)
11g sürümünde ürünlerin biri birinden bağımsız olduğunu görüyoruz, OSB orta katmanın ikinci sınıf vatandaşı gibi duruyor. Bu durumu, Enterprise Manager'a baktığımızda görebiliyoruz:
Şekil-1 Oracle Enterprise Manager 11g'de sadece Oracle SOA Suite'deki Karma Uygulamaları yönetebiliyoruz
Oracle Enterprise Manager 12c'de SOA başlığı altında hem Karma Uygulamaları (=Composite Applications) hem de OSB uygulamalarını yönetebiliyoruz:
Şekil-2 Oracle Enterprise Manager 12c'de hem Oracle SOA Suite'deki Karma Uygulamaları hem de OSB 12c uygulamalarını aynı çatı altında yönetebiliyoruz
OSB 11g'de geliştirme yapmak için iki araç bulunuyor:
1. Web tabanlı bir uygulama: OSB Console
Şekil-3 Oracle OSB 11g'de web tabanlı tasarım konsolu
2. Oracle Enterprise Pack for Eclipse    
Şekil-4 Oracle Enterprise Pack for Eclipse ile OSB 11g projesi geliştirmek
Oracle orta katmanda uygulama geliştirmek için diğer tüm ürünlerinde JDeveloper kullanıyoruz. Nihayet OSB 12c'de geliştirme aracı olarak JDeveloper kullanıyoruz:
Şekil-5 JDeveloper 12c ile OSB 12c projesi geliştirmek
SOM'da farklı türde uygulamalar geliştirebiliriz:
1. Tümleştirme Uygulamaları
Kurumlarda farklı platformlarda koşan farklı programlama dili ya da farklı uygulama geliştirme çatısı kullanılarak geliştirilmiş kurumsal uygulamalar bulunur. Bu uygulamaların bir kısmı kurum tarafından geliştirilmiş, bir kısmı satın alınmış, bir kısmı da dışarıya ihale edilerek geliştirilmiş olabilir. Tümleştirmeden amaç bu uygulamaların bir iş sürecini destekleyecek şekilde yeniden yazılmalarına gerek kalmadan değişen ihtiyaçlara karşılık verecek şekilde birlikte çalışmalarını sağlamaktır. Tümleştirme uygulamalarını BPEL ya da ESB kullanarak gerçekleştirebiliriz. Hangi durumda BPEL hangi durumda ESB kullanmalıyız? Bu soruyu Oracle SOA Suite ve Oracle Service Bus ürünü özelinde cevaplamaya çalışalım:
  • Eğer süreçte yer alan çağrılar kısa soluklu ve senkron servisler ise OSB tercih edilmelidir.
  • Eğer süreçte yer alan çağrılar uzun soluklu ve asenkron servislerden oluşuyor ise BPEL tercih edilmelidir.
2. İş Süreç Yönetimi
İş süreçlerini otomatikleştirmek, verimini arttırmak, kaynak kullanımı iyileştirmek ve maliyetleri azaltmak amacıyla iş süreçlerini yazılımla destekliyoruz. İş süreçlerini BPEL ya da BPMN kullanarak gerçekleştirebiliriz. Hangi durumda BPEL hangi durumda BPMN kullanmalıyız?
  • Eğer iş sürecinin iş mantığı karmaşık programlama yapıları içeriyorsa BPEL tercih edilmelidir.
  • Eğer süreç ağırlıklı olarak onay mekanizması içeriyor ve yoğun İş Kuralı (=Business Rule) kullanımı varsa BPMN tercih edilmelidir. 
Oracle OSB'de Yönlendirme
Oracle OSB gelen istek paketinin içeriğine ve ya başlığına göre yönlendirme yapabilir. Oracle OSB, farklı yönlendirme örüntülerini destekler:
1. Statik yönlendirme
Vekil servis (ProcessOrderServicePS) içinden isteği her zaman dışarıdaki sabit bir iş servisine (ProcessOrderServiceBS) yönlendirmek istiyoruz:
Şekil-6 Statik yönlendirme
2. Yönlendirme Tablosu
Sipariş mesajı içindeki kargo şirketi seçimine göre, seçilen kargo şirketinin web servisini çağırmak istiyoruz:
Şekil-7 Yönlendirme Tablosu ile tasarım
Projede (Shipping), kargo şirketlerinin web servisleri, birer İş Servisi olarak Shipping/Business Services dizini altında tanıtılmış durumda:
Şekil-8 Shipping projesindeki kargo şirketlerine ait İş Servisi tanımları
3. Dinamik yönlendirme
İkinci yöntemde (yönlendirme tablosu) yeni kargo şirketleri eklendiğinde, geliştirme yapmak gerekir. Dinamik yönlendirmede ise İş Servisinin isimlendirilmesinde bir sistematik kurularak, İş Servisinin adı XQuery ifadesi yardımıyla yürütme zamanında oluşturularak, yönlendirme dinamik olarak gerçekleştirilebilir:
Şekil-9 DynamicRoutingPS isimli vekil servisin (=Proxy Service) akışı (=Flow)

Şekil-10 Dinamik yönlendirmeden önce routing değişkeni, XQuery ifadesi ile çağrılacak İş Servisinin URI'yı ile dolduruluyor
Şekil-11 routing değişkenini ilklendirmekte kullanılan XQuery ifadesi

Şekil-12 routing değişkeni ile dinamik yönlendirme 
 Her kargo şirketinin kendi web servisi bulunuyor. Bu servislerin beklediği SOAP zarfının içeriği farklı olacaktır. Servisleri çağırmadan önce servisin beklediği mesaja dönüştürmek gerekecektir. Bu dönüşümü de dinamik olarak OSB'de gerçekleştirmek mümkündür:
Şekil-13 Oracle OSB'de dinamic XQuery uygulaması
DynamicRoutingPS isimli vekil servisi test edelim. İstek dokümanında kargo şirketi olarak UPS'yi seçiyoruz:
 Execute butonuna bastığımızda istek vekile ulaşıyor ve akışa göre Shipping/Business Service/UPSShippingService isimli servise yönlendirilmesi gerekir:
Bir test daha gerçekleştirelim. Bu kez istek dokümanında kargo şirketi olarak FedEx'i seçelim:
Execute butonuna bastığımızda istek vekile ulaşıyor ve akışa göre Shipping/Business Service/FedExShippingService isimli servise yönlendirilmesi gerekir:
Yukarıdaki testlerde hem içeriğe göre yönlendirme hem de dinamik olarak XQuery ile dönüşüm yapıyoruz. ShippingType elemanının içeriği UPS değerine sahipken UPSShippingService servisine yönlendirme gerçekleşirken, çağrıda dinamik XQuery ile dönüştürülen <ser:upsOrder> dokümanı kullanılmıştır. ShippingType elemanının içeriği FedEx değerine sahipken FedExShippingService servisine yönlendirme gerçekleşirken, çağrıda dinamik XQuery ile dönüştürülen <ser:fedExOrder> dokümanı kullanılmıştır.

No comments:

Post a Comment