19 Eylül 2012 Çarşamba

Delphi DataSnap ve Uygulamaları

Delphi  DataSnap ve Uygulamaları
Her işletim sisteminde çalışan client programları yazmak istiyorum diyorsanız tam yerine geldiniz. Delphi’de DataSnap  bunun için hazırlanmıştır.  DataSnap İnternet yada İntranet üzerinden kullanılabilen platformdan bağımsız olarak serverdan fonksiyonları çağırabilen  uygulamalar olarak nitelendirilebilir. Kısacası datana nerede istersen, nasıl istersen öyle ulaşmanın yolu DataSnap teknolojisidir. Bunu ilgili bir örneği kodları ile birlikte vermek istiyorum. Kodları makalenin sonunda indirebilirsiniz.
DataSnap Tarihçesi
DataSnap teknolojisi ilk olarak Delphi 3 ile Midas teknolojisinin içinde gelmiştir. Delphi 4 te Midas II ve Delphi 5 te Midas III içinde olmuştur. COM tabanlı TCP/IP ve http (D) COM kapasiteli bağlantı ile uzak data bağlantısı kurmanın güçlü bir yolu idi. Delphi 6 da DataSnap ismiyle sunuldu ve Delphi 2007 bu yapı daha da sağlamlaştırıldı.
Delphi 2009 da yeniden DataSnap mimarisi tanıtıldı. Uzak bağlantı sunucu nesneleri ve client bağlantı üretmenin daha kolay yolu sunularak, başlangıçta sadece TCP/IP bağlantısı ile bir de Delphi Prism 2009 kullanarak .NET clientları inşa etme yeteneği ile COM bağımlılığı kaldırıldı.
Delphi 2010 DataSnap 2009 mimarisi üzerine kurulmuştur ve bu yapı yeni işlevseliklerle genişletilmiştir. İki wizard kullanarak yeni hedefleri desteklemeyi kapsayarak (VCL formları, Windows servisleri ISAPI, CGI ve web App Debugger gibi konsol uygulamaları).Daha sonraki sürümlerde (Delphi XE2) 64 bit mimariye geçen Delphi, DataSnap wizardlarını geliştirerek mobil ve masaüstü çözümleri entegre bir biçimde çalışmasını daha da kolaylaştırdı.
DataSnap Kullanmanın Avantajları

Bu çok katmanlı(multi-tier) teknolojide birkaç ana makina (server) kullanılabilir. Örneğin bir server veritabanını saklamak için diğer server uygulama dosyasını yani .exe uzantılı dosyayı çalıştırmak için kullanılabilir. Cilentlarda ayrı akıllı-akılsız terminallar, mobil cihazlar , bilgisayarlar vs. olabilir. Çok katmanlı teknoloji ile pek çok farklı cihazın bir ya da birkaç anamakinadan kontrolu sağlanbilir. Böylelikle maliyetlerden ve zamandan tasarruf edilir.

Delphi uzun zamandır çok katmanlı veri tabanı uygulamaları için gerekli teknolojiyi barındırıyordu. Önceleri MIDAS ve daha sonraları DataSnap olarak bilinen Delphi’nin çok katmanlı tekonolojisi , uzaktan bağlantı soketleri ve http ile sağlansa bile DCOM yerine, COM üzerine kuruludur . Bazen CORBA teknolojisini bile destekler.  Az biraz değişmiş versiyonu SOAP bağlantısı olarak sunulur.
Delphi 2009 ve sonrası halen klasik DataSnap teknolojisini  içermekle beraber yeni  uzaktan ve çok katmanlı teknoloji içeren yeni bir markayı da içermektedir. Kısmi olarak dbExpress mimarisi üzerine kuruludur. Bu yeni teknoloji halen DataSnap olarak adlandırılmaktadır fakat karışıklıklardan kaçınmak adına genelde “DataSnap 2009” “DataSnap 2010” “DataSnap  XE2” “DataSnap  XE3”vs olarak adlandırılmaktadır. DataSnap uygulmaları mutlaka bir anamakine (server) uygulaması olmak üzere, ihtiyaca göre DataSnap desktop client bağlantısı, DataSnap web client bağlantısı ve/veya DataSnap mobile client bağlantısı(Android, Apple iOS,BlackBerry, Windows Phone 7 vs.) olabilir.

İlk DataSnap Demosunu İnşa Edelim
Bu konuda çok detaya girmeden basit üç katmanlı demoya başlamak faydalı olacaktır.  Biri server uygulaması ve diğeri client tarafı uygulaması olmak üzere iki uygulama hazırlayacağız. Bunun için .groupproj uzantılı grup oluşturup bu dosyada, bu iki exe yi barındırmak dizayn açısından bize kolaylık sağlayacaktır.
Server tarafı
Uzak bağlantıların erişip çalıştıracağı, uzak fonksiyonları DSServerModule de barındıryoruz. Bunun için Delphi 2009 ve öncesi için menüden  File->New->VCL Form Application Delphi seçip (yani standart vcl projesi) yeni proje açalım. Sonra buna yine menüden  File->New->Other->ServerModule eklenmeli ve bir Datamodule eklenmeli.  Delphi 2010 ve sonrası için direkt File->New->Other->Datasnap server(ilk simge) seçilebilir. Böylelikle DataSnap wizardı yardımı ile proje açılmış olur. Delphi 2010 daki wizardı çalıştırırsak şekil 1 deki görüntüyü elde ederiz.




Şekil-1
Ok tuşuna basıldıktan sonra karşımıza Şekil-2 deki pencere çıkacaktır. Bu pencereden hangi seçeneği seçerseniz seçin TDSServer komponentini içeren ServerContainerUnit adlı bir Delphi uniti oluşacaktır. Diğer tüm ek komponentler TDSServer a bağlıdır. Bu komponent server özelliğine sahiptir. Eğer protokol TCP/IP seçilirse Server TDCTCPServerTransport komponenti içerecektir. Eğer iletişim protokolu olarak http seçilirse server TDSHTTPService komponenti içerecektir.

Şekil-2
Bu penceredekilerin anlamaları aşağıdaki tabloda DataSnap Server wizardının seçeneklerini göstermektedir.
Madde
Açıklaması
VCL Forms Application
Bu seçenek işaretlenirse Server yazılımı VCL Forms uygulaması olacaktır.
Console Application
Bu seçenek işaretlenirse Server yazılımı Konsol uygulaması olacaktır.
Service Application
Bu seçenek işaretlenirse Server yazılımı Servis uygulaması olacaktır.
TCP/IP
Haberleşme protokolü, genellikle  TCP/IP olarak bilinen Internet Protokol suiti
HTTP
 Hypertext Transfer Protocol olarak bilinen haberleşme protokolü . HTTP protokolü seçildiğinde Authentication seçeneği aktif hale gelir.
Authentication
Eğer bu seçeneği işaretlerseniz TDSHTTPServiceAuthenticationManager komponenti Serverın olduğu formda yer alır.  TDSHTTPService komponenti TDSHTTPServiceAuthenticationManager i   DataSnap Server için http kullanıcı doğrulama yürütmesine  izin veren  doğrulama yöneticisi olarak  kullanır. Yürütme HTTPAuthenticate olayını yürütmeyi içerir.  When Authentication seçeneği seçildiğinde, clientlarDataSnap kullanıcı adı ve şifresini SQL bağlantı özelliği olarak sağlamaya ihtiyaç duyarlar.
Add Server Methods Class
Server formuna TDSServerClass komponenti eklemek için ve client uygulamalarına server methodlarını göstercek Serverda klas tanımlamasına izin verilmesi için  bu seçeneği işaretleyin.
Ancestor
Bu seçenek Server klasınız için ankestör belirlemeye izin verir. TDSServerModule  Client uygulamalarına serverdan data setleri göstermek için seçiniz. Görsel olmayan komponentleri Server klasınızda kullanmak isterseniz TDataModule ü seçiniz. Sever klasınızı tamamen yürürlüğe geçirmek isterseniz TComponent i seçiniz.
Include sample methods
Eğer bu seçeneği seçerseniz. ServerMethodsUnit, basit bir method olan ve  verilen değeri geri dönen echoString adlı methodu içerir.

Bu wizardın sonucunda üç unit oluşur.
ServerContainerUnit1.pas
DataSnap Server uygulamasının dış dünya açılmasını sağlayan bu form DataSnap serverların olmazsa olmazı üç komponenti içeriyor. TDSServer komponenti uygulamaya Server özelliği verir.
TDSServerClass  komponenti Dinamik method müracatını kullanan uzak client uygulamadan çağırılabilen yayınlanan metodları olan server–taraflı sınıfları belirlemek için kullanılır.
TDSTCPServerTransport   TDSServer için soket-bazlı bilgi iletim  komponentidir.
ServerMethodsUnit1.pas
Bu form uzak bağlantıların çağıracağı fonksiyonların tanımlandığı formdur. Eğer uzak bağlantıya dataset türü geri dönüş değeri olan fonksiyonlar yollanmak gerekiyorsa  bu form TDSServerModule sınıfından seçilir . Delphi 2010 dan sonraki sürümlerde wizardla oluşturan formda “function EchoString(Value: string): string;”  adlı  fonksiyon varsayılan olarak hazır olarak gelmektedir. Bu fonksiyon gelen değeri geri döndürme özelliğine sahiptir. Biz  de deneme maksatlı olarak uygulamamıza “function MerhabaEchoString(Value: string): string;” fonksiyonunu ekleyelim. Bu eklediğimiz fonksiyon yollanan değere merhaba diyerek geri dönüş değerini geri yollar.
function TServerMethods1.MerhabaEchoString(Value: string): string;
begin
  Result :='Merhaba '+ Value;
end;  
AnaFsrv.pas
Bu unit anaformumuz oluyor. Server tarafında program açık iken gözükecek form.Şimdi F9 ile programı derleyelip çalıştıralım ki exe si oluşsun. Server.exe oluştuktan sonra bunu üzerine tıklayıp çalıştıralım.
Bu yeni DataSnap server mimarisi artık COM üzerine kurulu olmadığı için Data Snap server uygulaması 7x24 mantığı ile devamlı server üzerinde çalışacak şekilde açık kalmalıdır.
Bu client tarafını tasarlarken uzak fonksiyonların gözükmesi için gerekli.
Client Tarafı Uygulama Projesinin Oluşturulması
Daha sonra bu grupa sağ tıklayıp new Project ile çıkan diyolagtan VCL Forms Application ekleyerek yeni projeyi Client.dpr olarak adlandırarak ekleyim..Ve bu uygulamanın ana formuna TSQLconnection ekleyelim. F11 basarak Object Inspectörü açalım TSQLconnection komponentinin Driver özelliğinden “datasnap”ı seçelim. Sonra TSQLconnection komponentinin üzerine tıklayıp farenin sağ tuşuna basalım. Ve çıkan menüden (Şekil-3)“Generate DataSnap client Param” kısmını tıklayıp server fonksiyonlarını ve classlarını tanıtan unitin oluşmasını sağlayıp ve bunu UClass.pas olarak saklayalım ve projeye dahil edelim.



Şekil-3

TSqlServerMethod adlı komponentini “Tool palette”teki dbexpress  sekmesinde den alıp forma ekleyelim. TSqlServerMethod uzak fonksiyonları çağırmak için kullanılan bir komponent ve buna çalıtıracağı ServerMethodMerhaba adını verdik.  Object İnspectorden SQLConnection özelliğine formda “ServerConnection” adı ile tanıtılan komponenti yazdık ve ServerMethodName özelliğini oka basarak (Şekil-4)  (server.exe çalışıyor olmasına da dikkat ederek) TServerMethods1.MerhabaEchoString seçtik.



Şekil-4
Formdaki butonun onclick eventinede
procedure TForm3.Button3Click(Sender: TObject);
var
NeGeldi:String;
begin
 ServerMethodMerhaba.CommandText :='TServerMethods1.MerhabaEchoString';
 ServerMethodMerhaba.Params[0].AsString:=Edit2.Text;//fonksiyona Edit.text değeri yolla
 ServerMethodMerhaba.ExecuteMethod ;//uzak fonksiyonun serverda çalışmasına sağla
NeGeldi:= ServerMethodMerhaba.Params[1].AsString;//fonksiyonun geri dönüş değeri
 Edit2.Text:=NeGeldi;
ServerMethodMerhaba.Close; //fonksiyonun çalışmasını bitir
end;

Artık client uzak fonksiyonu çalıştıracak duruma geldi. F9 ile programı çalıştırp exe yi oluşturalım. Proje tamamdır.

Data Snap Demosunu Buradan İndirebilirsiniz.


Bir sonraki yazıda buluşmak üzere hayır dualarınızı bekliyorum.

ALLAH GÜZEL İSİMLERİ(ESMAÜL HÜSNA) VE KAİNAT VE KORONA VİRÜSÜNÜN HAYIRLI TARAFLARI

Kuranı kerimde Bakara 180 de"En güzel isimler Allah’ındır; bu güzel isimlerle O’na dua edin, O’nun isimleri hakkında doğru inançtan sap...