PrimeFaces DataTable Lazy özelliğini Hibernate ile Nasıl Kullanabiliriz? (Sayfalama, Filtreleme, Sıralama)

Bir jsf çatısı olan PrimeFaces kütüphanesi içerisinde yer alan datatable bileşenini, verileri listelemek için kullanıyoruz. Fakat büyük veriler sözkonusu olduğunda bu bileşeni standart haliyle kullanmamız durumunda çeşitli performans sorunlarıyla karşılabiliriz. Böylesi bir durumda uygulama sunucularında önemli hafıza kullanımına sebep olacak ve sistemi zorlayacaktır.

Bildiğiniz gibi frontend javascript kütüphanelerinde genel olarak şöyle bir yaklaşım vardır. İki türlü sayfalama (paging) vardır: Sunucu tarafında sayfalama (Server Side Paging) ve İstemci tarafında sayfalama (Client Side Paging). Veriler çok fazla ise sayfalama işleminin istemci tarafına gelmeden veritabanında yapılması kaynak kullanımı ve performans açısından en uygunu olacaktır. İstemci tarafında sayfalamanın küçük boyutlu veriler için uygun olabileceğini düşünebiliriz.

PrimeFaces, datatable bileşeninde standart, varsayılan hali ile melez bir yaklaşım benimsemiş gibi görünüyor. Veriler veritabanından veya başka bir kaynaktan uygulama sunucusuna toplu olarak getiriliyor, bu noktadan istemci tarafına ise sayfa başına düşen kayıt sayısı kadar kayıt dönmektedir. Bu yaklaşımında sakıncaları olacaktır. Büyük boyutlu veriler sözkonusu olduğunda ve hibernate gibi bir orm kullanılırsa fazla hafıza kullanımı ve Select N+1 gibi orm ile ilgili genel sorunlarla karşılaşmamız mümkün görünmektedir.

PrimeFaces bu konuyla ilgili lazy çözümünü önermektedir ki düşünceme göre standart olması gereken yöntem de bu olmalıdır.

Lazy kullanımına yönelik basit bir örnek yaparak nasıl kullanıldığına göz atmış olalım:

Index.xhtml

PersonBean.java

Person.java

PersonBean.java sınıfında tanımlamış olduğumuz load metodu, her sayfaya erişmek istediğimizde otomatik olarak çağrılan kısım. Burda filtreleme, sıralama ve sayfalama ile ilgili parametrelere metodun içerisinden ulaşarak, gerekli hibernate kodlarını çağırabiliyoruz (query.setFirstResult(first) ve query.setMaxResults(pageSize);). Hibernate hql sözdizimine uygun yazdığımız kodu, yine criteria yapısına uygun bir şekilde de yazabiliriz.

 

 

Yorum Gönder

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top