کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

درس 38 : آموزش Second Level Cache در Hibernate

آموزش Second Level Cache در Hibernate :

کش Second Level Cache Hibernate از یک کش اشتراکی Common Cache برای تمامی Session object های شی Session factory استفاده می کند. این کش در صورتی که چندین شی Session object از یک Session factory داشته باشید، بسیار کارآمد است. شی Session Factory اطلاعات second level را نگهداری می کند. این شی برای کلیه session object ها عمومی بوده و به صورت پیش فرض فعال نیست.
چندین برنامه مختلف می توانند قابلیت Second Level Cache را در برنامه فعال کنند :

  • EH Cache.
  • OS Cache.
  • Swarm Cache.
  • JBass Cache.

هر یک از اجراهای فوق (implementation)، کارکردهای مختلفی از قابلیت Cache را فراهم می کند. چهار راه برای استفاده از Second level Cache وجود دارد که عبارتند از :

  • read-only : قابلیت Caching فقط برای عملیات خواندنی read-only فعال است.
  • nonstrict-read-write : قابلیت Caching هم برای عملیات خواندن (read) و هم عملیات نوشتن (write) به کار می رود ولی در هر زمان فقط از یکی از عملیات ها می توان استفاده کرد.
  • read-write : قابلیت Caching به صورت هم زمان هم برای عملیات خواندن (read) و هم برای عملیات نوشتن (write) به کار می رود.
  • transactional : قابلیت Caching برای عملیات transaction فعال می شود.

خاصیت Cache-usage را می توان به هر کلاس class یا Collection level در فایل hbm.xml اضافه کرد. به صورت کد زیر :

  
            

جدول زیر نیز نحوه اجرای Second Level Cache و موارد استفاده Cache usage را نشان می دهد :

transactional
read-write
nonstrict-read-write
read-only
Implementation
No
Yes
Yes
Yes
EH Cache
No
Yes
Yes
Yes
OS Cache
No
No
Yes
Yes
Swarm Cache
Yes
No
No
No
JBoss Cache

3 مرحله اضافی که بایستی برای اجرای Second level cache به وسیله EH cache انجام دهید، عبارتند از :

1)2 تنظیم زیر را در فایل Configuration برنامه، فایل hibernate.cfg.xml اضافه کنید.

 
org.hibernate.cache.EhCacheProvider  
true
            

2)تنظیمات مربوط به Cache usage را در فایل hbm اضافه کنید :

 
  
            

3)فایل ehcache.xml را به صورت زیر ایجاد و به پروژه اضافه کنید :

 
  
  
  
  
  
  
            

مثال عملی آموزش Second Level Cache در Hibernate.

برای اجرا و آموزش مثال second level cache در Hibernate ابتدا بایستی فایل های زیر را ایجاد و به پروژه اضافه کنید :

کد فایل Employee.java :

 
package com.javatpoint;  
  
public class Employee {  
private int id;  
private String name;  
private float salary;  
  
public Employee() {}  
public Employee(String name, float salary) {  
    super();  
    this.name = name;  
    this.salary = salary;  
}  
//setters and getters  
}  
            

کد فایل employee.hbm.xml :

  
  
  
            
            
            
            
            
            
            
            
            
            
 
            

در کد مثال فوق، ما از مدل read-only برای Cache only استفاده کرده ایم. Cache usage را نیز می توان در Collection استفاده کرد.

فایل hibernate.cfg.xml :

  
  
  
  
  
  
      
        true  
        update  
        org.hibernate.dialect.Oracle9Dialect  
        jdbc:oracle:thin:@localhost:1521:xe  
        system  
        oracle  
        oracle.jdbc.driver.OracleDriver  
        
        org.hibernate.cache.EhCacheProvider  
         true  
      
      
      
  
  
            

برای اجرای second level cache ، بایستی خاصیت Cache.provider_class را در فایل تنظیمات Configuration file اضافه کنیم.

فایل ehcache.xml

  
  
  
  
  
  
            

برای تعیین خاصیت Property بایستی فایل ehcache.xml را ایجاد کنید.
مقدار defaultCache برای کلیه کلاس های Persistent Class برنامه به کار می رود. شما می توانید Persistent Class را به صورت مستقیم توسط المنت Cache element نیز تعیین کنید.
در مورد خاصیت eternal باید اشاره کرد اگر مقدار خاصیت eternal=”true” قرار گیرد، دیگر نیازی نیست خواص timeToLiveSeconds و timeToIdleSeconds را تعیین کنیم زیرا به صورت اتوماتیک توسط hibernate مدیریت می شود.
تعیین خاصیت eternal=”false” کنترل کامل برنامه را به دست برنامه نویس داده ولی بایستی خواص TimetoLiveSeconds و timeToIdleSeconds را به صورت دستی تعیین کنیم.
خاصیت timeToIdleSeconds تعیین می کند هر شی یا object چند ثانیه می تواند در Cache به صورت Idle باشد.
همچنین خاصیت timeToLiveSeconds تعیین می کند که هر شی یا object چند ثانیه می تواند در حافظه Cache چه به صورت Idle یا Live حضور داشته باشد.

فایل FetchTest.java

package com.javatpoint;  
  
import org.hibernate.Session;  
import org.hibernate.SessionFactory;  
import org.hibernate.cfg.Configuration;  
  
public class FetchTest {  
public static void main(String[] args) {  
Configuration cfg=new Configuration().configure("hibernate.cfg.xml");  
SessionFactory factory=cfg.buildSessionFactory();  
      
    Session session1=factory.openSession();  
    Employee emp1=(Employee)session1.load(Employee.class,121);  
    System.out.println(emp1.getId()+" "+emp1.getName()+" "+emp1.getSalary());  
    session1.close();  
      
    Session session2=factory.openSession();  
    Employee emp2=(Employee)session2.load(Employee.class,121);  
    System.out.println(emp2.getId()+" "+emp2.getName()+" "+emp2.getSalary());  
    session2.close();  
      
}  
}  
            

خروجی :

خروجی برنامه در نهایت به صورت زیر است :

آموزش Second Level Cache در Hibernate

همان طور که در خروجی فوق مشاهده می کنید، hibernate هر query را دو بار اجرا یا fire نکرده است. اگر از Second Level Cache استفاده نکنید، به دلیل این که هر query از session object های متفاوتی استفاده می کند، query برنامه دو بار اجرا می شود.

1395/07/13 3323 1015
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...