타이머 서비스에 대한 데이터 캐시

EJB 타이머 서비스에 대한 데이터베이스 액세스와 SQL 호출을 최적화하려는 경우, 애플리케이션 서버가 그 타이머에 대한 데이터를 캐시하도록 할 수 있습니 다. 캐시를 사용하면, 애플리케이션 서버가 데이터가 필요할 때마다 데이터베이스를 조회할 필요 없이 타이머 데이터를 재사용할 수 있게 합니다.

이 태스크 정보

애플리케이션 서버가 EJB(Enterprise JavaBeans) 타이머 서비스에 대한 데이터를 캐시할 수 있도록 함으로써, 사용자는 타이머 인터페이스의 메소드를 호출하기 위해 생성되는 SQL 명령문의 수를 최소화할 수 있습니다. 이 기능을 사용하면, 사용자가 그 타이머 오브젝트를 작성할 때 타이머에 대한 데이터는 타이머 오브젝트에서 캐시됩니다.

엔터프라이즈 Bean에 대한 스펙은 javax.ejb.Timer 인터페이스로의 각 호출에 대해 데이터베이스로의 호출이 만들어지는 것을 요구함으로써, 애플리케이션은 EJB 타이머가 사용 가능한 최신의 데이터를 사용할 수 있도록 해줍니다. 이 메소드가 종종 호출되거나 이 메소드 중 하나를 호출하는 EJB 타이머가 많은 경우, 애플리케이션 서버는 아주 짧은 시간에 많은 SQL 명령을 생성할 수 있습니다. 일부의 경우, 요구사항에 대한 강한 집착은 성능 저하로 인해 보증되는 것보다 더 많은 오버헤드를 초래한다는 것을 알게 될 것입니다.

예를 들어, 타이머가 매주 월요일 아침 12:00 AM에 만료한다고 생각해 보십시오. 한 주 동안, 타이머 인터페이스의 메소드를 호출하는 애플리케이션은 결과적으로 SQL 호출을 작성하지만 그 호출은 항상 같은 데이터를 리턴할 것입니다. 또한, 애플리케이션이 타이머에 대해 ejbTimeout 메소드를 호출할 때, 타이머와 연관된 데이터는 변경하지 않습니다. 데이터베이스에 저장된 타이머의 데이터는 그 타이머에 대해 ejbTimeout 메소드가 실행하는 동안 업데이트될 수 없기 때문입니다. 그러므로, 제한시간 동안 애플리케이션이 만드는 후속적인 모든 메소드 호출은 불필요한 SQL 호출을 생성하게 하여 데이터베이스에 유용하지 않은 작업을 야기합니다.

그러나, 타이머 데이터에 대해 캐시를 사용하는 경우, 구성된 메소드가 최초로 호출되면 애플리케이션 서버는 데이터베이스를 조회만 하게 됩니다. 구성된 메소드 중 하나로의 후속 호출에 대해, 애플리케이션은 타이머 오브젝트의 활성화 동안 캐시 데이터를 사용하게 되며, 새 SQL 호출은 생성될 필요가 없습니다.

문제점 방지 문제점 방지: 다음 조건에 유의하십시오.
  • 이 기능을 사용하면, 사용자의 구성은 EJB 스펙에 순응하지 않습니다.
  • 이 기능은 타이머가 시간이 경과된(stale) 데이터를 사용할 잠재성을 가집니 다. 타이머의 다음 만료 기간이 지난 후, 타이머 서비스를 위해 캐시된 데이터는 시간이 경과되게 됩니다.

    예를 들어, 타이머가 매 시간 만료하도록 구성되어 있다고 가정하십시오. 타이머 오브젝트를 작성하고 저장하는 경우, 애플리케이션 서버가 그 오브젝트에 대해 캐시하는 데이터는 한 시간동안 현재입니다. 캐시된 데이터는 데이터베이스에 저장된 데이터와 같을 것입니다.

    첫 시간 내에 타이머 메소드를 호출하는 경우, 타이머 데이터는 현재입니다. 그러나, 만료기간이 지나면 타이머에 대해 캐시된 데이터는 시간이 경과되게 되며 데이터베이스에 실재있는 데이터를 반영하지 않을 수 있습니다. 이 예에서, 1시간 반이 지나고 모든 타이머에 대해 EJB 컨테이너를 조회하는 경우, 애플리케이션은 30분 동안 현재일 캐시 데이터를 포함하는 새 타이머 오브젝트를 되돌려 받을 것입니다. 타이머가 다시 만료될 2시에, 시간이 경과된 캐시 데이터는 모두 시간이 경과되게 되기 때 문입니다.

gotcha

프로시저

  1. 애플리케이션 서버의 관리 콘솔에서, 구성하려는 서버를 선택하십시오. 서버 > 애플리케이션 서버 > 서버를 클릭하십시오.
  2. 서버 인프라 영역에서, Java 및 프로세스 관리 > 프로세스 정의를 선택하십시오.
  3. 추가 특성 영역에서 Java 가상 머신을 선택하십시오.
  4. Java™ 가상 머신 패널의 추가 특성 영역에서, 사용자 정의 특성을 선택하십시오.
  5. com.ibm.websphere.ejbcontainer.allowCachedTimerDataFor 사용자 정의 특성을 작성하거나 수정하십시오.
    • 특성이 존재하지 않으면 새로 작성을 클릭하여 특성을 작성하십시오.
    • 특성이 이미 존재하는 경우, 특성을 선택하고 수정을 클릭하여 값을 변경하십시오.
  6. 사용자 특성의 이름에 대해 com.ibm.websphere.ejbcontainer.allowCachedTimerDataForname을 입력하십시오.
  7. 사용자의 필요와 환경에 맞는 최상의 값을 판별하십시오. 이 특성에 대한 값은 사용자가 필요한 만큼 캐시를 제어할 수 있게 해줍니다. 와일드카드를 지정하거나 특정 타이머 이름을 사용할 수 있으며, 이 메소드에 기반한 정수 값을 지정함으로써 캐시되는 메소드를 미세하게 제어할 수 있습니다.
    이 정수 값은 캐시된 데이터를 사용하도록 허가한 메소드를 미세하게 제어할 수 있게 해줍니다. 정수는 하나의 Bean 기반으로 지정되거나, 별표(*)를 사용하여 모든 Bean에 지정될 수 있습니다. 정수 값과 이에 해당하는 메소드는 다음과 같습니다.
    1
    getHandle() 메소드를 지정합니다
    2
    getInfo() 메소드를 지정합니다
    4
    getNextTimeout() 메소드를 지정합니다
    8
    getTimeRemaining() 메소드를 지정합니다
    16
    getSchedule() 메소드를 지정합니다
    32
    isPersistent() 메소드를 지정합니다
    64
    isCalendarTimer() 메소드를 지정합니다
    참고: 지정된 정수 값을 사용함으로써 이러한 개별 메소드에 이 특성을 적용하거나, 메소드의 조합에 이를 적용할 수 있습니다. 예를 들어 다음과 같습니다.
    • 이 특성을 getHandle 메소드와 getTimeRemaining 메소드에 적용하려면, 두 메소드에 대한 정수 값을 더해 그 값 9(1+8)를 사용하십시오.
    • 특성을 7개의 모든 메소드에 적용하려면 값 127(1+2+4+8+16+32+64)을 사용하거나 정수를 지정할 수 없습니다. 이 특성이 설정되면 기본 작동은 캐시는 모든 메소드에 적용되는 것입니다.
    사용자 결정을 만들 때, 와일드카드를 사용하여 모든 타이머를 지정하거나, 애플리케이션 서버가 캐시를 적용할 타이머 Bean의 JNDI 이름을 지정하십시오.
    • 모든 타이머를 구성할 별표(*)를 입력(선택적으로 정수 값이 뒤 따름)하거나, 타이머의 적용 가능한 메소드를 나타내는 정수 값을 합을 입력할 수 있습니다. 정수 값을 지정하지 않으면 애플리케이션 서버는 캐시를 모든 메소드에 적용합니다.
      예를 들어, 다음 값은 캐시를 모든 타이머에 대한 메소드에 적용합니다.
      *
    • EJB 타이머 Bean의 이름을 입력(선택적으로 정수 값이 뒤 따름)하거나, 타이머 인터페이스의 적용 가능한 메소드를 나타내는 정수 값의 합을 입력할 수 있습니다. 둘 이상의 타이머 Bean을 입력하려면 각각의 애플리케이션 이름을 콜론(:)으로 구분하십시오. 정수 값을 지정하지 않으면 애플리케이션 서버는 캐시를 모든 메소드에 적용합니다.
      예를 들어, 다음 값은 MyTimerBean1 및 MyTimerBean2에 대한 모든 메소드에 캐시를 적용합니다.
      MyApp1#MyEJBModule1#MyTimerBean1:MyApp2#MyEJBModule2#MyTimerBean2
  8. 확인를 선택하십시오.
  9. Application Server를 다시 시작하십시오.

다음 예제는 타이머 서비스에 대해 캐시 기능을 구현하는 다른 방법을 보여줍니다. 두 개의 애플리케이션이 있고 각 애플리케이션이 타이머를 갖는다고 가정하십시오. 타이머는 다음 J2EE 이름을 사용합니다.
  • App1#EJBJar1.jar#EJBTimer1
  • App2#EJBJar2.jar#EJBTimer2
예제는 com.ibm.websphere.ejbcontainer.allowCachedTimerDataForname 사용자 특성에 사용되는 값을 보여줄 것입니다.
예 1
이 예제는 모든 타이머와 모든 애플리케이션에 대해 캐시를 모든 메소드에 적용합니다.
다음 값 중 하나를 사용하십시오.
  • 기본값 사용:
    *
  • 정수 지정:
    *=127
예 2
이 예제는 모든 애플리케이션에 대한 모든 타이머의 캐시를 getInfo 메소드 에 적용합니다.
다음 값 사용:
*=2
예제 3
이 예제는 EJBTimer2의 getHandle 및 getNextTimeout 메소드에 캐시를 적용합니다.
다음 값 사용:
App2#EJBJar2.jar#EJBTimer2=5
예제 4
이 예제는 캐시를 다음에 적용합니다.
  • EJBTimer1의 getInfo 메소드
  • EJBTimer2의 getNextTimeout 및 getTimeRemaining 메소드
다음 값 사용:
App1#EJBJar1.jar#EJBTimer1=2:App2#EJBJar2.jar#EJBTimer2=12

주제 유형을 표시하는 아이콘 태스크 주제



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