25 Kasım 2010 Perşembe

Hibernate'e Genel Bir Bakış

Nesneye yönelik yazılım ve ilişkisel veritabanı kullanımı günümüzde oldukça
yaygındır. Bu iki gözde modelin beklide en önemli problemi en az onlar kadar yaygın ve
dahası önü açık olan kuruluş uygulamaları(enterprise applications) ile birlikte
kullanıldıklarında oldukça karışık, yorucu ve zaman alıcı olmalarıdır. Hibernate bir
nesne/ilişkisel eşleme (Object/Relational Mapping)  aracıdır. Burada nesne/ilişkisel eşleme
terimi nesne modelindeki veri tanımlarının ilişkisel veri modeline eşleme (mapping) tekniğini
ifade etmektedir.

Hibernate yalnızca Java sınıflarından veritabanı tablolarına veya Java veri tiplerinde
SQL veri tiplerine dönüşümü yapmaz. Hibernate veri sorgulama(data query) ve veri
çekme(data retriaval) işlemlerini de kullanıcı için sağlar. Bu özellikleriyle Hibernate
geliştirme kolaylığı ve zamandan kazanç sağlar. Hibernate kullanımı olmadan tüm adı anılan
işlemler için SQL ve JDBC’nin olanaklarından faydalanılarak el ile(manual)  veri işleme(data
handling) gerçekleştirilmesi zaruri olacaktır.



Hibernate ne için var? Bu soru için verilebilecek en iyi cevap: Hibernate geliştiricinin
ortak veri kalıcılığı(data persistence) yükünü hafifletmek için vardır, olacaktır. Hibernate
dağıtıcıya özel(vendor-specific) SQL kodlarının ayıklanmasında ve sonuç kümesi(result set)
işlenmesinde çok faydalı bir araçtır. Hibernate nesne ilişkilerini(object relations) desteklediği
gibi bileşik tipleri de(composite types) destekler. Bunların yanı sıra Hibernate güçlü bir
sorgulama dili(query language) desteğiyle nesneleri veri tabanından çekmeyi, etkili bir
şekilde önbelleğe alma (caching) işlerini de etkin bir  şekilde gerçekleştirmektedir.Hibernate
hemen hemen yaygın tüm veri tabanı sistemleri ile uyumludur(MySQL, HSQLDB)

Nesne/ilişkisel model eşleme(Object/Relational Mapping) matematiksel ilişkiler
üzerine kurulu veritabanı ile nesneler, nesnelerin özellikleri ve ilişkileri  arasında bağlantı
kurma amacına odaklanmıştır. Küçük bir nesnenin veri tabanına aktarımı kolay bir  şekilde
gerçekleşebilir, ama nesnelerimiz ve veri tabanına kaydetmemiz gereken veri miktarı
büyüdükçe, sistemimizdeki nesnelerin ilişkileri karmaşıklaştıkça Nesne/ilişkisel model
eşleme(Object/Relational Mapping)  içinden çıkılmaz bir hal alabilir. Çünkü karmaşık bir
nesne örüntüsü, yabancı anahtarları(foreign key)  ve nesneler arası birlikteliği (association)
karşımıza ciddi sorunlar olarak çıkarır.  İşte burada Hibernate imdadımıza koşar.  İyi bir
Nesne/ilişkisel model eşleme(Object/Relational Mapping)  aracından beklenilen  sıradan bir
java nesnesinin kalıcılığını basit bir komutla gerçekleştirmesi ve kaydedilmiş kalıcı
(persistent) bir java nesnesini geri yüklememizi sağlamalıdır. Aşağıda basit varsayımsal
komutlarla bu işlevler somutlaştırılmıştır.  

orm.save(nesne);

     nesne = orm.load(Kalıcınesne.class, nesneId);


iyi bir Nesne/ilişkisel model eşleme(Object/Relational Mapping)  aracı aynı zamanda
nesnelerimiz için sorgulama yapmamızı da  sağlayabilmelidir:
 List aradıgım_nesnelerim = orm.find(
          "FROM Nesnelerim nesne WHERE nesne.property = 5");

List aradıgım_nesneler = orm.find(
          "FROM Kişi kişi 
           WHERE person.evlidir.adres.sokak LIKE %birşeyler%");

 HİBERNATE ÇALIŞMA İLKELERİ VE MİMARİSİ

Hibernate Veri kalıcılığı (persistence) servisleri sağlamak için veri tabanını ve
çeşitli konfigürasyon kütüklerini kullanır.DBC bağlantısı ve veri hareketleri(data transactions) uygulama
tarafından sağlanır. Bu yapı en düşük düzeyli Hibernate API’ sidir. Gerçek manada Hibernate
hizmetlerinden bahsedilmesi gerekirse JDBC ve JTA kesimlerinin uygulamadan ayrıştırıldığı,
soyutlandığı görülür.
Nesneler aşağıda genel hatlarıyla açıklanmışlardır:


SessionFactory:
  Değişmez(immutable), korunaklı(threadsafe) ve derlenmiş bir  şekilde önbellekte
tuttulan basit bir veri tabanına ait eşlemler(mappings) üzerinde çalışır. SessionFactory Session
için bir Fabrika(Factory) ve ConnectionProvider için istemci(client) vazifesi görür.
Haraketler(transactions) tarafından yönlendirilen veri(data) için bir çeşit ikincil seviye
önbellek(second-level cache) tutar.

Session:
 Tek iş parçacıklı(single-thread), kısa ömürlü bir nesne olan Session uygulama katmanı
ve kalıcı(persistent) katman arasındaki iletişimi temsil eder. Session kalıcı
nesnelere(persistent objects) ait ilk düzey önbellegi tutar ve böylece nesnelere bir
belirleyici(identifier) ile erişimi, nesneler arası gezinmeyi saglar. Session  JDBC bağlantısını
paketler ve hareketler(transactions) için bir fabfika(Factory) sınıf işlevi görür.
Kalıcı nesneler ve koleksiyonlar(Persistent Objects and Collections) 
 Tek iş parçacıklı(single-thread) , kısa ömürlü nesnelerdir ve kalıcı durumu (persistent
state) ve iş metodlarını (business functions) içerirler. Bu nesneler sıradan  java Beanler
olabilirler, amaenönemli özellikleri halihazırda tek bir Session nesnesiyle ilişkili olmalarıdır.
Session kapanır kapanmaz, bu nesnelerin Session ile  birliktelikleri sona erer ve uygulama
katmanından yönlendirilmeye, kullanılmaya hazır durumu geçerler.

Gelip-geçici Nesneler ve Koleksiyonlar(Transient Objects and Collections)
  Bu türde nesneler henüz bir  Session nesnesine ilişiklendirilmemiş kalıcı (persistent)
nesneleri temsil ederler.Bu nesneler bir Session nesnesi tarafından, bir uygulama tarafından
yada bir kapanan bir Session nesnesi tarafından başlatılmış olabilirler. Bununla birlikte henuz
kalıcılaştırılmamış, kaydedilmemiş bir kalıcı nesne (persistent object) olabilirler.

Haraketler (Transactions)
  Tek iş parçacıklı(single-thread), kısa ömürlü nesnelerden oluşan bir katmandır.
Uygulamayı altta yatan ayrıntılı JDBC,JTA veya CORBA katmanlarından yalıtır. Bir Session
nesnesi aynı anda birden çok Hareketle iş görebilir.

Bağlantı Sağlayıcı(ConnectionProvider) 
  JDBC baağlantıları için bir fabrika(factory) sınıfını temsil eder. Uygulamayı altta
yatan Datasource ve DriverManager’den yalıtır.

Hareket Fabrikası(TransactionFactory)
  Haraket varlıkları için bir fabrika konumu  üstlenir. Uygulama tarafından kullanımı
açık bırakılmamıştır, ama istenirse kullnıcı tarafından genişletilip(extend), 
gerçekleştirilebilir(implement).

* *Hacettepe Üniversitesinin hazırlamış olduğu dökümandan faydalanılmıştır.

Hiç yorum yok:

Yorum Gönder