Tarih: 18/06/2004 Dökümanı Hazırlayan: Onur ÇOBANOĞLU UYGULAMA – VERİTABANI BAĞLANTI MİMARİLERİ VE MİCROSOFT ACCESS İÇİN ÇÖZÜMLER Özet: Bu doküman yazılım uygulamaları ile veritabanı yönetim sistemleri (DBMS) arasında dinamik bağlantılar kurma ve komut/veri iletim mekanizmalarının işleyişi üzerine bir çalışmadır. Bu metindeki çözümler uygulama dili olarak Java ve veritabanı olarak Microsoft Access alınarak önerilmiştir. 1. ÖZET: JDBC/ODBC JDBC (Java Database Connectivity) ve ODBC (Open Database Connectivity), çeşitli uygulamaların DBMSler ile bağlantı kurmasını sağlayan APIlerdir. Bu bağlantılar DBMSye özel JDBC veya ODBC sürücüleri tarafından kurulur; bu sürücülerin işlevi JDBC veya ODBC çağrılarını DBMSye özel çağrılara dönüştürmektir. Bu sürücüler, çalışma zamanında sürücü yöneticisi tarafından dinamik olarak yüklenebilir. Java hem ODBC ile hem de JDBC ile çalışabilir. JDBC’nin JDBC 1.0, JDBC 2.0 ve JDBC 3.0 olmak üzere üç sürümü vardır. 2. JDBC/ODBC MİMARİSİ: JDBC ve ODBC, esas olarak dört ana kısımdan oluşur: Uygulama: Uygulama JDBC veya ODBC APIsı tarafından belirlenen şekilde veritabanına komut gönderir ve sonuçları alır. Sürücü Yöneticisi: Sürücü yöneticisinin görevi, uygulamadan komut geldiğinde gereken sürücüyü dinamik olarak yüklemek ve JDBC veya ODBC çağrılarını ilgili sürücüye yönlendirmektir. Bunun dışında bir parça hata kontrol etme işlevi de görür. Sürücü: DBMS tabanlı sürücüler, belli bir veri kaynağı ile bağlantı kurar, uygulamadan gelen JDBC veya ODBC çağrılarını veri kaynağına özel komutlara dönüştürerek veri kaynağına iletir, gelen cevapları JDBC veya ODBC standardına dönüştürür. Dosya tabanlı sürücüler, veriye fiziksel olarak erişir; dolayısıyla hem sürücü hem de veri kaynağı işlevi görürler. Bu sürücülerin kendi veritabanı motorları vardır. Veri Kaynağı: Sürücüden gelen komutları işleyerek sonuç döner. JDBC sürücüleri sağladıkları bağlantı türüne göre dört sınıfa ayrılır: Sınıf I – Köprü Sürücüleri: Bu tip sürücüler JDBC çağrılarını veri kaynağının tanımadığı başka APIlere dönüştürür. En bilinen uygulama JDBC-ODBC köprüsüdür, bu köprü JDBC çağrılarını ODBC APIlerine dönüştürerek ODBC sürücülerine iletir. Bu köprünün çalışabilmesi için ODBC sürücülerinin veri kaynağı tarafında yüklenmiş olması şarttır, öte yandan JDBC sürücüsü gerekmemektedir, köprü bu işlevi görür. Bu tip sürücülerin avantajı, uygulamanın sadece köprüyü yüklemesi gerekmesidir; ayrıca Sun Microsystems’ın JDBCODBC köprü sürücüleri standart JDK paketiyle beraber geldiği için fazladan maliyeti de yoktur. Dezavantajları ise şunlardır: Uygulama ile veritabanı arasına giren katmanlar performansı düşürür, ayrıca sürücünün işlevselliği ODBC’nin işlevselliği ile sınırlıdır (Bu noktada ODBC’nin işlevselliğinin ne olduğu önem kazanmaktadır. Microsoft’un bilgi kaynakları Microsoft ODBC’den, sadece uyumlu olduğu veri kaynağının işlevselliğinin beklenmesi gerektiğini söylemektedir. Microsoft Access Microsoft ODBC ile uyumlu olduğundan dolayı bu açıklama Access için geçerlidir). Sun Microsystems’ın bilgi kaynakları Microsoft Access gibi masaüstü veri kaynaklarına ağ üzerinden erişim için en iyi çözümün ticari bir JDBC-ODBC sürücüsü kullanmak olduğunu söylemektedir. Microsoft Access ile uyumlu JDBC sürücülerinin listesi 3. kısımda verilmektedir, fakat aşağıda çevrim dışı Access bağlantısı için en uygun adaylardan biri olarak görülen Sun Microsystems’in ODBC-JDBC sürücüsünün özellikleri ayrıntılı olarak incelenmiştir: Sun JDBC-ODBC köprüsü JDBC 3.0 APIsinin sınırlı bir alt kümesinin işlevselliğini sağlayabilmektedir. Güvenli olmayan appletlerden Sun JDBC-ODBC köprüsü yüklenememektedir. Sun JDBC-ODBC köprüsü tek başına ağ üzerinden erişim sağlayamamaktadır. Ağ üzerinden erişim için, bedava olarak bulunabilen RMI-JDBC-ODBC köprüsü kullanılmalıdır. Sun JDBC-ODBC köprüsü çoğu ODBC 2.0 sürücüleriyle çalışmaktadır. Microsoft Access ile sorunsuz bir şekilde çalıştığı bilinmektedir. Sun JDBC-ODBC köprüsü çeşitli iş parçacıklarından gelen eşzamanlı çağrıları desteklememektedir. Bu tip çağrılar yapılsa bile köprü bunları seri olarak işleyeceğinden uygulama çoklu görev etkisi göremeyecektir. Ayrıca böyle bir uygulamanın çalışması durumunda DBMSdeki kilitlerle köprüde kullanılan semaforların arasında kilitlenme oluşabilir. Sun JDBC-ODBC köprüsü her bağlantı için tek bir Statement nesnesi desteklemektedir. Sınıf II – Veri Kaynağına Uyumlu APIye Dönüşüm Sağlayan ve Saf Java Olmayan Sürücüler: Bu tip sürücüler JDBC çağrılarını, üzerinde çalışılan veri kaynağının APIlerine doğrudan dönüştürür. Bu tip sürücüler genellikle C++ ve Java karışımı kullanılarak yazılır, DLL biçiminde bulunur ve veri kaynağına özeldir. Bu mimari JDBC-ODBC köprüsüne kıyasla çok daha iyi performans gösterir; fakat APIleri işleyen veritabanı sürücüsünün uygulamanın çalıştığı bütün bilgisayarlara yüklenmesini gerektirir. Sınıf III – Ağ Köprüleri: Sürücü JDBC çağrılarını belli bir ağ protokolüne çevirerek ara sunucuya yollar, ara sunucu ise bu protokolü Sınıf II’ye ait bir sürücü kullanarak veri kaynağının protokolüne çevirir. Ağ protokolü ara sunucu tarafından belirlenir. Bu mimari dört sınıf içerisinde en esnek olanıdır ve uygulama tarafında JDBC sürücüsüne çok az yük getirmektedir. Sınıf IV – Java Sürücüsü ile DBMS APIsine direk dönüşüm: Sürücü DBMS ile ağ üzerinden Java soketleri aracılığıyla DBMSye özel ağ protokolünü kullanarak konuşur. İstemci tarafındaki sürücü tamamen Java ile yazılmıştır ve JDBC çağrılarına doğrudan DBMS APIlerine dönüştürür. DBMS sunucusuna doğrudan erişim sağladığı için bu mimari İntranet erişimi için pratik bir çözümdür ve bütün mimari parçaları Java ile yazıldığı için performansı gayet iyidir. 3. MICROSOFT ACCESS İÇİN JDBC SÜRÜCÜLERİ Microsoft Access Microsoft ODBC ile doğrudan uyumlu olduğu için ayrıca ODBC araştırması yapılmamıştır. Aşağıdaki JDBC sürücüleri listesi 17/06/2004 tarihinde Sun Microsystems’ın bilgi kaynaklarından alınmıştır (ayrıntı için kaynakçaya bakınız). Sürücülerin listesini vermeden önce birtakım sürücü özelliklerini belirtmek gereklidir: Bağlantı Havuzu (Connection Pooling): Bir veri kaynağına erişim sağlamak bilgisayar kaynakları açısından maliyetli bir iş olduğundan (ağ bağlantısı kurma, kimlik denetimi, bellek ayırma vs.) bazı sürücüler önce bir bağlantı havuzu yaratarak, daha sonra yeni bağlantılar talep edildikçe varolan bağlantılardan birine atamak yolunu seçebilir. Bazı sürücüler bu özelliği desteklemektedir. Veri Kaynağı (Data Source): Bazı sürücüler DBMSye sadece SQL komutlarını yollarken, bazıları SQL komutlarını DBMSnin anlayacağı komutlara dönüştürme yeteneğine sahiptir. Bu yeteneğe sahip olanlar veri kaynağı özelliğini sağlıyor demektir. RowSet Ara Yüzü: JDBC 2.0’ın sağladığı RowSet ara yüzü, ilkel haline göre çok daha fazla işlevsellik sağlamaktadır. Bazı sürücüler bu yeni ara yüzü desteklemektedir. Aşağıda Microsoft Access için JDBC sürücülerinin listesi verilmiştir: JDBCTM Driver Vendor Name API Type(s) version DBMS(s) Supported Conn. Dist. DataSource RowSets Availability Pooling Trans Broadband Communications Solutions Corp. 2.x 3 4 MS Access MS SQL Server x x x x Now Broadband Communications Solutions Corp. 3.x 3 4 MS Access MS SQL Server x x x x Now ATINAV, INC 1.x 3 FoxPro MS Access n/a n/a n/a n/a Now dBase xbase Broadband Communications Solutions Corp CONNX Solutions DataDirect Technologies Easysoft 3.x 2.x 3.x 1.x 1 MS Access MS SQL Server n/a x n/a x NO 3 DB2 DataFlex/PowerFlex FoxPro Informix MS Access MS SQL Server Oracle RDB RMS Sybase Text (CSV, Tab separated etc.) VSAM dBase x x - x Now 3 ADABAS Centura SQLBase Clipper Datacom FoxPro IBM AS/400 IDMS IMS Ingres MS Access OS/390 Sequential Files OpenIngres Paradox Pervasive.SQL Progress Text (CSV, Tab separated etc.) VSAM XML dBase x x x x Now 3 CISAM InterBase MS Access MS SQL Server ODBC Oracle RMS - - - - Now Easysoft IDS Software IDS Software IDS Software 2.x 2.x 1.x 3.x 3 CISAM InterBase MS Access MS SQL Server ODBC Oracle RMS - - - - Now 3 DB2 FoxPro Informix Ingres MS Access MS SQL Server MySQL ODBC Oracle PostgreSQL Sybase YARD-SQL dBase mSQL x x - x Now 3 DB2 FoxPro Informix Ingres MS Access MS SQL Server MySQL ODBC Oracle PostgreSQL Sybase YARD-SQL dBase mSQL x x - x Now 3 DB2 FoxPro Informix Ingres MS Access MS SQL Server MySQL ODBC Oracle PostgreSQL Sybase YARD-SQL dBase x x x x Now mSQL InfoZoom 1.x 2 MS Access MS SQL Server n/a n/a n/a n/a FCS, March 2000 InfoZoom 2.x 2 MS Access MS SQL Server - - - - FCS, March 2000 3 DB2 Informix JDBC MS Access MS SQL Server MySQL ODBC Oracle PostgreSQL SAP DB Sybase - - - - Now x x - x Now i-net software 2.x iWay Software 2.x 3 ADABAS ALLBASE SQL CA-IDMS CISAM Cache Cloudscape DL/I Datacom Enscribe IDMS IMS ImageSQL Ingres MS Access PICK Progress RDB RMS Redbrick Warehouse Sybase Teradata RDBMS TurboIMAGE UNIFY VSAM dBase infoZoom 2.x 2 MS Access MS SQL Server - - - - March 2000 Final 2 MS Access MS SQL Server OleDB-Provider n/a n/a n/a n/a Now infoZoom 1.x pravin 1.x 2 JDBC MS Access MS SQL Server Mimer SQL MySQL ODBC x x x x EK A: KAYNAKÇA 1. Database Management Systems – Raghu Ramakrishnan/Johannes Gehrke, Third Edition, McGrawHill 2. http://www.microsoft.com/data/odbc 3. http://industry.java.sun.com/products/jdbc/drivers 4. http://java.sun.com/products/jdbc/faq 5. http://java.sun.com/products/jdbc/driverdesc.html yes