JPA 2.0 두 번째 레벨 캐시의 동적 캐시 제공자

WebSphere® Application Server 동적 캐시 서비스를 JPA(Java Persistence API) 두 번째 레벨(L2) 캐시 제공자로 사용하는 방법을 배웁니다. JPA 2.0은 L2 캐시 인터페이스를 표준화했습니다. WebSphere Application Server는 JPA 표준을 지원합니다. 동적 캐시 서비스는 레벨 2 캐시 제공자로 JPA에 플러그인합니다. L2 캐시는 JPA 애플리케이션의 성능을 개선하며 WebSphere Application Server 환경에 JPA 애플리케이션에 대한 동적 캐시 서비스를 구성하고 모니터할 수 있습니다.

JPA 2.0의 동적 캐시 JPA 두 번째 레벨(L2) 캐시 제공자는 다양한 지속 컨텍스트, 트랜잭션, 사용자 사이에서 엔티티 상태를 공유합니다. 캐싱이 사용되면 지속 컨텍스트에 있는 엔티티가 L2 캐시에서 로드됩니다. L2 캐싱은 현재 로드된 엔티티의 데이터베이스 액세스를 피합니다. L2 캐싱에 대한 자세한 내용은 JPA 2.0 스펙을 참조하십시오.

주의: L2 캐싱은 애플리케이션의 메모리 이용을 증가시키므로 L2 캐시의 크기를 제한하는 것이 중요합니다. 클러스터 환경에서 업데이트된 오브젝트에 대한 데이터가 최신 상태를 유지하지 못할 가능성도 있습니다. 읽기 위주의, 드물게 수정되는 엔티티에 L2 캐싱을 구성하십시오. 자주 그리고 동시에 업데이트되는 엔티티에는 L2 캐시를 권장하지 않습니다.

JPA는 성능을 최대화하기 위해 여러 구성 가능한 L2 캐시를 이용합니다. JPA 데이터 캐시는 EntityManagerFactory 레벨에서 작동하는 지속적 오브젝트 데이터의 캐시입니다. 사용할 경우 데이터 저장소로 이동하기 전에 데이터 캐시를 확인합니다. 오브젝트가 커미트되고 데이터 저장소에서 지속적 오브젝트가 로드될 때 데이터가 캐시에 저장됩니다. 데이터 캐시 외에, JPA는 조회 캐시에 대한 서비스 제공자 인터페이스를 정의합니다.

조회 캐시는 조회 실행으로 리턴되는 오브젝트 ID를 저장합니다. 조회를 실행하면 JPA는 조회 특성과 실행 시 사용된 매개변수에 따라 키를 어셈블하고 캐싱된 조회 결과를 확인합니다. 캐싱된 결과의 오브젝트 ID를 검색하며 결과적인 지속 가능 오브젝트가 리턴됩니다. 그렇지 않으면 데이터베이스에 대해 조회가 실행되고 조회로 로드된 오브젝트 ID가 캐시에 저장됩니다. 조회 실행 시 리턴된 목록이 완전히 순회될 때까지 오브젝트 ID 목록이 캐싱되지 않습니다.

WebSphere 동적 캐시 캐시 제공자는 자체 기능 및 WebSphere Application Server에서 상속한 기능과 같이, 동적 캐시 서비스가 가져오는 부가 가치 기능으로 인해 WebSphere Application Server의 기본 동시 데이터 및 조회 캐시 제공자에 대한 우수한 대안을 제공합니다. 동적 캐시의 장점은 다음과 같습니다.
  • WebSphere Application Server 데이터 복제 서비스(DRS) 및 고가용성(HA) 서비스를 통한 클러스터 분산 캐시 동기화 및 복제.
  • 정교한 고급 DataCache 및 QueryCache 모니터링, 캐시의 튜닝 및 관리. L2 캐시는 사용 가능한 동적 캐시 도구의 전체 에코시스템을 상속합니다.
  • 기본 하위(servant) 영역 z/OS® 지원.
  • 기본 캐시 제공자에 균일하게(더 잘하지는 못해도) 수행합니다.

JPA 표준은 JPA 플러그인을 쉽게 구성하기 위한 메커니즘으로 별명을 제공합니다. JPA 2.0의 동적 캐시 레벨 2 캐시 제공자는 대개 dynacache 별명으로 구성됩니다. JPA의 DataCache 및 QueryCache 특성을 설정하는 데 dynacache 별명을 사용할 수 있습니다. QueryCache 특성이 dynacache를 사용하도록 설정되면 DataCache 특성도 dynacache 별명을 사용합니다. QueryCache 및 DataCache 특성을 서로 다른 유형의 캐시 제공자를 사용하도록 구성할 수 있습니다. QueryCache 특성을 기본값으로 설정하고 DataCache를 동적 캐시를 사용하도록 또는 그 반대로 설정할 수 있습니다. DataCache, QueryCache, DataCacheManager에 WebSphere Application Server 동적 캐시 서비스를 사용하는 것이 이상적입니다. DataCache가 dynacache로 설정되는 경우에는 DRS 및 HAM이 캐시 동기화를 사용하므로 RemoteCommitProvider가 아무 것도 수행하지 않습니다. QueryCache 특성을 DataCache와 별도로 사용할 수는 없습니다. QueryCache 특성은 엔티티 데이터가 캐싱되는 DataCache 특성의 가용성으로 인한 혜택을 받습니다.

JPA 동적 캐시 L2 제공자 구성(기본 메소드)

OpenJPA openjpa.QueryCache, openjpa.DataCache, openjpa.DataCacheManager 특성의 일부 또는 전체를 dynacache로 설정해서 동적 캐시 서비스를 JPA 2.0의 레벨 2 캐시 제공자로 사용하십시오. 이 기본 구성은 대부분의 환경에 적합합니다.
<property name="openjpa.DataCache" value="dynacache(CacheSize=1000)"/>
<property name="openjpa.QueryCache" value="dynacache"/> 
<property name="openjpa.DataCacheManager" value="dynacache"/>
표 1. 특성 이름 및 별명. . 동적 캐시의 완전한 특성 이름 및 별명.
동적 캐시 이름 특성 이름 별명
DataCache 캐시 제공자 com.ibm.ws.cache.openjpa. DynacacheDataCache dynacache
QueryCache 캐시 제공자 com.ibm.ws.cache.openjpa. DynacacheQueryCache dynacache
RemoteCommitProvider com.ibm.ws.cache.openjpa. NoOpRemoteCommitProvider 없음
DataCacheManager com.ibm.ws.cache.openjpa. DynacacheDataCacheManager dynacache

JPA 동적 캐시 L2 제공자 구성(고급 메소드)

지속적 단위의 추가 또는 고급 구성 특성으로 조회 캐시나 JPA 2.0 레벨 2 데이터에 대한 동적 캐시 인스턴스를 구성하십시오(고급 메소드). OpenJPA openjpa.QueryCache, openjpa.DataCache, openjpa.DataCacheManager 특성의 일부 또는 전체를 dynacache로 설정해서 동적 캐시 서비스를 JPA 2.0의 레벨 2 캐시 제공자로 사용하십시오.
<property name="openjpa.DataCache" value="dynacache(CacheName="myJPACache", 
                                                    CacheSize=1000, 
                                                    EnableDiskOffload=true, 
                                                    DiskCacheSizeInGB=4, 
                                                    DiskOffloadLocation=c:\temp, 
                                                    EnableCacheReplication=true)"/> 
표 2. 동적 캐시 특성 이름 및 값. 지속적 단위로 구성할 수 있는 동적 캐시 캐시 인스턴스의 특성.
동적 캐시 사용자 정의 특성 기본값
CacheName default
CacheSize 2000
EnableDiskOffload false
EnableCacheReplication false
DiskCacheSizeInGB 적용할 수 없음
DiskOffloadLocation 적용할 수 없음
ReplicationType 1 , 2 또는 4. 1은 NOT_SHARED를 의미하고, 2는 PUSH, 4는 PUSH_PULL을 의미함
중요사항: 테이블의 특성은 필수 특성이 아닙니다. 특성을 지정하지 않을 경우 동적 캐시 서비스는 대다수의 사용자에게 적합한 기본값을 사용합니다.
다음 예제는 L2 캐시를 자체 분석하기 위한 조치의 동적 캐시 MBean 조작을 보여줍니다.
wsadmin>set mbean [$AdminControl queryNames type=DynaCache,*]

wsadmin> $AdminControl invoke $mbean getCacheIDsInMemory {default \S}
667110A5614-67

wsadmin> $AdminControl invoke $mbean getJPACacheStatistics {OpenBooks openbooks.war OpenBooks default}
HIT_COUNT=0
TOTAL_HIT_COUNT=0
READ_COUNT=5
TOTAL_READ_COUNT=5
WRITE_COUNT=4
TOTAL_WRITE_COUNT=4

wsadmin> $AdminControl invoke $mbean getJPACacheStatistics {OpenBooks openbooks.war OpenBooks default openbook.domain.Customer}
HIT_COUNT=0
TOTAL_HIT_COUNT=0
READ_COUNT=0
TOTAL_READ_COUNT=0
WRITE_COUNT=1
TOTAL_WRITE_COUNT=1
확장 캐시 모니터를 사용하여 JPA 런타임에 캐시에 배치된 키 값과 캐시 ID의 컨텐츠를 볼 수도 있습니다.

클러스터 환경의 동적 캐시 L2 캐시 제공자 사용

고객은 종래의 방식대로 WebSphere Application Server에 캐시 인스턴스를 정의한 후 JPA DataCache 특성 값의 CacheName 특성에서 이름을 참조할 수 있습니다. cacheinstances.properties 파일, DistributedMapFactory 또는 관리 콘솔을 사용하여 오브젝트 캐시 인스턴스를 정의할 수 있습니다.

모든 특성은 선택적이며 지정하지 않을 경우 기본 특성이 사용됩니다. 캐시 인스턴스가 존재하지 않는 경우에는 동적 캐시 서비스가 캐시 인스턴스를 작성합니다. QueryCache Dynacache 인스턴스의 고급 구성은 유사한 방식으로 완료됩니다.

JPA 데이터 캐시는 단일 JVM 및 다중 JVM 환경 모두에서 작동합니다. 다중 JVM 캐싱은 클러스터 WebSphere Application Server, Network Deployment 환경에서 데이터 복제 서비스(DRS)를 통해 수행됩니다.

WebSphere Application Server, Network Deployment 환경에서 데이터 복제 서비스를 통해 복제된 동적 캐시 DataCache 및 QueryCache의 엔티티와 조회의 경우, 복제 도메인을 구성한 후 복제 도메인을 캐시 인스턴스와 연관시키십시오. 또한 지속적 단위의 openjpa.RemoteCommitProvider openJPA 특성을 없음으로 설정해야 합니다.

OpenJPA L2 동적 캐시 인스턴스를 다음과 같이 복제하십시오.
  1. 관리 콘솔에서 복제 도메인을 작성한 후 분배된 캐시를 공유해야 하는 모든 애플리케이션 서버에서 동적 캐시 서비스 패널의 baseCache 캐시 인스턴스를 복제 도메인과 연관시키십시오. 동적 캐시 서비스는 이 복제 도메인을 사용하여 복제 도메인의 여러 서버에서 데이터를 복제합니다.
  2. 캐시 인스턴스의 구성을 정의할 때 enableCacheReplication 특성을 true로 설정해서 캐시 인스턴스를 구성하십시오. replicationType 특성을 지정하지 않으면 캐시 인스턴스가 기본적으로 NOT_SHARED 공유 모드로 구성되어 무효화만 전파됩니다. 캐시 인스턴스를 NOT_SHARED, PUSH, PUSH_PULL 공유 유형으로 구성할 수 있습니다. 이 주제에 대해 더 배우려면 캐시 복제 주제를 참조하십시오.
  3. 복제 도메인의 모든 애플리케이션 서버에서 com.ibm.ws.cache.CacheConfig.createCacheAtServerStartup JVM 사용자 정의 특성을 true로 설정하십시오. 이 사용자 정의 특성은 서버의 JPA 캐시 인스턴스가 보다 초기에, 더 빠르게 부트스트랩하도록 돕습니다.
  4. 공유 라이브러리를 정의한 후 서버 클래스로더와 연관시켜서 애플리케이션 서버의 클래스 경로에서 엔티티 클래스를 사용 가능하게 하십시오. 이 단계는 동적 캐시 서비스 및 DRS가 복제된 엔티티 오브젝트를 직렬화 해제하는 데 필요합니다. 공유 라이브러리에 대한 자세한 정보는 공유 라이브러리 콜렉션, 공유 라이브러리 관리, 공유 라이브러리 및 서버 연관 주제를 참조하십시오.
  5. openjpa.RemoteCommitProvider를 없음으로 설정하십시오.
JPA 2.0에 포함된 기타 RemoteCommitProvider 구현 특히, 다음 구현을 사용할 수도 있습니다.
  • org.apache.openjpa.event.SingleJVMRemoteCommitProvider("sjvm" 별명으로 구성됨)
  • org.apache.openjpa.event.TCPRemoteCommitProvider
  • org.apache.openjpa.event.JMSRemoteCommitProvider
JPA 문서에서 원격 및 오프라인 조작에 대해 더 읽어보십시오.
주의: 분산 또는 클러스터 환경에서의 NoOp RemoteCommitProvider 사용 및 JPA 데이터와 QueryCache 오브젝트의 복제를 위한 DRS로 동적 캐시를 구성하십시오.

JPA L2 캐시 문제점 해결

동적 캐시 서비스를 JPA 캐시 제공자로 사용할 때 로그 파일에서 다음 메시지를 찾아보십시오.
# Significant dynamic cache OpenJPA messages in the SystemOut.log file
DYNA1081I: OpenJPA L2 DataCache Dynacache instance \"{0}\" created or retrieved successfully for persistent unit \"{1}\".

# Applicable only if QueryCache is enabled 
DYNA1080I: OpenJPA L2 QueryCache Dynacache instance \"{0}\" created or retrieved successfully for persistent unit \"{1}\".
참고: 이 주제는 하나 이상의 애플리케이션 서버 로그 파일을 참조합니다. 권장되는 대안은 분배 및 IBM® i 시스템에서 SystemOut.log, SystemErr.log, trace.logactivity.log 파일을 사용하는 대신 HPEL(High Performance Extensible Logging) 로그를 사용하고 인프라를 추적하도록 서버를 구성하는 것입니다. 원시 z/OS 로깅 기능과 연계하여 HPEL을 사용할 수도 있습니다. HPEL을 사용하는 경우 서버 프로파일 바이너리 디렉토리의 LogViewer 명령행 도구를 사용하여 모든 로그에 액세스하고 정보를 추적할 수 있습니다. HPEL 사용에 대한 자세한 정보는 HPEL을 사용한 애플리케이션 문제점 해결 정보를 참조하십시오.

주제 유형을 표시하는 아이콘 참조 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rdyn_openjpa
파일 이름:rdyn_openjpa.html