타이머 서비스에 대한 데이터 캐시
EJB 타이머 서비스에 대한 데이터베이스 액세스와 SQL 호출을 최적화하려는 경우, 애플리케이션 서버가 그 타이머에 대한 데이터를 캐시하도록 할 수 있습니 다. 캐시를 사용하면, 애플리케이션 서버가 데이터가 필요할 때마다 데이터베이스를 조회할 필요 없이 타이머 데이터를 재사용할 수 있게 합니다.
이 태스크 정보
엔터프라이즈 Bean에 대한 스펙은 javax.ejb.Timer 인터페이스로의 각 호출에 대해 데이터베이스로의 호출이 만들어지는 것을 요구함으로써, 애플리케이션은 EJB 타이머가 사용 가능한 최신의 데이터를 사용할 수 있도록 해줍니다. 이 메소드가 종종 호출되거나 이 메소드 중 하나를 호출하는 EJB 타이머가 많은 경우, 애플리케이션 서버는 아주 짧은 시간에 많은 SQL 명령을 생성할 수 있습니다. 일부의 경우, 요구사항에 대한 강한 집착은 성능 저하로 인해 보증되는 것보다 더 많은 오버헤드를 초래한다는 것을 알게 될 것입니다.
예를 들어, 타이머가 매주 월요일 아침 12:00 AM에 만료한다고 생각해 보십시오. 한 주 동안, 타이머 인터페이스의 메소드를 호출하는 애플리케이션은 결과적으로 SQL 호출을 작성하지만 그 호출은 항상 같은 데이터를 리턴할 것입니다. 또한, 애플리케이션이 타이머에 대해 ejbTimeout 메소드를 호출할 때, 타이머와 연관된 데이터는 변경하지 않습니다. 데이터베이스에 저장된 타이머의 데이터는 그 타이머에 대해 ejbTimeout 메소드가 실행하는 동안 업데이트될 수 없기 때문입니다. 그러므로, 제한시간 동안 애플리케이션이 만드는 후속적인 모든 메소드 호출은 불필요한 SQL 호출을 생성하게 하여 데이터베이스에 유용하지 않은 작업을 야기합니다.
그러나, 타이머 데이터에 대해 캐시를 사용하는 경우, 구성된 메소드가 최초로 호출되면 애플리케이션 서버는 데이터베이스를 조회만 하게 됩니다. 구성된 메소드 중 하나로의 후속 호출에 대해, 애플리케이션은 타이머 오브젝트의 활성화 동안 캐시 데이터를 사용하게 되며, 새 SQL 호출은 생성될 필요가 없습니다.

- 이 기능을 사용하면, 사용자의 구성은 EJB 스펙에 순응하지 않습니다.
- 이 기능은 타이머가 시간이 경과된(stale) 데이터를 사용할 잠재성을 가집니
다.
타이머의 다음 만료 기간이 지난 후, 타이머 서비스를 위해 캐시된 데이터는
시간이 경과되게 됩니다.
예를 들어, 타이머가 매 시간 만료하도록 구성되어 있다고 가정하십시오. 타이머 오브젝트를 작성하고 저장하는 경우, 애플리케이션 서버가 그 오브젝트에 대해 캐시하는 데이터는 한 시간동안 현재입니다. 캐시된 데이터는 데이터베이스에 저장된 데이터와 같을 것입니다.
첫 시간 내에 타이머 메소드를 호출하는 경우, 타이머 데이터는 현재입니다. 그러나, 만료기간이 지나면 타이머에 대해 캐시된 데이터는 시간이 경과되게 되며 데이터베이스에 실재있는 데이터를 반영하지 않을 수 있습니다. 이 예에서, 1시간 반이 지나고 모든 타이머에 대해 EJB 컨테이너를 조회하는 경우, 애플리케이션은 30분 동안 현재일 캐시 데이터를 포함하는 새 타이머 오브젝트를 되돌려 받을 것입니다. 타이머가 다시 만료될 2시에, 시간이 경과된 캐시 데이터는 모두 시간이 경과되게 되기 때 문입니다.
프로시저
예
- App1#EJBJar1.jar#EJBTimer1
- App2#EJBJar2.jar#EJBTimer2
- 예 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