Burak IŞIKLI :))

Web Service ile Sıcaklık Dönüşümü

Posted in Java, Web Services by Burak IŞIKLI on 29 Temmuz 2009

Daha önceden blogumdaki Axis 2 Kullanılarak Web Servis Oluşturma adlı yazımda web servisin nasıl oluşturulacağını anlatmıştım. Fakat çok iyi bir örnek vermediğim için biraz havada kaldı. Şimdi anlatacağım örnekle konu tam anlamıyla oturmuş olacak. Web servislerde internette biraz araştırma yaparsanız en sık öne çıkan örnekler sıcaklık dönüşümü, para dönüşümü, kimlik sorgulama gibi hizmetler olacaktır. Bende bunlardan biri olan sıcaklık dönüşümünü java ve jsp kullanarak anlatacağım.

Yapacağımız programı iki aşamalı olarak anlatacağım. Birinci versiyonumuz için paket adımız “edu.burakkk.webservice.tempConverter.v1”. İlk önce birinci versiyonu yapalım.

TempConverter.java


package edu.burakkk.webservice.tempConverter.v1;

/**
 * Web Service
 * Temp Converter
 *
 *@version 1.0 Release 1
 *@author burakkk
 *
 **/

public class TempConverter{
 public String FahrenheitToCelsius(String Input) {
 if (!Input.isEmpty() && isNumber(Input)) {
 double result = 0;
 result = Double.parseDouble(Input);
 result = (((result) - 32) / 9) * 5;
 Input = Double.toString(result);
 return Input;
 } else {
 return "ERROR! Please enter the input number...";
 }
 }

 public String CelsiusToFahrenheit(String Input) {
 if (!Input.isEmpty() && isNumber(Input)) {
 double result = 0;
 result = Double.parseDouble(Input);
 result = (((result) * 9) / 5) + 32;
 Input = Double.toString(result);
 return Input;
 } else {
 return "ERROR! Please enter the input number...";
 }
 }

 private boolean isNumber(String num) {
 try {
 Double.parseDouble(num);
 } catch (NumberFormatException nfe) {
 return false;
 }
 return true;
 }
}

Aslında yaptığımız programı bu şekilde kullanmak doğru olmaz. Çünkü her metodu çağırmak için ayrı bir forma gerek olur ki bu da gereksiz yer, yük ve işlem getirir. Ancak bu şekilde yaparak anlatmak istediğim bir başka konu var. Bu web servis yerine başka bir web servis düşünün. Öyle ki bu web servisin iki metodundan biri özel yani sadece üyelere açık, diğeri ise public yani herkese açıktır. İşte bu işlemi bu şekilde iki ayrı metoda bölerek rahatlıkla yapabiliriz. Özel olan metoda önce kullanıcı üye mi değil mi diye üyelik testi yaptırırız. Bu sebeple de sınıfımıza private olan ayrı bir metod daha ekleriz. Bu private metod, gelen kullanıcının üye olup olmadığını kontrol eder. Örneğin boolean türünde olursa true sonuç döndürürse istediğimiz webservisin sonucunu döndürürüz aksi takdirde üye olmadığına dair hata sonucunu döndürürüz.

Bu prosesimizi(web servisimizi) kullanacağımız zaman yani çağırmak için olan prosesimizi yapalım. Aslında bunu bir web sayfası olarak JSP ile yapacağız. Ancak daha öncedende anlattığım gibi web servis genel bir konsept olduğu için her programlama dilinde yapmak mümkündür. Ben sadece örnek olarak JSP kullanacağım.

TempConverter.v1.jsp

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Temp Converter</title>
</head>
<body>
<form
action='http://localhost:8080/WebService/services/TempConverter/FahrenheitToCelsius'
method="post" target="_blank">
<table>
<tr>
<td>Fahrenheit to Celsius:</td>
<td><input type="text" size="30" name="Input"></td>
</tr>
<tr>
<td></td>
<td align="right"><input type="submit" value="Convert"></td>
</tr>
</table>
</form>

<form
action='http://localhost:8080/WebService/services/TempConverter/CelsiusToFahrenheit'
method="post" target="_blank">
<table>
<tr>
<td>Celsius to Fahrenheit:</td>
<td><input type="text" size="30" name="Input"></td>
</tr>
<tr>
<td></td>
<td align="right"><input type="submit" value="Convert"></td>
</tr>
</table>
</form>
</body>
</html>

Ekran Görüntüsü:

Result

Sayfamızı çalıştırdığımızda yukarıdaki gibi bir ekran karşımıza gelecektir. Buraya fahrenheit olarak veya celcius olarak çevirmek istediğimiz rakamı girip convert butonuna bastığımızda karşımıza sonuç gelecektir. Ancak web servis bir xml tabanlı olduğu için sonucumuz da xml formatında gelecektir.

Programımızın ikinci aşamasına gelelim. İkinci programımızın paket adı “edu.burakkk.webservice.tempConverter.v2”dır. Web servisimizi yaratalım.

TempConverter.java


package edu.burakkk.webservice.tempConverter.v2;

/**
 * Web Service
 * Temp Converter
 *
 *@version 1.1 Release 1
 *@author Burak ISIKLI
 *
 **/

public class TempConverter {
 public String Convert(String type, String Input) {
 if (Input.isEmpty() || !isNumber(Input)) {
 return "ERROR! Please enter the input number...";
 }
 // Fahrenheit To Celsius
 if (type.equals("F")) {
 double result = 0;
 result = Double.parseDouble(Input);
 result = (((result) - 32) / 9) * 5;
 Input = Double.toString(result);
 return Input;
 }
 // Celsius To Fahrenheit
 else if (type.equals("C")) {
 double result = 0;
 result = Double.parseDouble(Input);
 result = (((result) * 9) / 5) + 32;
 Input = Double.toString(result);
 return Input;
 }
 return "ERROR! Please enter the input number...";

 }

 private boolean isNumber(String num) {
 try {
 Double.parseDouble(num);
 } catch (NumberFormatException nfe) {
 return false;
 }
 return true;
 }
}

Bu prosesimiz bir öncekinden biraz daha farklı oldu. Bu prosesimizde tek fonksiyonda olayı çözdük. Ancak fahrenheit mı celcius mu olduğunu kısaca hangi tür olduğunu kullancıdan başkan bir değişken isteyerek yaptık. Bu istediğimiz değişkeni formda belirleyerek programa derdimizi anlattık. Böylelikle tek hamlede istediğimiz web servisi yapmış olduk. Aslında benim yaptığım hata döndürme olaylarını da web tarafında yapmak daha doğru olur. Basit bir örnek vermek istediğim için detaylı incelemedim. Formda javascriptle gerekli eklemeler yapılarak hatta ajax kullanılarak çok daha kullanışlı bir sayfa yapmak mümkün olabilir.

TempConverter.v1.1.jsp

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Temp Converter</title>
</head>
<body>
<form
 action='http://localhost:8080/WebService/services/TempConverter/Convert'
 method="post">
<table>
<tr>
<td>Enter the input number: <input type="text" size="30" name="Input"></td>
</tr>
<tr>
<td><input type="radio" name="type" value="F" /> Fahrenheit
 <input type="radio" name="type" value="C" checked /> Celsius</td>
</tr>
<tr>
<td align="left"><input type="submit" value="Convert"
 class="button"></td>
</tr>
</table>
</form>
</body>
</html>

Ekran Görüntüsü:

Result-245 Celcius’u Fahrenheit’e çevirmek istediğimizde karşımıza gelen ekran şu şekilde olacaktır.

Ekran Görüntüsü:

Result-3

Reklamlar

Web Services(Web Servis) Nedir?

Posted in Web Services by Burak IŞIKLI on 4 Temmuz 2009

Web servisleri Haziran 2000’de ortaya çıkan bir çok yazılım firması tarafından yoğun bir destek bulan bir modeldir. Web servisleri açık internet standartlarına dayanır. Henüz gelişme ve olgunlaşma aşamasında olan bu modelle ilgili olarak bu aşamada ortaya çıkan ve kullanılan çekirdek standartlar SOAP, WSDL ve UDDI’dır.  Web servisleri anlayabilmeniz için öncelikle HTML ve XML dillerinin temelini anlamanız gerekiyor.

Web servisler, Object Management Group(OMG), Common Object Request Broker Architecture (CORBA), Microsoft‘s Distributed Component Object Model (DCOM)  veya SUN‘s Java/Remote Method Invocation (RMI) gibi diğer yaklaşımlarla fonksiyonellik bakımından çok benzerlik gösteriyor.

Web servisleri modelini destekleyen Microsoft, IBM, Sun, HP, Oracle ve daha bir çok firma bu konuda yoğun bir şekilde çalışmakta ve web servisleri yazılım ve uygulama geliştirme araçlarını geliştiricilere sunmaktadırlar. Bu konudaki firmaların yoğun desteğinden dolayı uygulama bütünleştirmesi konusunda ortaya çıkacak hakim ortamın web servisleri modeline dayanacağı yönündedir.

Peki ama web servis nerelerde kullanılıyor?

  • Web Servisler uygulama bileşenidir
  • Web Servisler açık protokolleri(open protocols) kullanarak haberleşir.
  • Web Servisler kendi kendine yetebilen ve kendinden tanımlıdırlar.
  • Web Servisler UDDI kullanılarak keşfedilebilir.
  • Web Servisler diğer uygulamalar tarafından kullanılabilir.
  • Web Servisler XML temeline dayanır yani XML tabanlı bir teknolojidir.

Web servisler ile diğer programlama dilleri veya diğer platformlardan xml ile erişilebilir bu sayede platformdan ve programlama dilinden bağımsız olarak aynı uygulamayı yapabiliriz. Bunun için temel platform elemenleri şunlardır:

  • SOAP (Simple Object Access Protocol)
  • UDDI (Universal Description, Discovery and Integration)
  • WSDL (Web Services Description Language)

Web Servislerin iki temel kullanımı vardır.

1-) Reusable application-components(Yeniden kullanılabilir uygulama bileşenleri)

Bazı uygulama bileşenleri birden fazla yerde değişik şekillerde kullanılabilir. Web servisler bunu sağlayabilir. Örneğin para birimi dönüşümü, hava durumu raporları veya dil tercümanlığını dahi servis olarak uygulama bileşeni halinde sunabilir.

2-) Connect existing software

Web Servisler verilen farklı uygulamaların veri bağlantısı için birliktelik(interoperability) problemini çözmenize yardım edebilir. Web Servisleri ile veriyi farklı uygulamalar ve farklı platformlar arasında değiştirebilirsiniz.

SOAP(Simple Object Access Protocol):

SOAP, XML tabanlı uygulamalarda HTTP üzerinden bilgi değişimine izin veren protokoldür. Basitçe SOAP, Web Servis erişimi için protokoldür. RPC (Remote Procedure Call, DCOM, IIOP (Internet Inter-ORB Protocol) ve Java RMI bu çözümlerden bazılarıdır.

  • SOAP,  mesaj göndermek için bir formattır.
  • SOAP, Internet üzerinden iletişim kurmak amacıyla tasarlanmıştır.
  • SOAP, platformdan ve programlama dilinden bağımsızdır.
  • SOAP, firewall(güvenlik duvarına) gelebilmeye izin verir.
  • SOAP W3C standardıdır.

WSDL(Web Services Description Language):

WSDL, XML tabanlı web servisleri tanımlamak ve yerini belirtmek için tanımlanmış dildir. WSDL, W3C standardıdır. Bir anlamda dağıtık programlamada kullanılan IDL’e (Interface Definition Language – Arayüz Tanımlama Dili) benzer. Web servisi tanımı işlemler, giren ve çıkan mesaj formatları, ağ ve port adresleri gibi bilgileri tanımlar. Bir web servisi tanım belgesi aşağıdaki temel elemanları içerir:

  • Types: mesajlarda kullanılacak veri tiplerini belirtir.
  • Message: İletişimde kullanılacak measjları tanımlar.
  • PortType : Web servisinin içerdiği işlemleri (methods) ve ilgili mesajları tanımlar.
  • Binding : İşlem ve mesajlarda kullanılacak veri formatlarını tanımlar.
  • Port: Binding ve web adresinden oluşan servis noktasını tanımlar. Web adresi servisin çalıştırılacağı URL’dir.
  • Service: Kullanılan port’lar kümesidir.

UDDI(Universal Description, Discovery and Integration):

UDDI, şirketlerin web servisler için kayıt edebildiği ve arayabildiği dizin servisidir. UDDI Kurum Kayıt Servisi (UDDI Business Registry) kurum ve web servisleri bilgilerini saklayan sunuculardır. Bu sunucular servis sağlayıcılarından gelen bilgilerini kendi veritabanlarına kayıt ederek diğer kurumların erişimine açar. Şu anda aktif olarak çalışan kurum kayıt sunucuları uddi.microsoft.com ve uddi.ibm.com ‘dur.

  • UDDI, web servisler hakkında bilgi depolandığı dizinlerdir.
  • UDDI, WSDL tarafından tanımlanmış web servis arayüz(interface) dizinidir.
  • UDDI, SOAP üzerinden iletişim kurar.
  • UDDI, Microsoft .NET platformu üzerine kurulmuştur.

Web Service Example

Geçen yıllardaki gelişmelerden sonra bugünkü web ortamı olmadan ağ tabanlı bilgi sistemlerinin düşünülmesi çok zordur. Web’in bu kadar başarılı olmasının nedeni basitlik ve yaygınlığıdır (ubiquity). Web ortamındaki gelişmeleri üç safhada inceleyebiliriz:

  • Belge Web’i (Document Web) : Belge web’i ile web ilk aşamadaki kullanımı, yani HTTP protokolü ile HTML dilinde biçimlendirilmiş statik belgelerinin kullanıcılara sunumunu ifade ediyor.
  • Uygulama Web’i (Application Web) : Bu yapı işletmelerin müşterilerine web üzerinden bazı iş süreçlerini yaptırma gereksinimi sonucunda ortaya çıktı. Bu yapıda sunucu tarafında çalışan programlar (server-side programs) vasıtasıyla hazırlanan dinamik HTML belgeleri ile kullanıcı ve iş uygulaması arasında etkileşim sağlandı.
  • Servis Web’i (Services Web) : İşletmelerin diğer işletmelerle olan iş süreçlerini bütünleştirme gereksinimi sonucunda ortaya çıkan ve gelişmekte olan yeni yapıdır. Bu yapının temel taşı web servisleridir. Web servislerindeki temel amaç işletme bilgi sistemlerindeki program modüllerinin etkileşimini sağlamaktır. Web servisleri web ortamında yayınlanabilen, aranıp bulunabilen ve çağrılarak erişilebilen modüler uygulama fonksiyonlarıdır. Bu fonksiyonlar değişik kurumsal iş süreçlerini gerçekleştireceklerdir.

WebserviceWeb Servis

Web servisleri modeli üç ana birimin etkileşimine dayanır.

  • Servis Sağlayıcı (Servis Provider): Servis sağlayıcı istemcilerin sağlayıcıda bulunan servislere erişimini sağlar. Servis sağlayıcı kendi sitesinde bulunan web servisleri tanımını servis kayıt birimine (service registry) kaydederek bu servisinin nasıl çağrılacağı belirtir.
  • Servis İstemcisi (Service Requester) : Servis sağlayıcısında bulunan web servislerini çağırarak kullanan istemci uygulamalardır. Web servisinin nasıl çağrılacağı ve ilgili parametreleri servis kayıt biriminden arayarak bulur ve çağırır.
  • Servis Kayıt Birimi (Service Registry) : Servis sağlayıcılarının yayınladıkları web servisi tanımlarını saklar ve aranıp bulunmasını sağlar. Servis sağlayıcıları servis kayıt birimini tarayarak istediği servislere hakkında bilgi alabilir. Servis kayır birimi her servisin nasıl çağırılacağı konusunda tanım bilgileri içerir.

Bir web servisi istemcisinin bir servis sağlayıcıdan bir servisi çağırma aşamasındaki temel adımları:

  • Web servisi istemcisi (SOAP Client) servis kayıt biriminden (UDDI) web servisini bulur.
  • İstemci bir SOAP mesajı hazırlar. SOAP mesajı bir XML belgesidir.
  • İstemci SOAP mesajını web server veya uygulama sunucusunda çalışan SOAP istek dinleyicisine gönderir. İstek dinleyici gelen isteklere cevap veren sunucu programlardır. Bu programlar bir JSP, ASP, CGI veya ISAPI programıdır.
  • SOAP sunucu gelen SOAP mesajını parse eder ve gerekli parametreleri göndererek istenen nesnenin istenen yöntemini çağırır.
  • Çağırılan nesnedeki yöntem çalışır ve sonuçları SOAP sunucuna’a gönderir. SOAP sunucusu gelen sonucu SOAP mesajı formatında biçimlendirerek istemciye gönderir.
  • İstemci gelen SOAP mesajının içindeki bilgileri alarak istekde bulunan programa gönderir.

Yeni nesil web uygulamaları web servisleri modeline dayanacaktır. Web servisleri ile, kurumlar işbirliği yaptığı satıcı, müşteri ve banka gibi diğer kurumlardaki iş süreçlerini birleştirerek daha iyi işlevsellik ve daha az maliyet gibi bir çok avantajlar sağlayacaklardır.

Web servisleri modeli XML, SOAP, WSDL ve UDDI gibi açık internet standartlarına dayanır. Bu konudaki firmaların yoğun desteğinden dolayı uygulama bütünleştirmesi konusunda ortaya çıkacak hakim ortamın web servisleri modeline dayanacağı yönündedir. Web servisleri modelini ciddi olarak benimseyen Microsoft, IBM, Sun, HP, Oracle ve daha bir çok firma bu konuda yoğun bir şekilde çalışmakta ve web servisleri yazılım ve uygulama geliştirme araçlarını geliştiricilere sunmaktadırlar.

Kaynaklar:

http://www.godoro.com/divisions/ehil/Mecmua/Magazines/Articles/txt/html/article_WebServices.html

http://en.wikipedia.org/wiki/Web_service

http://www.w3schools.com/webservices/default.asp

SQL Server Agent Service

Posted in SQL Server by Burak IŞIKLI on 5 Mart 2009
SQL Server Agent Service veritabanı yönetim sistemimiz içerisinde veritabanı ajanı olarak da anılır. Bu servisin yaptığı iş sizlerin zamanını belirterekten belli saatlerde şöyle bir iş yap ve işte tanımladığın şu kişiye mail ve başka yolla haber ver şeklinde veya da sizin belirttiğiniz bazı değerler arasında sizin ve veritabanı yönetim sisteminiz için sıkıntılı olabileceği durumlarda şu davranışlarda bulun ve sonuçlarını göster diyebileceğimiz bir servistir. En genel ifadelerle yukarıdaki söylediklerimle özetleyebiliriz agent service’i ancak gelin yukarıda anlattığım olayları bir senaryo itibariyle nasıl yapabiliriz bunu inceleyelim. Günümüzde biliyorsunuz şirketleri ön plana çıkaran en önemli sonuçlardan bir taneside şüphesiz ki şirketimizin verileridir.Düşünün ki büyük bir şirketin DBA(Database Administrator) veritabanı yöneticisiyiz ve işimiz şirketin verilerinin bakımını yapmak ve uygun zamanlarda uygun şekillerde yedekleme işlemini yapmaktır. Anlatacağımız senaryo itibariyle şunu hedefliyoruz.Hangi zaman sürecinde yapmasını bizim belirleyeceğimiz bir job(iş) tanımlayarak ve ne iş yapmasını söyleyerek bizim adımıza birtakım işlemleri gerçekleştirmesini isteyeceğiz. Bu işlemin sonucunda bir operator ile eğer sonuç olumlu, olumsuz yada her iki durumda da bize haber vermesini isteyeceğiz. Burada yapacağımız uygulamaya başlamadan önce söylenecek en önemli konu ise sistemimiz SQL Server Agent Service modda çalışıyor olmalıdır.

İşe bir job tanımlayarak başlayabiliriz. Bunun için SQL Server Management Studio’dan SQL Server Agent bakılır. Çalışmıyorsa üzerine sağ tıklayıp start yaparak çalıştırabiliriz.

Ekrandaki görünteden jobs seçeneğine sağ tıklayarak New Job seçilerek karşımıza açılan ekrandan Job’ımıza bir isim verilir.Yazacağımız job’ımızı herhangi bir kategoride olup olmayacağını Category tarafından seçebiliriz. İstersek eğer job’ımızla ilgili bir açıklama yapmak için Description denilen kısım kullanılır.

Steps seçeneğine geçerek artık uygulanacak olan job’ımızın adımlarını yazmaya başlıyoruz. New diyerek karşımıza çıkan ekranda step bir isim verilir. Step tipine ise T-SQL script yazacağımızı söyledikten sonra hangi veritabanı için işlem yapacağımız seçilir. T-SQL komutunu yazdıktan sonra Parse diyerek yazdığımız işlem tamamlanır. Alt tarafta bulunan Start Step kısmında ise birden fazla adım yazdı isek job’ımızın hangi adımdan başlayacağını söyleyebiliriz. Schedule tabında ise belli bir zaman vererekten işimizi aktif ederiz eğer bunu kullanmayacaksak job’ımızı ilk ana ekran üzerinden ilgili job seçilerek sağ tıklayarak Start Job denilebilir. Ancak biz belli bir zamanda yapmasını istiyoruz.

Adına Backup dediğimiz job’ımızın çalışma zamanını New Schedule diyerek gerekli değerleri set ederek 15:00 olarak belirledik. Ve de job’ımıza bir isim verdik. Notifications tabında ise yapılması gereken operator ile job’ın durumunun bize bildirilmesini sağlamaktır. Bunun için yapılması gereken Operator tanımlamaktır. Bunun için New Operator seçeneğinden operatorumuze bir isim vermektir. Operatorumuze bir isim verdikten sonra E-mail adresini tanımlamak varsa Pager operatoru tanımlamak ve net send adres seceneğine ise bilgisayarımızın adresini yazabiliriz.

Operator tarafında adres ve mail bilgilerini yazdıktan sonra istersen çalıştığından emin olmak için Test tuşuna basarak kontrol edebilirsiniz. Notifications tabında E-mail operatorunun tanımlanan ismiyle seçilir. Pager operatoru yapmadım ancak bunun yerine bilgisayarımın adını set ettim. İsterseniz en altta bulunan Automatically delete job seçeneğini seçerek job’ınızın bundan sonra ki davranışını belirleyebilirsiniz. Artık job’ımızı oluşturduk ve yapmamız gereken bizim tarafımızdan belirtilen zamanda çalışması beklemek… İşte Sonuçlar hem outlook’ta ki belirttiğim adresime gelen mail hem de net send üzerinden messenger service yardımıyla gelen cevap. Artık job’ımızı oluşturduk ve yapmamız gereken bizim tarafımızdan belirtilen zamanda çalışması beklemek…