EhCache 보조 스프링 Acegi

8725 단어 ehcache
프로젝트 에서 캐 시 를 통 해 acegi 의 통합 을 원 하기 때문에 Ehcache 를 선 택 했 습 니 다.나중에 teracotta 에 인 수 된 Ehcache 는 간단 한 자바 캐 시 엔진 에서 해결 방안 으로 바 뀌 었 고 프로젝트 자 체 는 다음 과 같은 몇 가지 큰 모듈 로 나 뉘 었 습 니 다.
ehcache
모든 모듈 을 포장 하 였 습 니 다.
ehcache-core
핵심 캐 시 엔진,RMI 복사 모듈,Hibernate 플러그 인
ehcache-terracotta
Terracotta 클 러 스 터 시스템 과 틈새 없 는 통합 에 사용 합 니 다.
ehcache-monitor (beta 2)
기업 급 모니터링 및 개발 관리
ehcache-web
자바 Servlet 용기 의 캐 시,gzip 압축 필터
ehcache-debugger
분포 식 복사 이 벤트 를 추적 하고 디 버 깅 하 는 데 사용 합 니 다.
ehcache-jcache
JSR 107 JCACHE 를 실 현 했 습 니 다.
ehcache-jgroupsreplication
JGroups 멀티캐스트 프레임 워 크 를 사용 하여 캐 시 복사
ehcache-jmsreplication
JMS 로 캐 시 복사
ehcache-openjpa
OpenJPA 에 캐 시 플러그 인 제공
ehcache-server
독립 적 이거 나 WAR 형세 의 RESTful 캐 시 서 비 스 를 제공 합 니 다.
 
통합 을 거 친 Ehcache 도 다음 과 같은 특징 이 있 습 니 다.
·     간단 하고 사용 하기 쉬 운 분포 식 캐 시:EHcache 단일 버 전 API 를 사용 하고 Hibernate 2 급 캐 시 실현 을 직접 지원 하 며 서버 클 러 스 터 지원,데이터베이스 부하 감소
·     통합 성 이 강 함:EhCache 는 일반적으로 Hibernate 캐 시,DAO 캐 시,보안 증빙서류 캐 시(Acegi),웹 캐 시,영구 화 와 분포 식 캐 시 를 사용 합 니 다.
·     효율 적 이 고 신뢰 할 수 있 습 니 다.로 컬 메모리 의 접근 속도,동적 캐 시 데이터 영구 화,클 라 이언 트 는 서버 에서 모두 가로 선형 확장,자동 데이터 블록,가상 캐 시 메모리 관리,무한 캐 시 공간,다단 계 캐 시 동적 균형 을 가 질 수 있 습 니 다.
·     쓰기 지연(Write Behind)과 직접 쓰기(Write Through):
·     자바 분포 식 트 랜 잭 션 의 전면적 인 지원:ehcache 는 설정 을 통 해 캐 시 를 XAResource 로 설정 하고 분포 식 트 랜 잭 션 관리자 가 시작 하 는 분포 식 트 랜 잭 션 을 자동 으로 추가 할 수 있 습 니 다.자주 사용 하 는 분포 식 사무 관리 자 를 자동 으로 감지 할 수 있 습 니 다.Spring,EJB 등의 분포 식 사무 관 리 를 지원 합 니 다.
·     기업 사용자 지원:산업 표준 JMX,시각 화 관리 도구,동적 모니터링,디 버 깅,최적화 지원
Ehcache 자체 가 Hibernate 표준 2 급 캐 시 이기 때문에 단일 컴퓨터 판 Hibernate 2 급 캐 시 를 분포 식 캐 시 로 확장 하 는 것 은 Ehcache 확장 성분 캐 시 처럼 간단 합 니 다.그 우세 도 자동 으로 계승 할 수 있다
 
읽 기와 쓰기 메커니즘(쓰기 Behind,Write Through)
1)    Writer 인 터 페 이 스 를 제공 합 니 다.캐 시 데 이 터 를 데이터베이스 나 다른 저장 매체 에 기록 하 는 것 을 책임 집 니 다.
2)    Write Behind 는 데 이 터 를 캐 시 에 저장 하고 배경 스 레 드 로 캐 시 데 이 터 를 데이터베이스 나 다른 저장 매체 에 비동기 로 저장 할 수 있 습 니 다.캐 시 데이터 가 Terracotta 서버 에 저장 되 어 있 기 때문에 클 라 이언 트 JVM 이 다운 되 어 데이터 가 손실 되 지 않 습 니 다.Write Behind 는 캐 시 를 통 해 데이터 기록 속 도 를 높이 는 효과 적 인 방법 입 니 다.
3)    Write Through 는 데 이 터 를 캐 시 에 기록 한 후 즉시 Writer 를 데이터베이스 에 기록 합 니 다.
 
프로필 설명
EhCache 는 기본 적 인 상황 에서 사용자 가 자신의 프로필 ehcache.xml 또는 ehcache-failsafe.xml 을 제공 하지 않 았 을 때 EhCache 는 자신의 Jar 압축 파일 에 포 함 된 ehcache-failsafe.xml 파일 의 맞 춤 형 정책 에 따라 캐 시 를 관리 합 니 다.사용자 가 classpath 에서 ehcache.xml 또는 ehcache-failsafe.xml 파일 을 제공 하면 EhCache 는 이 파일 을 적용 합 니 다.두 파일 을 동시에 제공 하면 ehCache 는 ehcache.xml 파일 의 설정 을 사용 합 니 다.
EhCache.xml 기본 내용 은 다음 과 같 습 니 다(ehcache 루트 디 렉 터 리 에서 이 파일 을 찾 을 수 있 습 니 다).파일 속성 설명 은 다음 과 같 습 니 다. diskStore:디스크 에 저 장 된 데 이 터 를 지정 합 니 다.l defaultCache:Cache Manager.add("demoCache")를 통 해 Cache 를 만 들 때 EhCache 는 l지정 한 관리 정책 아래 속성 을 사용 합 니 다. max Elements InMemory-메모리 에 캐 시 된 element 의 최대 수 max Elements OnDisk-디스크 에 캐 시 된 element 의 최대 수 l eternal-캐 시 를 설정 한 elements 가 영원히 만 료 되 지 않 을 지 여부 입 니 다.true 라면 캐 시 된 데 이 터 는 항상 유효 합 니 다.false 라면 timeToIdleSeconds,timeToLiveSeconds 에 따라 판단 해 야 합 니 다. overflow ToDisk-메모리 캐 시가 넘 칠 때 만 료 된 element 를 디스크 에 다음 속성 으로 캐 시 할 지 설정 합 니 다. timeToIdleSeconds-EHCache 에 캐 시 된 데이터 가 앞 뒤 두 번 방문 하 는 시간 이 timeToIdleSeconds 의 속성 값 을 초과 하면 이 데 이 터 는 삭 제 됩 니 다. timeToLiveSeconds-캐 시 element 의 유효 수명 diskPersistent-VM 을 다시 시작 할 때 EHCache 의 데 이 터 를 디스크 로 저장 할 지 여부 입 니 다.기본 값 은 false 입 니 다. diskExpiry ThreadIntervalSeconds-디스크 캐 시 청소 스 레 드 실행 간격 은 기본적으로 120 초 입 니 다.120 s 마다 해당 스 레 드 는 EhCache 에서 데 이 터 를 정리 합 니 다. memory StoreEvictionPolicy-메모리 캐 시가 최대 에 이 르 렀 을 때 새로운 element 가 가입 되 었 을 때, 캐 시 에 있 는 element 정책 을 제거 합 니 다.기본 값 은 LRU(최근 최소 사용)이 며,선택 가능 한 것 은 LFU(가장 자주 사용 하지 않 음)와 FIFO(먼저 사용)입 니 다.
 
DEMO
package com.yale.ehcache.demo; 
import net.sf.ehcache.Cache; 
import net.sf.ehcache.CacheManager; 
import net.sf.ehcache.Element; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
/** *            yaleCache   ,       : 
* manager.addCache("yaleCache"); 
*      spring,                            
*/ 
public class EhCacheManagerDemo { 
protected static final Log log = LogFactory.getLog(EhCacheTestDemo.class); 
public static void main(String[] args) { 
CacheManager manager = new CacheManager();
 manager.addCache("yaleCache"); 
 String[] cacheNames = manager.getCacheNames(); 
 for (String cacheName : cacheNames) 
 { 
 log.info("     :" + cacheName); 
 } 
 //     
 Cache cache = manager.getCache("yaleCache"); 
 Element element = new Element("yale1", "    1"); 
 //        ,EhCache                     
 cache.put(element); //          
 log.info(cache.get("yale1").getValue()); 
 element = new Element("yale2", "    2"); 
 cache.put(element); log.info(cache.get("yale2").getValue()); 
 log.info(cache); 
 //          Element   
 log.info(cache.getMemoryStoreSize()); 
 //          Element   
 log.info(cache.getDiskStoreSize()); 
 // “data1”        
 cache.remove("yale1"); 
 log.info(cache.getMemoryStoreSize());
  log.info(cache.getDiskStoreSize()); 
  System.exit(-1); 
  } 
  } 

 
 
통합 spring acegi
웹 응용 프로그램 이 보 호 된 자원 을 요청 할 때마다 인증 관리 자 는 사용자 의 안전 정 보 를 얻 기 위해 호출 됩 니 다.사용자 정 보 를 얻 는 것 이 데이터 베 이 스 를 조회 하 는 것 과 관련 이 있다 면 매번 같은 데 이 터 를 조회 하 는 것 은 성능 에 큰 소 모 를 할 수 있 습 니 다.사용자 정보 가 자주 바 뀌 지 않 는 다 면 첫 번 째 조회 때 사용자 정 보 를 캐 시 하고 후속 조회 에서 캐 시 에서 사용자 정 보 를 직접 가 져 오 는 것 이 좋 습 니 다(저 는 acegi 설정 파일 에 설정 합 니 다).
<!-- EhCacheBasedUserCache EhCache       ,         、              ,Acegi         --> 
<bean id="userCache" class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache"> 
<property name="cache" ref="userCacheBacked" /> 
</bean> 
<!-- EhCacheFactoryBean     Cache     Bean,Cache     CacheManager    --> 
<bean id="userCacheBacked" class="org.springframework.cache.ehcache.EhCacheFactoryBean"> 
<property name="cacheManager" ref="cacheManager" /> 
<property name="cacheName" value="myUserCache" /> <!--    --> 
</bean>
 <!--      ,  CacheManager         Cache   --> 
 <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
  <property name="configLocation" value="/WEB-INF/ehcache-security.xml" /> 
 </bean> 
 <!--       DaoAuthenticationProvider               。          
                 ,  (    )       --> 
 <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> 
 <property name="userDetailsService" ref="userDetailsService"/> 
 <property name="passwordEncoder" ref="passwordEncoder"/> 
 <property name="saltSource" ref="saltSource"/> 
 <property name="userCache" ref="userCache"/> 
 </bean> 

 
 
Dao AuthenticationProvider 는 org.acegisecurity.providers.dao.UserCache 인터페이스의 실현 클래스 지원 을 통 해 사용자 정 보 를 늦 춥 니 다.
저금인터페이스 UserCache 의 방법 은 캐 시 에 사용자 내 역 정 보 를 넣 고 얻 고 삭제 하 는 기능 을 제공 합 니 다.저 희 는 사용자 캐 시 구현 클래스 를 작성 하여 사용자 정보 에 대한 캐 시 를 실현 할 수 있 습 니 다.UserCache 구현 클래스 를 개발 하기 전에 Acegi 가 제공 하 는 두 가지 편리 한 UserCache 구현 클래스 를 먼저 고려 해 야 합 니 다.org.acegisecurity.providers.dao.cache.NullUserCachelog.acegisecurity.providers.dao.cache.EhCacheBased UserCachel
NullUserCache 는 사실상 캐 시 를 하지 않 습 니 다.getUser FromCache 방법 을 언제든지 호출 하면 되 돌아 오 는 값 은 null 입 니 다.Dao AuthenticationProvider 가 사용 하 는 기본 UserCache 구현 입 니 다.
EhCacheBased UserCache 는 더 실 용적 인 캐 시 구현 클래스 입 니 다.이것 은 오픈 소스 프로젝트 ehcache 를 바탕 으로 이 루어 집 니 다.ehcache 는 자바 에 대한 간단 하고 빠 른 캐 시 솔 루 션 이자 Hibernate 의 기본 및 추천 캐 시 방안 입 니 다. 
 
유지보수 도구 developer console 은 개발 자 에 게 전문 적 으로 제공 하 는 클 러 스 터 모니터링,디 버 깅,관리 도구 입 니 다.클 러 스 터 의 토폴로지 정 보 를 볼 수 있 고 클 러 스 터 에서 공 유 된 데 이 터 를 볼 수 있 으 며 통계 정 보 를 얻 을 수 있 으 며 CPU,Heap 사용 상황 을 볼 수 있 으 며 스 레 드 스 택 시험 보기(thread dump)를 얻 고 디 버 깅 정 보 를 수집 할 수 있 습 니 다.Ehcache 와 Hibernate 사용자 에 게 는 캐 시 사용 상황 을 모니터링 하고 캐 시 설정 을 조정 할 수 있 습 니 다.operation center 는 클 러 스 터 관리자 에 게 전용 관리 도 구 를 제공 합 니 다.각 서버 와 클 라 이언 트 의 CPU,Heap 사용 상황 을 감시 하고 공유 데 이 터 를 백업 하 며 서버 나 클 라 이언 트 프로그램 을 닫 는 데 사용 할 수 있 습 니 다. 

좋은 웹페이지 즐겨찾기