JPA Fetch Stratejileri ve Lazy Loading

JPA içerisinde nesneler arasındaki ilişkilerde verinin getirilmesi ile ilgili davranışlar kendi aralarında farklılık gösterebilmektedir. Bu özelliği sağlayan fetch stratejileridir.

Örnek verecek olursak OneToOne ve ManyToOne ilişkili nesneler asıl nesnenin çağırımıyla birlikte direkt olarak getirilirken, OneToMany ve ManyToMany ilişkili nesnelerde ise ilişkili nesnenin çağırımı ile bilgi çekilmesi sağlanmaktır. Fetch stratejilerinde OneToOne ve ManyToOne default olarak EAGER iken, ManyToMany ve OneToMany ise LAZY stratejisindedir.

Buna göre
LAZY : Tembel yükleme, asıl nesne çağırımı sonrasında lazy ilişkili nesnelerden bilgi getirilmez. Bilgiyi ancak ilişkili nesnenin çağırımı ile birlikte getirir. Burada get metodunun çağırımı ile proxy devreye girer ve ilgili sorguyu gerçekleştirir.
EAGER : Direkt yükleme, asıl nesne çağırımı ile birlikte ilişkili nesne bilgiside getirilir.

Buna örnek verecek olursak Document ve SubDocument isimli iki adet entity miz bulunuyor ve bu entityler kendi aralarinda aşağıdaki gibi ilişkili.

Fetch Stratejileri ve Lazy Loading

Fetch Stratejileri ve Lazy Loading

Bu ilişkinin kod tanımı aşağıdaki gibidir.
Read more…

JPA – Cascade Stratejileri

Cascade JPA içerisinde stratejileri nesneler arasındaki persist operasyonların birlikte davranışlarını belirler. Bunun anlamı bağlı olduğunuz nesnenin aynı persist operasyonundan geçip geçmemesidir.

Örnek verecek olursak aşağıdaki gibi bir entity yapımız olsun.

JPA cascade

JPA Cascade Stratejileri

Buna göre Student ve Address arasında OneToOne bir ilişki bulunmaktadır ve kod aşağıdaki gibidir.
Read more…

Blog Yazilari

Bu aralar yeni cikacak Java kitabim konusunda calismalarim nedeniyle bloga bir sey yazamiyorum. Sanırım bir ay kadar boyle gidiyor olacak. Yakın zamanda yeni yazilarla görüşmek dileğiyle :)

Oct 12th, 2011
Tags:

Seam de Zamanlı İşler – Scheduling

Seam Scheduling

Seam Scheduling

Seam içerisinde belirli aralıklarla çalışan operasyonların olmasını istiyorsanız zamanlı işleri (Scheduling) kullanabilirsiniz. Bunun için iki alternatifiniz var. Birincisi EJB Timer olabilir ancak bu durumda EJB Container üzerinde çalışmanız gerekiyor. Alternatif olarakta Java dünyasında en çok kullanılan scheduling faramework ü olan Quartz ı kullanabilirsiniz.

Öncelikle zamanlı işlemler için quartz ı kullanacağımızdan bunu components.xml altında aşağıdaki gibi tanımlamamız gerekiyor.

    <async:quartz -dispatcher />

Read more…

Seam-gen Framework

Seam-Gen Framework

Seam-Gen Framework

Seam içerisinde uygulamaları daha hızlı geliştirmek için Seam-Gen framework yapısı bulunmaktadır. Seam-gen in amacı code generation yani kod üretmektir. Bu özellikle hazır ekranları üretmek için Seam içerisindeki hazır templateleri kullanır.
Seam içerisinde kod üretmek için iki yöntem vardır. Bunlardan birincisi eclipse ile üretmek diğeri ise ant yardımı ile console ekranından çalışmak.
Eclipse kullanırken ekranda New -> Seam Entity dediğimiz zaman entity template leri ile kod oluşturma sağlanır. Bu durumda Ogrenci adında bir entity oluşturmuşsak bizim için Ogrenci.xhtml OgrenciList.xhtml OgrenciHome.java OgrenciList.java ve Ogrenci.java oluşturulur. Bu kodlar template ler vasıtasıyla oluşturulmuştur.
Read more…

Aug 15th, 2011

Seam – Interceptor ler

Seam Interceptors

Seam Interceptors

Aspect Oriented uygulamalar için Seam içerisinde yer default interceptor ler haricinde kendi interceptor mimarinizi yazabilirsiniz. Aşağıda bununla ilgili bir örnek bulunmakta. Bu örnekte uygulamamızdaki metodların performansları console ekranına basılıyor.

Tanımı @Interceptor ile yapabiliriz. Burada @AroundInvoke ile tanımlanan metod aspect in çağırıldığı yerdir. Buna göre invocation.proceed() metodunda çağırımı gerçekleşiyor. Bu arada metod başlangıç ve bitişinde geçen süreyi alıp diğer bilgilerle birlikte yazdırıyoruz. Bunun haricinde around ile interceptor un hangi interceptor lerden sonra çalışacağınu belirtiyoruz.
Read more…

Aug 4th, 2011

Java Doküman Çevrimi

Document Convertion

Doküman Çevrimi

Dokümanların farklı formatlara çevrilmesiyle ilgili Jod Converter ı kullanabilirsiniz. Jod Converter arka tarafta Open Office veya Star Office gibi servisleri kullanıyor.

Öncelikle makinemize Open Office i kuralım. Sonraki adımda Open Office servisini aşağıdaki gibi açalım. Bu bize 8100 portundan hizmet veren bir servis açıyor olacak.

 

 

soffice -headless -accept=”socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard
Read more…

Seam – Hibernate Entegrasyonu

Seam-Hibernate Entegrasyonu

Seam-Hibernate Entegrasyonu

Seam ile oluşturduğumuz projelerde Seam-gen deki templerlerden dolayı default olarak JPA ve üzerine Hibernate provider geliyor. Ancak başka bir alternatif projemize olarak core Hibernate desteğide sağlayabiliriz. Bu durumda artık JPA nın EntityManager değil Hibernate Session nesneleri ile çalışmamız gerekiyor. Aşağıda bununla ilgili bir örnek bulunmakta.

Öncelikle bir Seam projesi oluşturuyoruz ben projenin ismini seamHibernate olarak verdim. Proje direkt JPA desteği ile birlikte geldiğinden src/main/META-INF/ altındaki persistence.xml dosyasını silebiliriz. Bunun yerine src/main/ altında hibernate.cfg.xml dosyası oluşturuyoruz. Bu dosyanın içeriği aşağıdaki gibi olabilir.
Read more…

Aug 2nd, 2011

Java da QRCode Kullanımı

Java Qr Code

Java Qr Code

Yeni nesil barkod formatı karekod barkod olarak geçiyor. Java uygulamarınızda bu format üzerinden çıktı oluşturmak isterseniz aşağıdaki örneği inceleyebilirsiniz. Ben bu örnekte Seam ile birlikte kullandım ancak ilgili metodu istediğiniz platformda kullanabilirsiniz.
Öncelikle itext kullandığımızdan ilgili itext jar larına ihtiyacımız bulunuyor.
Read more…

Jul 31st, 2011

Kurumsal Java Eğitimleri

Uzun zamandir devam eden bireysel ve kurumsal egitimlerimiz konusunda calistiginiz kurumlari bilgilendirebilirseniz sevinirim.
Ozellikle Java teknolojileri odakli egitimler hakkinda www.mergecons.com adresinden bilgi alabilirsiniz.

Egitimlerimizden bazilari

Temel Java
Object Oriented
Design Patterns
Android
Java ME
Hibernate
JPA
JSF
Facelet
RichFaces
Ajax 4 JSF
Spring
JBoss Seam

Egitimlerimize katilan kurumlardan bazilari
Read more…

Seam İle Birden Fazla Veribanına Erişim

Seam Birden Fazla Veritabanı Erişimi

Seam ile iki veya daha fazla veritabanına bağlanmak isterseniz aşağıda bununla ilgili bir örnek bulunmakta. Burada kullandığınız veritabanları Oracle ve MySql gibi farklı veritabanları da olabilir.

Öncelikle container taraflı bir connection kullandığımdan projeAdi-ds.xml dosyasın içerisinde veri kaynağını aşağıdaki gibi iki tane olarak tanımlıyoruz.
Read more…

Jul 30th, 2011

RichFaces ile Entity leri Otomatik Tamamlama

RichFaces

RichFaces

Uygulamalarınızda otomatik tamamlama yapabileceğiniz veri giriş alanları yapmak isterseniz bunun için RichFaces tarafında rich:suggestionbox ı kullanabilirsiniz. Bu bileşen özellikle büyük verilerin tamamlansında dinamik bir özellik taşıyor. Tamamlama client tarafında değil component üzerinde deki bir metodta arama şeklinde yapılıyor.

Aşağıdaki örnekte öncelikli olarak ön yüz de arama yapılıyor. Burada suggetionbox ogrenci isimli bir inputText alanına bağlanıyor. Ancak bu alan içerisinde bir value binding yok. Çünkü bind edeceğimiz nesne bir entity ve direkt atama yapmak gerekiyor. Biz bu işi suggetionbox içerisindeki a4j:support ile hallediyoruz. Burada onselect event i ile izinHome.instance.ogrenci nesnesine seçili nesneyi bind etmiş oluyoruz.
Read more…

Jul 29th, 2011

Seam Auto-flush problemi

Seam üzerinde bir entity de değişiklik yaptığınızda transaction sonunda otomatik olarak update ediliyorsa autoflush özelliğini kapabilirsiniz. Bunun için components.xml deki

Bunun haricinde Conversation scope içerisinde @Begin(flushMode=FlushModeType.MANUAL) diyebilirsiniz

Jul 29th, 2011

Seam @Startup Annotation ı

JBoss Seam

JBoss Seam

Seam de @Startup annotation i ne işe yarar ? Component üzerine @Startup eklerseniz ilgili context inde direkt olarak çağırılır. Bu ne demek ? Öncelikle @Startup annotation ı sadece Session ve Application scope için kullanılır.

Peki Application scope ne zaman çalışır ? Uygulama ilk ayağa kalktığında mı ? Hayır component in ilk çağırımı ile birlikte instance context üzerine alınır ancak Application scope içerisindeki component e @Startup annotation ı eklersek işte bu durumda uygulama ayağa kalktığı anda bu nesne context üzerine alınır. Yani nesne uygulamanın ayağa kalkmasıyla context üzerinde hazır halde bekler.
Read more…

Jul 28th, 2011

Seam – Component Driven Events

Seam Component Event

Seam Component Event

Seam içerisinde bazı tetikleyici mekanizmalar vardır. Bunlardan biridi Seam componentleri içerisinde tanımlanan event mekanizmalarıdır. Bunların yaptığı iş belirli çağırımlarda eventleri tetiklemektir. Bu eventler observer tanımları ile belirlenir.

 

Örnek verecek olursak aşağıda bir observer tanımı bulunmakta

    @Observer("sonDurum")
    public void sonDurum() {
     System.out.println("son durum kontrolu…");
    }

Read more…

Jul 25th, 2011

JSF 1.2 ve JPA ile SelectItem Oluşturma

JSF - Java Server Faces

JSF -JPA SelectItem Olusturma


Eğer JSF 1.2 kullanıyorsanız useçim bileşenlerinde f:selectItems içeriklerini doldurmak için SelectItem tipinde listeleriniz olmalı. Bu durumda bir çok geliştirici önce listeleri seçip ardından for donguleri ile bunları doldurmaya çalışıyor. Ancak Hibernate veya JPA kullanıyorsanız bunu aşağıdaki yöntem ile sorgu içerisinde nesne oluşturarak gerçekleştirebilirsiniz.
Read more…

Jul 19th, 2011