• Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim
KodEdu
  • Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim

EclipseLink JPA : L2 Cache Stratejileri

  • Posted by Kodedu
  • Categories backend, Genel, Uncategorized, Yazılar, Yazılım
  • Date 10 Ekim 2012

JPA (Java Persistence API) standardının referans uygulayıcı kütüphanesi olan EclipseLink 2. seviye cache mekanizmasını (shared cache de denebilir) varsayılan olarak sağlamaktadır. 1. seviye cache ise EntityManager tarafından yönetimli halde bulunan entity nesneleri oluşturmaktadır.

Veritabanına persist edilen ve okunan herbir entity kaydı varsayılan olarak 2. seviye cache alanına aktarılırlar. Bu sayede tekrar eden entity istekleri öncelikli olarak bu 2. önbellek alanına bakılarak kontrol edilir, nesne burada varsa veritabanına uğramadan istek bu özel alandan karşılanır.

Olağan entity kayıtları gibi veritabanından JPQL sorgularıyla elde edilen kayıt(lar) da 2. seviye cache alanında tutulurlar.

EntityManager tarafından anabellekte bulundurulan entity nesnelerinin ömrü, ait olduğu EntityManager nesnesine ait Transaction sonlandıktan sonra bitebilir ve bu nesneler farklı EntityManager instance’ ları tarafından paylaşılabilir değildir.

Oysa 2. seviye önbellek alanında bulunan entity nesneleri, ait olduğu ortam (EntityManagerFactory veya Server) içinde tüm kullanıcılar için paylaşımlı olarak kullanılırlar. Bu sebeple zaten L2 cache’ e “shared cache” de denmektedir.

https://blogs.oracle.com/carolmcdonald/entry/jpa_caching

Olağan cache mekanizmalarında olduğu gibi, EclipseLink kütüphanesinin sağladığı cache mekanizmasında da, cache ortamında tutulacak nesnelerin sayısı, ne kadar süre yaşayacağı (expire time), cache strateji tipi gibi bilgiler yapılandırılabilir haldedir.

Bu yapılandırmalar entity sınıfı bazında ya da genel olarak tüm entity nesneleri üzerine hakim olur şekilde persisten.xml konfigürasyon dosyasında yapılabilir.

EclipseLink için paylaşımlı L2 cache konfigürasyonu şu şekildedir.

Özellik Açıklama Varsayılan
type Cache strateji tipini tanımlar CacheType.SOFT_WEAK
size Cache alanı başlangıç boyutu 100
shared L2 cache aktive-deactive etme true
expiry Entity nesnesinin ömrü -1 ( ölümsüz : )
Dahası için >>

Şimdi bu tabloda yer alan özellikleri tek tek açıklamaya çalışalım.

type: 2. seviye cache için kullanılacak stratejiyi belirler. CacheType sınıfının içinde yer alan statik alanlarla tanımlanırlar. Bu alanlar;

  • CacheType.Full : Uygulama tarafından okunan tüm entity nesneleri bu alanda saklanır. 2. seviye cache ile başlangıç boyutu tanımlanabilmesine karşın, azami boyut seçilememektedir. Bu cache stratejisinin özelliği cache alanında bulunan entity nesneleri kesinlikle Çöp toplayıcı tarafından bellekten temizlenmezler. Büyük boyutlu entity nesneleri için bu özellik bir tehdit oluşturur. Fakat ufak boyutlu, belirli sayıda ve bellek alanını tehdit etmeyecek nesneler için bu strateji kullanılabilir.
  • CacheType.HardWeak : HardWeak stratejisinde üzerinde sık işlem yapılan entity nesneleri (Most Recantly Used) sabit boyutlu özel bir alanda saklanırlar ve bu alana Çöp toplayıcı müdahale etmez. Genel cache alanına ise Çöp toplayıcı istediği zaman müdahale edebilir haldedir.
  • CacheType.NONE : Shared cache devre dışı bırakır.
  • CacheType.Soft : Uygulama tarafından okunan tüm entity nesneleri 2. seviye önbellekte tutulurlar. Herhangi bir referansa bağlı olmayan nesneler, JVM kullanılabilir bellek alanı azaldığında Garbage Collector tarafından temizlenir.
  • CacheType.SoftWeak : SoftWeak stratejisinde üzerinde sık işlem yapılan entity nesneleri (Most Recantly Used) sabit boyutlu özel bir alanda saklanırlar ve bu alana Çöp toplayıcı bellek boyutu azaldığında müdahale edebilir. Genel cache alanına ise Çöp toplayıcı istediği zaman müdahale edebilir.
  • CacheType.Weak : Uygulama tarafından okunan tüm entity nesneleri cache alanında saklanır. Fakat tüm entity nesneleri Çöp toplayıcının elinin altındadır. Çöp toplayıcı bellek bakımından strese düşmeden de bu nesneleri yok edebilir.

size : Paylaşımlı cache alanının varsayılan başlangıç boyutu 100’dür ve bu sınır aşıldığında cache boyutu iki katına yükseltilir.

shared : true ise shared cache kullanılır, false ise her bir kullanıcı için izole edilmiş bir cache alanı yapılandırır. Yani false değeri L2 cache’i devredışı bırakır.

expiry : Cache alanında tutulan entity nesnesinin ömrünü tanımlar. Varsayılan olarak expire olma süresi -1’dir (süresiz). Bu özellik milisaniye türevinden bir değerle yapılandırılabilir.

Yapılandırma örnekleri

Daha önce de belirtildiği üzere L2 cache yapılandırmaları persistence.xml yapılandırma dosyasında veya çeşitli notasyon tanımlayıcıylarıyla yapılabilmektedir. Aşağıda persistence.xml içinde yapılan örnek bir yapılandırma bulunmaktadır.

<persistence-unit name="L2Cache_PU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>com.usta.Musteri</class>
<class>com.usta.Siparis</class>

<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/l2db"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>

<property name="eclipselink.cache.type.default" value="SoftWeak"/>
<property name="eclipselink.cache.shared.default" value="true"/>
<property name="eclipselink.cache.size.default" value="500"/>

</properties>
</persistence-unit>

Varsayılan olarak persistence-unit bileşeni içine eklenmiş entity sınıfları L2 cache ortamında tutulurlar. Eğer bir entity nesnesinin L2 cache ortamında bulundurulması istenmiyorsa @Cacheable notasyonu size yardımcı olabilir.

@Entity
@Cacheable(false)
public class Musteri implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

     ...
     ...

 }

Entity sınıfı bazında L2 cache yapılandırması için ise @Cache notasyonu kullanılabilir.

@Entity
@Cache(isolation= CacheIsolationType.SHARED,
        type= CacheType.FULL,
        expiry=10000,
        size=300
        ) 
public class Musteri implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

     ...
     ...

}

Görüşmek dileğiyle..

Tag:eclipselink, jpa, L2 cache

  • Share:
author avatar
Kodedu

Previous post

Webiner videosu : Javascript ve Rest iletişimi
10 Ekim 2012

Next post

JPQL sorgulama dili
13 Ekim 2012

You may also like

api-logo
Swagger Nedir? Neden kullanılır?
10 Ekim, 2018
spring-cli-logo
Spring CLI ile Spring Boot Projeleri Hazırlamak
21 Ağustos, 2017
eureka_architecture
Spring Cloud Netflix ve Eureka Service Discovery
3 Temmuz, 2017

Leave A Reply Cevabı iptal et

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

E-posta listesine kayıt olun!






Gözde yazılar

JPA 2.1 Type Converter
19Nis2014
Distributed Map-Reduce Model using Java 8 and Java EE 7 WebSocket
16Kas2014
Online React.js Eğitimi ardından (15-25 Mayıs 2017)
31May2017
Jax-RS 2 and LongPolling based Chat Application
25Haz2013

Son Yazılar

  • Java’da Record’lar 27 Ocak 2020
  • Swagger Nedir? Neden kullanılır? 10 Ekim 2018
  • Spring CLI ile Spring Boot Projeleri Hazırlamak 21 Ağustos 2017
  • Spring Cloud Netflix ve Eureka Service Discovery 3 Temmuz 2017
  • Online React.js Eğitimi ardından (15-25 Mayıs 2017) 31 Mayıs 2017

Son Yorumlar

  • Coupling ve Cohesion Kavramları Nedir? için Hilal
  • Naïve Bayes Sınıflandırma Algoritması için Rahman Usta
  • Naïve Bayes Sınıflandırma Algoritması için Mete
  • YAML Nedir? Neden YAML Kullanmalıyız? için kara
  • JWT (JSON Web Tokens) Nedir? Ne işe yarar? için Furkan

Get Java Software

Arşivler

Bizi takip edin

React.js Eğitimi Başlıyor
11-22 Eylül, 2017
Eğitmen
Rahman Usta
İletişim

merhaba@kodedu.com

  • Hakkında
  • Gizlilik Politikası
  • İletişim
  • Referanslar
Kodedu Bilişim Danışmanlık
Cemil Meriç mah. Çelebi sok.
No:16/3 Ümraniye/İSTANBUL
Tel: 0850 885 38 65
Alemdağ V.D.: 8960484815

KODEDU © Tüm hakları saklıdır.