SOA ve Java Web Servisleri

SOA(Service-Oriented Architecture) uygulama geliştirme süreçlerinde sıklıkla kullanılan bir mimari haline gelmiştir. Bunun en büyük sebebi SOA mimarisinin modüller arası bağımlılıkları oldukça azaltmasıdır. SOA genel olarak XML arayüzleri sunsa da JSON arayüzü kullanan servislerde git gide yaygınlaşmaktadır. Bu genel arayüzler sayesinde kullanıcılar servisin sunulduğu sistemden ve dilden bağımsız olarak kod geliştirebilmektedirler. Ayrıca SOA mimarisi tekrar kullanılabilirliğide arttırmaktadır.

SOA mimarisinin belirli standartlardan ve tanımlardan oluştuğundan bu sevislerin nasıl sağlanacağı farklı uygulamalar yol açmışJava Web Servisleritır. Bu çeşitli uygulamalar içerisinde Web Servisleri önemli bir yer tutmakta ve bu yazının temel konusunu oluşturmaktadır. Fakat merak edenler CORBA gibi diğer SOA mimarisi uygulamalarınıda araştırabilirler.

Peki Hangi Web Servisi

Sadece java kullanıcılarını bile düşünsek bir ton web servis framework’ü ile karşılaşıyoruz. En basitinden Apache Axis, Apache Axis2, Apache CFX ve JAX-WS(Metro) akıllara gelecektir. Peki bunların arasından hangisi seçilmeli ya da hangisi geliştireceğiniz proje için daha uygun bir çözüm olur?

İşte bu gerçekten cevaplaması güç bir soru. Bu soruyu daha iyi anlamak için Java tarafından sağlanan XML API’nın incelemekte fayda var. Java gelişim süreci içerisinde farklı farklı XML API’ları geliştirdi. Bizim için önemli olan bu farklı yapılar kullanılarak oluşturulan web servis yapıları. Temel olarak iki adet bulunmakta bunlar JAX-RPC ve JAX-WS olmaktadır. Yalnız belirtmekte fayda var bu JAX-WS’i, uygulaması olan Metro ile karıştırmamak gerekiyor. JAX-WS nasıl web servis tanımlamaları yapılması gerektiğini incelerken, Metro bu tanımlamaların nasıl hayata geçirilmesi gerektiğiyle ilgileniyor. Hatta JAX-WS tanımlarını hayata geçirsen sadece Metro değil.

JAX-RPC ve JAX-WS

Bu ikisde temlinde mesajlaşma standartları Fakat JAX-RPC, JAX-WS’ye göre daha eski bir teknoloji. Temel olarak Java 1.4 standartlarını ve özelliklerini barındırıyor. Ayrıca SOAP 1.1’i desteklemektedir. JAX-WS ise Java 1.5 standartlarını ve özelliklerini barındırıyor. Ayrıca JavaEE 5 ile gelen özelliklerden de yararlanıyor. SOAP 1.1′in yanında SOAP 1.2‘yide destekliyor. En gözle görülür fark ise XML ayar dosyalarıyla boğuşmanız gerekmeden herşeyi annotation’lar üzerinden hallediyorsunuz. Bu özelliklerin ayrıntılarını merak ediyorsanız size IBM’in şu makalesini tavsiye ediyorum. Fakat benim için durum şu: “Ne kadar yeni okadar iyi”…

Bu sebepten Web Servis seçiminde “Seçimimi yeniden yana kullanacağım!” demek isterdim fakat ne yazık ki durum bu kadar kolay değil. Çünkü web servis kullanmak istememiz SOA mimarisine uymak içindi. Yani herkes her şekilde işletim sistemi programlama dili kaygısı duymadan ulaşabilsin istiyorduk . Fakat net bir seçim yapmak işimize gelmeyebilir. Ayrıca iş kod yazma kısmına geldiğinde JAX-RPC temelli sistemlerle yazmak çok daha kolay. Aynı zamanda JAX-RPC tabanlı sistemler daha yavaş olsalarda Servlet Container’larda (Tomcat, Jetty vs.) çalışabiliyorlar. JAX-WS uygulamalarınıda ek kütüphaneler ve WAR (Evet, Axis2’yi çalıştırmak için axis2.war dosyasının deploy edilmesi gerekiyor!) dosyaları kullanarak Servlet Container üzerinden çalıştırmak mümkün.

Hangi Servis Hangi Standardı Kullanıyor

Öncelikle tahmin edeceğiniz üzere Apache Axis, JAX-RPC standartını kullnıyor. Daha doğrusu Apaxhe Axis JAX-RPC’nin bir uygulaması. Apache Axis2 ise Apache Axis’in daha gelişmiş şekli. Köklü değişiklikleri olsa da standartlar açısından Apache Axis’in JAX-WS standartınında eklenmiş hali olarak düşünülebilir. Tabi JAX-WS standardının uygulanışı okadar başarılı değil. Öte yandan Apaxhe CXF’te yine JAX-RPC ve JAX-WS destekleyen bir uygulama. Üzerine bunlardan farklı olarak CORBA ve JAX-RS uygulamalarınıda destekliyor. Ben hiç kullanma şerefine nail olamadım ama Spring Framework’u kullanılıyorsa kesinlikle Apache CXF uygulamasının kullanılması yönünde çok fazla duyum aldım. Metro ise zaten tahmin edeceğiniz üzere sadece JAX-WS standartını destekleyen bir kütüphane.

Sonuç

Benim fazladan Spring uygumuna ve CORBA, JAX-RS gibi başka standartlara ihtiyacım olmadığından, Axis2 daha iyi bir çözüm gibi geliyor. Fakat yer yer Servisim Axis2 ile çalışırken ona bağlanıp soap mesajları çekecek olan istemcim Axis çalıştıra biliyor. Bunun en büyük sebebi Axis’in ek kütüphanelere ihtiyacı olmaması. Bu istemcimin yükünü azaltan bir durum ve bu benim işime geliyor. Fakat yinede bu ufak açıklamalar size yeterli gelmediyse size Axis2, CXF ve Metro’nun karşılaştırıldığı şu makaleyi önerebilirim. Yinede neyi seçerseniz seçin emin olun yanlışı seçmiş olmayacaksınız. Çünkü aynı standartlar takip edildiğinden az çok hepsinin yaptığı şeyler aynı. En güzeli bir kaçını deneyip rahat hissettiğinizi seçmek ve kesinlikle Axis2’de kendimi Axis’ten ve Metrodan rahat hissediyorum.

Kaynaklar

End Of Line