Tarih: 18/06/2004

advertisement
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
Download