DistributedMap 또는 DistributedObjectCache 인터페이스를 사용하여,
Java™ EE(Java Platform, Enterprise Edition) 애플리케이션과
시스템 컴포넌트는 오브젝트에 대한 참조를 캐시에 저장해서
Java 오브젝트를 캐싱하고 공유할 수 있습니다.
이 태스크 정보
DistributedMap 및 DistributedObjectCache 인터페이스는 동적 캐시에 대한
단순 인터페이스입니다. 이 인터페이스를 사용하여
Java EE 애플리케이션과 시스템 컴포넌트는
오브젝트에 대한 참조를 캐시에 저장해서 Java
오브젝트를 캐싱하고 공유할 수
있습니다. 동적 캐시 서비스가 관리 콘솔에서 사용되면 기본 동적 캐시 인스턴스가
작성됩니다. 이 기본 인스턴스는
services/cache/distributedmap 이름을 사용하여 글로벌 JNDI(Java
Naming and Directory Interface) 네임스페이스로
바인딩됩니다.
동일한 JVM(Java
Virtual Machine)의 여러 DistributedMap 및 DistributedObjectCache 인스턴스로
애플리케이션은 필요에 따라 캐시 인스턴스를 개별적으로
구성할 수 있습니다. DistributedMap 인터페이스의
각 인스턴스마다 자체 특성이 있습니다.
중요사항: 사용자 정의
오브젝트 키를 사용 중인 경우 클래스를 공유 라이브러리에
두어야 합니다. 셀, 노드 또는 서버 레벨에서
공유 라이브러리를 정의할 수 있습니다.
그런 다음 각 서버에서 클래스 로더를 작성하고 정의한 공유 라이브러리와
이를 연관시키십시오. 자세한 정보는
공유 라이브러리 관리 및
클래스 로더 설정의 내용을 참조하십시오.
애플리케이션을
클러스터에 복제를 사용하여 배치할 때에는 JAR 파일을 공유 라이브러리에
두십시오. 복제만 켜면 공유 라이브러리가 필요하지 않지만,
캐시 키나 캐시 값과 같은 애플리케이션별 Java 오브젝트를 사용하는 경우에는
이 Java 클래스를 공유 라이브러리에
두어야 합니다. 이 값을
공유 라이브러리에 두지 않으면 데이터 복제 서비스(DRS)가 수신측에서 이 오브젝트를
직렬화 해제하려 시도할 때 ClassNotFound 예외가
발생합니다.
클러스터된 환경에서는, 캐시에 둔 컨텐츠를
클러스터의 다른 서버와 공유할 수 있습니다. 컨텐츠를 디스크에 오프로드할 수도 있습니다. 캐싱된 오브젝트를
공유하거나 디스크에 오프로드하려면 특정 오브젝트를 직렬 가능하게
해야 합니다. 캐시에 둔
오브젝트가 직렬화 불가능한 경우 이 오브젝트에 대한 공유 정책을
공유하지 않음을 지정해야 합니다. DistributedMap 인터페이스
DistributedMap 인터페이스에
캐싱된 오브젝트에 대한 공유 정책을 지정하는 방법에 대한 정보가
있습니다. 직렬화가 가능하지 않은 오브젝트에
공유하지 않음 이외의 공유 정책을 지정할 경우 시스템 성능이 저하될 수 있습니다.
캐시 인스턴스를 구성하고
사용하기 위한 네 가지 방법이 있습니다.
- 기본 오브젝트 캐시 구성(프로시저의 메소드 1)
- 사용자 정의 오브젝트 캐시 작성 및 구성(프로시저의 메소드 3)
- cacheinstances.properties 파일을 사용하여 사용자 정의 오브젝트 캐시
작성 및 구성(프로시저의 메소드 4)
- 자원 참조 사용(프로시저의 메소드 5)
- 메소드 1 - 기본 캐시 인스턴스를 구성하십시오.
서블릿
캐싱이 사용되면 서버가 시작할 때 기본 서블릿 캐시
인스턴스(JNDI 이름: services/cache/basecache)가
작성됩니다. 기본 오브젝트 캐시 인스턴스(JNDI 이름: services/cache/distributedmap)는
서버가 시작할 때 항상 작성됩니다.
- 관리 콘솔에서 서버 > 서버 유형 > WebSphere Application
Server > server_name > 컨테이너 서비스 > 동적 캐시 서비스를
선택하십시오.
- 기타 캐시 설정을 구성하십시오. 자세한 정보는 동적 캐시 서비스
설정 기사의 내용을 참조하십시오.
- 적용 또는 확인을 클릭하십시오.
- WebSphere® Application Server를 다시 시작하십시오.
다음 코드를 사용하여 캐시 인스턴스를 찾아볼 수 있습니다.
InitialContext ic = new InitialContext();
DistributedMap dm1 = (DistributedMap)ic.lookup("services/cache/instance_one");
DistributedMap dm2 = (DistributedMap)ic.lookup("services/cache/instance_two");
// or
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- 메소드 2 - 서블릿 캐시 인스턴스를 구성하십시오.
서블릿
캐시 인스턴스는 기본 서블릿 캐시 외에 동적 캐시가
데이터를 저장, 분배, 공유할 수 있는 위치입니다. 서블릿 캐시 인스턴스를 사용하여
애플리케이션은 보다 유연하고 우수하게 캐시 자원의 성능을
조정할 수 있습니다. 캐시 인스턴스에
지정된 JNDI(Java™ Naming and Directory Interface) 이름은
cachespec.xml 구성 파일에 있는
<cache instance> 태그의 이름 속성으로 맵핑됩니다.
문제점 방지: 서블릿 캐시는 검색할 수 없습니다.
검색 시도가 실패하며 널이 리턴됩니다.
gotcha
- 관리 콘솔에서 자원 > 캐시 인스턴스 > 서블릿
캐시 인스턴스를 클릭하십시오.
- 다음과 같이 범위를 입력하십시오.
- CELL SCOPE를 지정하여 셀 내의 모든 서버에 사용 가능한
캐시 인스턴스를 보고 구성하십시오.
- NODE SCOPE를 지정하여 특정 노드의 모든 서버에 사용 가능한 캐시 인스턴스를
보고 구성하십시오.
- SERVER SCOPE를 지정하여 특정 서버에만 사용 가능한 캐시 인스턴스를
보고 구성하십시오.
- 이름 필드에서 자원의 필수 표시 이름을
입력하십시오.
- 자원의 JNDI 이름을 입력하십시오. cachespec.xml 구성 파일에서
<cache-instance> 태그의 속성 필드에
이 이름을 지정하십시오. 이 태그는 캐시 항목을 저장할
특정 캐시 인스턴스를 찾습니다.
- 기타 캐시 설정을 구성하십시오. 자세한 정보는
동적 캐시 서비스 설정 기사의 내용을 참조하십시오.
- 적용 또는 확인을 클릭하십시오.
- 옵션: 이 인스턴스에 대한
추가 사용자 정의 특성을 설정하려면 자원 > 캐시 인스턴스 > 서블릿
캐시 인스턴스 > servlet_cache_instance_name>
사용자 정의 특성 > 새로 작성을
클릭하십시오.
- 옵션: 이름 필드에 사용자 정의 특성의 이름을
입력하십시오. 자세한 정보는 동적 캐시
사용자 정의 특성 기사의 내용을 참조하십시오.
중요사항: 캐시
인스턴스별로 표시된 범위의 사용자 정의 특성을
사용하십시오. 예를 들어, 이름 필드에 createCacheAtServerStartup을
입력하십시오.
- 값 필드에서 특성의 올바른 값을 입력하십시오.
- 특성을 저장하고 WebSphere Application Server를 다시 시작하십시오.
- 메소드 3 - 오브젝트 캐시 인스턴스를 구성하십시오.
오브젝트
캐시 인스턴스는 기본 오브젝트 캐시 외에, 동적인 캐시가 Java EE(Java™ Platform, Enterprise Edition)
애플리케이션에 대한 데이터를 저장, 분배, 공유할 수
있는 위치입니다. 캐시 인스턴스를 사용해서
애플리케이션의 유연성과 캐시 자원의 성능 조정 기능을
개선하십시오. DistributedObjectCache
프로그래밍 인터페이스를 사용하여 캐시 인스턴스에 액세스하십시오. DistributedObjectCache
API(Application Programming Interface)에 대한 자세한 정보는
API 문서의 내용을 참조하십시오.
주의: 메소드 3은
프로시저 섹션의 초기에 나열된 메소드 1이나 2의 확장입니다. 먼저
메소드 1 또는 메소드 2를 사용하십시오.
다음과 같이
오브젝트 캐시 인스턴스를 작성하고 구성하십시오.
- 관리 콘솔에서 자원 > 캐시 인스턴스 > 오브젝트
캐시 인스턴스를 클릭하십시오.
- 범위를 입력하십시오.
- CELL SCOPE를 지정하여 셀 내의 모든 서버에 사용 가능한
캐시 인스턴스를 보고 구성하십시오.
- NODE SCOPE를 지정하여 특정 노드의 모든 서버에 사용 가능한 캐시 인스턴스를 보고 구성하십시오.
- SERVER SCOPE를 지정하여 특정 서버에만 사용 가능한 캐시 인스턴스를
보고 구성하십시오.
- 이름 필드에서 자원의 필수 표시 이름을
입력하십시오.
- 자원의 JNDI 이름을 입력하십시오. 이 캐시
인스턴스에 대한 참조를 검색할 때 이 이름을
사용하십시오. 결과는 DistributedMap 오브젝트를
리턴합니다.
- 기타 캐시 설정을 구성하십시오. 자세한 정보는
동적 캐시 서비스 설정 기사의 내용을 참조하십시오.
- 적용 또는 확인을 클릭하십시오.
- 옵션: 이 인스턴스에 대한 추가 사용자 정의 특성을
설정하려면 자원 > 캐시 인스턴스 > 오브젝트
캐시 인스턴스 > servlet_cache_instance_name > 사용자 정의
특성 > 새로 작성을 클릭하십시오.
- 옵션: 이름 필드에 사용자 정의 특성의 이름을
입력하십시오.
중요사항: 캐시
인스턴스별로 표시된 범위의 사용자 정의 특성을
사용하십시오. 예를 들어, 이름 필드에 createCacheAtServerStartup을
입력하십시오.
- 값 필드에서 특성의 올바른 값을 입력하십시오.
- 특성을 저장하고 WebSphere Application Server를 다시 시작하십시오.
관리 콘솔에서 JNDI 이름, services/cache/instance_one
및 services/cache/instance_two로 두 개의
캐시 인스턴스를 정의한 경우 다음 코드를 사용하여 캐시 인스턴스를
검색할 수 있습니다. InitialContext ic = new InitialContext();
DistributedMap dm1 = (DistributedMap)ic.lookup("services/cache/instance_one");
DistributedMap dm2 = (DistributedMap)ic.lookup("services/cache/instance_two");
// or
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- 메소드 4 - cacheinstances.properties 파일을 사용하여 캐시 인스턴스를
구성하십시오.
cacheinstances.properties
파일을 사용하여 캐시 인스턴스를 작성하고 엔터프라이즈 아카이브(EAR) 파일에
이 파일을 패키징할 수 있습니다. cacheinstances.properties
파일 기사의 테이블 정보를 이름, 값, 설명의 참조로
사용하십시오.
첫 번째 행은 캐시 인스턴스 이름을
정의합니다. 그 다음 행은
사용자 정의 특성을 정의합니다. 형식은 다음과 같습니다.
cache.instance.x=InstanceName
cache.instance.x.customPropertyName=customPropertyValue
여기서:
다음은 cacheinstances.properties 파일을
사용하여 추가 캐시 인스턴스를 작성할 수 있는 방법의 예입니다.
cache.instance.0=/services/cache/instance_one
cache.instance.0.cacheSize=1000
cache.instance.0.enableDiskOffload=true
cache.instance.0.diskOffloadLocation=${app_server_root}/diskOffload
cache.instance.0.flushToDiskOnStop=true
cache.instance.0.useListenerContext=true
cache.instance.0.enableCacheReplication=false
cache.instance.0.disableDependencyId=false
cache.instance.0.htodCleanupFrequency=60
cache.instance.1=/services/cache/instance_two
cache.instance.1.cacheSize=1500
cache.instance.1.enableDiskOffload=false
cache.instance.1.flushToDiskOnStop=false
cache.instance.1.useListenerContext=false
cache.instance.1.enableCacheReplication=true
cache.instance.1.replicationDomain=DynaCacheCluster
cache.instance.1.disableDependencyId=true
이전 예는 instance_one 및 instance_two라는 두 개의
캐시 인스턴스를 작성합니다. 캐시 instance_one은
캐시 항목 크기가 1,000이고 instance_two는 캐시 항목
크기가 1,500입니다. 디스크 오프로드가
instance_one에서 사용되고 instance_two에서는 사용되지
않습니다. 리스너 컨텍스트는
instance_one에서 사용되고 instance_two에서는 사용되지 않습니다. 중지 시 디스크에 비우기는
instance_one에서 사용되고 instance_two에서는 사용되지 않습니다. 캐시 복제는
instance_two에서 사용되고 instance_one에서는 사용되지 않습니다. instance_two의
데이터 복제 도메인의 이름은 DynaCacheCluster입니다. 종속성 ID 지원은
instance_two에서 사용되지 않습니다.
cacheinstances.properties
파일을 Application Server나 애플리케이션 클래스 경로에 두십시오.
예를 들어, 애플리케이션 WAR 파일, WEB-INF\classes
디렉토리나 server_root\classes 디렉토리를 사용할 수 있습니다. 특성 파일의
첫 번째 항목(cache.instance.0)은 글로벌 네임스페이스의
캐시 인스턴스에 대한 JNDI 이름을 지정합니다.
다음 코드를 사용하여
캐시 인스턴스를 찾아볼 수 있습니다.
InitialContext ic = new InitialContext();
DistributedMap dm1 =
(DistributedMap)ic.lookup("services/cache/instance_one");
DistributedMap dm2 =
(DistributedMap)ic.lookup("services/cache/instance_two");
// or
InitialContext ic = new InitialContext();
DistributedObjectCache dm1 = (DistributedObjectCache)ic.lookup("services/cache/instance_one");
DistributedObjectCache dm2 = (DistributedObjectCache)ic.lookup("services/cache/instance_two");
- 메소드 5: 자원 참조.
중요사항: 이 메소드는
프로시저 섹션의 처음에 나열된 메소드 3과 4의 확장입니다. 먼저 메소드 3 또는
메소드 4를 사용하십시오.
모듈 배치
디스크립터(web.xml 및 ibm-web-bnd.xmi 파일)에 resource-ref를 정의하고
java:comp 네임스페이스를 사용하여 캐시를 검색하십시오.
다음 resource-ref 예는 web.xml을 사용합니다.
<resource-ref id="ResourceRef_1">
<res-ref-name>dmap/LayoutCache</res-ref-name>
<res-type>com.ibm.websphere.cache.DistributedMap</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref id="ResourceRef_2">
<res-ref-name>dmap/UserCache</res-ref-name>
<res-type>com.ibm.websphere.cache.DistributedMap</res-type>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
다음 resource-ref
예는 ibm-web-bnd.xmi를 사용합니다.
<?xml version="1.0" encoding="UTF-8"?>
<webappbnd:WebAppBinding xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"
xmlns:webappbnd="webappbnd.xmi"
xmlns:webapplication="webapplication.xmi" xmlns:commonbnd="commonbnd.xmi"
xmlns:common="common.xmi"
xmi:id="WebApp_ID_Bnd" virtualHostName="default_host">
<webapp href="WEB-INF/web.xml#WebApp_ID"/>
<resRefBindings xmi:id="ResourceRefBinding_1"
jndiName="services/cache/instance_one">
<bindingResourceRef href="WEB-INF/web.xml#ResourceRef_1"/>
</resRefBindings>
<resRefBindings xmi:id="ResourceRefBinding_2"
jndiName="services/cache/instance_two">
<bindingResourceRef href="WEB-INF/web.xml#ResourceRef_2"/>
</resRefBindings>
</webappbnd:WebAppBinding>
지원된 구성: IBM®
확장 및 바인딩 파일의 경우 .xmi 또는 .xml 파일 이름 확장자는
Java EE 5 이전 애플리케이션이나 모듈을 사용하는지 또는
Java EE 5 이상 애플리케이션이나 모듈을 사용하는지 여부에 따라 달라집니다. IBM
확장 또는 바인딩 파일 이름은 ibm-*-ext.xmi 또는 ibm-*-bnd.xmi입니다.
여기서, *는 확장 또는 바인딩 파일의 유형입니다(예:
app, application, ejb-jar 또는 web). 다음 조건이 적용됩니다.
- 버전 5 이전의 Java EE 버전을 사용하는 애플리케이션 또는 모듈의 경우,
파일 확장자는 .xmi여야 합니다.
- Java EE 5 이상을 사용하는 애플리케이션 또는 모듈의 경우, 파일 확장자는
.xml이어야 합니다. .xmi 파일이 애플리케이션 또는 모듈에 포함된 경우 제품에서 .xmi 파일을 무시합니다.
그러나 Java EE 5 이상 모듈은 Java EE 5 이전 파일이 포함되어 있고
.xmi 파일 이름 확장자가 사용된 애플리케이션에 있을 수 있습니다.
ibm-webservices-ext.xmi, ibm-webservices-bnd.xmi, ibm-webservicesclient-bnd.xmi, ibm-webservicesclient-ext.xmi,
ibm-portlet-ext.xmi 파일은
.xmi 파일 확장자를 계속 사용합니다.
sptcfg
다음
예는 resource-ref를 검색할 방법을 보여줍니다.
InitialContext ic = new InitialContext();
DistributedMap dm1a =(DistributedMap)ic.lookup("java:comp/env/dmap/LayoutCache");
DistributedMap dm2a =(DistributedMap)ic.lookup("java:comp/env/dmap/UserCache");
// or
DistributedObjectCache dm1a =(DistributedObjectCache)ic.lookup("java:comp/env/dmap/LayoutCache");
DistributedObjectCache dm2a =(DistributedObjectCache)ic.lookup("java:comp/env/dmap/UserCache");
이전 resource-ref 예는
java:comp/env/dmap/LayoutCache를 /services/cache/instance_one으로 맵핑하고
java:comp/env/dmap/UserCache를 /services/cache/instance_two로 맵핑합니다.
예에서 DistributedMap dm1 및 dm1a는 동일한 오브젝트입니다.
DistributedMap dm2 및 dm2a는 동일한 오브젝트입니다.
- 메소드 6: JVM(Java Virtual
Machine) 캐시 설정.
모든 캐시 인스턴스에
영향이 미치도록 사용자 정의 특성을 글로벌하게 설정할 수 있습니다. 이는 메소드 1, 메소드 2, 메소드 3의 설정을
겹쳐쓰지만 메소드 4(cacheinstances.properties)의 설정은 겹쳐 쓰지
않습니다. 다음과 같이 캐시 인스턴스를 글로벌하게
구성하십시오.
- 관리 콘솔에서 서버 > 서버
유형 > WebSphere Application Server > server_name >
Java 및 프로세스 관리 > 프로세스 정의 > JVM(Java Virtual
Machine) > 사용자 정의 특성 > 새로 작성을
클릭하십시오.
- 이름 필드에 사용자 정의 특성의 이름을 입력하십시오. 자세한 정보는
동적 캐시 사용자 정의 특성 기사의 내용을
참조하십시오. 사용자 정의 특성 이름을 찾으면 com.ibm.ws.cache.CacheConfig 접두부를
사용자 정의 특성 이름의 앞에 추가하십시오. 예를 들어, 사용자 정의 특성 이름이
createCacheAtServerStartup이면 이름 필드에
com.ibm.ws.cache.CacheConfig.createCacheAtServerStartup을 입력하십시오.
- 값 필드에서 특성의 올바른 값을 입력하십시오.
- 특성을 저정하고 WebSphere Application Server를 다시
시작하십시오.