PL/SQL VE JAVA ÜZERİNDE WEB SERVİSLERİ
ÖZET:
Bu döküman Web servisi kavramının kısa tanımını, Eclipse IDE ile web servisi oluşturma işlemini ve PL/SQL üzerinden web servis kullanma yöntemlerini irdeler.
WEB SERVİSLER HAKKINDA:
W3C tarafından belirtilen standartalr çercevesinde web servisler bir bilgisayardan başka bir bilgisayara network üzerinde bağlanmaya yarayan yazılımdır. Sunucu üzerinden istemci tarafından algılanabilir bir arabirimi bulunur. Web servisin meta-data bilgisi WSDL (Web Service Definition Language) (okunuş “wızdıl” ) ismi verilen XML dökümanı üzerinde saklanır.

Yukarıdaki şema bir Oracle uygulamasının herhangi bir web servisine bağlanırken izlediği yolu gösterir. Burada dikkat edilmesi gereken noktalar:
HTTP portu üzerinden bağlantı gerçekleştirilir. Böylece haberleşme günümüzde networklerde en yaygın olan portu kullanmış olur. Firewallar ile engellenme olasılığı çok düşüktür.
SOAP adı verilen bir XML formatı ile veri taşınır. Simple Object Access Protocol adı verilen bu XML dökümanı servise giden istek (request) ve cevap (response) bilgilerini paketler. SOAP XML tabanlı olduğu için geliştirilebilirliği yüksektir, ve platform bağımsızdır. Gelen XML paketini doğru bir şekilde işleyebilen herhangi bir platform web sunucu/istemci rollerinde bulunabilir.
Konu üzerinde daha fazla detaya inmeye gerek yoktur. Web Servis kullanımının 3 önemli safhası aşağıdaki gibidir:
* Discovery : UDDI üzerinden “telefon rehberi” benzeri bir yapı ile web servis bulunabilir
* Description : WSDL dosyası ile web servisin meta-datası öğrenilebilir.
* Transport : SOAP üzerinden web servis – istemci haberleşmesi gerçekleşir.
ECLIPSE İLE WEB SERVİS OLUŞTURMA:
Eclipse IDE plug-in lerinden olan WTP (web tools platform) HTML, XML, JS, WSDL, SOAP, UDDI, SQL, Servlet, JSP, EJB, JAX-RPC, JDBC, JAXP işlemlerini basit kullanıcı arabirimleri ile gerçekleştirebiliyor. Yukarıda bahsedilen web servis kuramları hakkında çok detaylı bilgiye sahip olmadan web servis oluşturma ve kullanma hızlı bir şekilde gerçekleştirilebiliyor.
Java ile web servis oluşturma bu araç ile anlatılacaktır.
Gereksinimler: Eclipse 3.2.0 , WTP 1.5 plugin, Tomcat 5.0 1
Önce Temel bir proje oluşturma ile başlıyoruz:
File / New / Other / ..... / Web / Dynamic Web Project ile yeni web projesi başlatıyoruz.
Aşağıda belirtilen basit java sınıfını oluşturuyoruz:
Şimdi bu sınıfı bir web servis haline çevirebiliriz. Bunu anlatmadan önce web servisler hakkında tip kısıtlamalarında bahsetmek gerekiyor: Web Servislerin methodları Java'daki String sınıfını, ilkel tipleri ve sadece bu ilkel tiplerden oluşmuş sınıfları döndürebilirler. Örnekteki dönüş tipleri bu kuralı karşılamaktadır.
Şimdi yapılması gereken Sınıfa sağ tıklayıp “Web Services / Create Web Service” seçeneği ile WSDL oluşturulmasına, bu sınıfın bir web service ile sarmalamasına izin vermektir.
Oluşturulan Web servisi wtp.Converter sınıfına başvuran XML dökümanlarına sahiptir. Eclipse WTP nin bizim için oluşturduğu J2EE yapısını incelediğimde şunları gördüm:
Eclipse oluşturulan J2EE mimarisini Tomcat altına almıyor. Bunun yerine WTP plugin'i kendi altında bu mimariyi oluşturuyor. Bu denemelerin yapıldığı bilgisayarda
[eclipse plugin dizini]/org.eclipse.wst.server.core/tmp0/webapps/[proje adı]
Dizininde aşağıdaki mimariyi oluşturmuştur:
./WEB-INF
/ConverterService
/wtp
/deploy.wsdd.bak
/undeploy.wsdd
/deploy.wsdd
/classes
/wtp
/Converter.class
/web.xml
/lib
/saaj.jar
/commons-discovery-0.2.jar
/jaxrpc.jar
/commons-logging-1.0.4.jar
/axis.jar
/wsdl4j-1.5.1.jar
/attachments
/server-config.wsdd
./META-INF
/MANIFEST.MF
./wsdl
/Converter.wsdl
Dizin yapısını kısaca anlatmak gerekirse:
META-INF dizini, oluşturalan J2EE uygulamasının meta-data sını tutar.
wsdl dizini web servisin WSDL dosyasını içerir.
WEB-INF ise uygulamaya dair; kütüphaneleri, sınıfları, deploy ve undeploy bilgisini içerir.
WEB-INF dizin yapısı J2EE Web Archive dizin yapısındadır. Bir ant scripti ile “war” dosyası haline dönüşebilir. Bütün Dizin yapısı ise J2EE Enterprise Archive mimarisindedir, bir ant scripti ile “ear” dosyasına dönüşebilir.
PL/SQL ÜZERİNDEN WEB SERVİSE BAĞLANMA:
Oracle 10g ile birlite gelen UTL_DBWS paketi ile web servisi kullanım işlemleri basit çağrılar ile gerçekleştirilebiliyor. Üzerinde çalışacağımız Oracle sürümü 9i olduğu için UTL_HTTP paketi üzerinden haberleştiğimiz web servisinden gelen ve web servisine gönderilen verileri XMLTYPE veri tipinde tanımlı olan metodlar aracılığı ile işleyeceğiz.
Web servis ile haberleşme işlevi aşağıdaki yöntemle yapılır:
Önceden tanımlı WSDL dosyası okunur, web servisin yerleşimi ve sunduğu fonksiyonlar hakkında bilgiler okunur
Web servisi SOAP formatına uygun hazırladığımız istek paketi ile çağırılır
SOAP halinde gelen veri paketi çözümlenerek gelen sonuç program akışına aktarılır.
UTL_HTTP için önemli prosedür ve fonksiyon isimleri:
begin_request : http üzerinden istek başlatılacak bilgisi
write_text : açılan istek üzerinden veri gönderme (SOAP metni burda gönderilmeli)
get_response : gönderim sonrası cevabı okumak için kabul açılır
read_text : açılan kabul üzerinden gelen cevabı okumak için (SOAP metni alınır)
XMLTYPE için önemli fonksiyonlar: (SOAP metinlerini işlemek için)
extract : XML formatında önemli yer tutan XPATH söz dizimi ile XML dökümanı üzerinde
arama işlevi yapılır. Oracle extract fonksiyonuna parametre alarak XPATH söz dizimi alır.
SONUÇ:
Bu çalışma ile J2EE web servisi mimarisi incelenmiş, Eclipse ile hızlı bir şekilde web servisi oluşturma öğrenilmiştir. Oracle 9i web servisi kullanımı için basit bir kütüphane hazırlanmış, 10g nin web servisi paketleri incelenmiştir.
REFERANSLAR:
http://www.oracle-base.com/articles/9i/ConsumingWebServices9i.php
Sun J2EE Tutorial
Eclipse WTP tutorials
tahiti.oracle.com/
1Bu yazılımlar dışında:
Eclipse 3.1.0 ile WTP denenmiştir. Uyumsuzluk tespit edildi.
Web sunucusu olaral JBoss denenmesinde JBoss üzerine WSDL Eclipse tarafından yerleştirilemedi.
Web sunucusu olaral Tomcat 5.5 ile yapılan denemelerde de sorunlarla karşılaşıldı.
Mayıs 2005 Haziran 2005 Temmuz 2005 Ekim 2005 Mayıs 2006 Haziran 2006 Temmuz 2006 Ağustos 2006 Eylül 2006 Ekim 2006 Kasım 2006 Aralık 2006 Ocak 2007