예제: 읽기 전용 엔티티 Bean 사용
읽기 전용 엔티티 Bean을 사용하는 EJB(Enterprise JavaBeans) 애플리케이션 작성을 위한 사용법 시나리오 및 예입니다.
사용법 시나리오
고객은 오후 10:00 로컬 시간(24시간 형식으로 22:00)보다 이전에 매일 업데이트되는 카탈로그 가격 및 출하 비율 정보의 데이터베이스를 보유합니다. 고객은 읽기 전용으로 이 데이터에 액세스하는 EJB 애플리케이션을 작성하고자 합니다. 즉, 이 애플리케이션은 가격 데이터베이스를 업데이트하지 않습니다. 업데이트는 일부 기타 애플리케이션을 통해 수행됩니다.
예제
고객의 엔티티 Bean 로컬 인터페이스는 다음과 같습니다.
public interface ItemCatalogData extends EJBLocalObject {
public int getItemPrice();
public int getShippingCost(int destinationCode);
}
출하를 포함한 전체 가격을 파악하기 위해 이 EntityBean을 호출하는 Stateless 세션 Bean 메소드(TxRequired라고 가정함)의 코드는 다음과 같습니다.
.....
// Some transactional steps occur prior to this point, such as removing the item from
// inventory, etc.
// Now obtain the price of this item and start to calculate the total cost to the purchaser
ItemCatalogData theItemData =
(ItemCatalogData) ItemCatalogDataHome.findByPrimaryKey(theCatalogNumber);
int totalcost = theItemData.getItemPrice();
// ... some other processing, etc. in the interim
// ...
// ...
// Add the shipping costs
totalcost = totalcost + theItemData.getShippingCost(theDestinationPostalCode);
애플리케이션 어셈블리 시간에 고객은 다음과 같이 이 Bean에 대한 EJB 캐싱 매개변수를 설정합니다.
- ActivateAt = ONCE
- LoadAt = DAILY
- ReloadInterval = 2200
제거된 기능: WAR 파일 확장(WEB-INF/ibm-web-ext.xmi) 및 애플리케이션 확장(META-INF/ibm-application-ext.xmi)을 포함하여 IBM 배치 디스크립터 확장의 reloadInterval 및 reloadingEnabled 속성은 더 이상 사용되지 않습니다.depfeat
매일 밤 22:00 이후에 getItemPrice() 메소드에 대한 첫 번째 호출에서 EJB 컨테이너는 데이터베이스에서 가격 정보를 다시 로드합니다. getItemPrice() 및 getShippingCost()에 대한 호출 사이에 시계가 22:00이 되면, getShippingCost() 메소드는 22:00에 발생했을 수 있는 데이터베이스에 대한 변경사항 이전에 보유한 값을 계속 리턴합니다. 이 트랜잭션의 첫 번째 메소드 호출이 22:00 이전에 발생했기 때문입니다. 따라서 사용된 항목 가격 및 출하 비용은 서로가 동기화된 상태를 유지합니다.