Example: Use a read-only entity bean
A usage scenario and example for writing an EJB application that uses a read-only entity bean.
Usage scenario
A customer has a database of catalog pricing and shipping rate information that is updated daily no later than 10:00 PM local time (22:00 in 24-hour format). They want to write an EJB application that has read-only access to this data. That is, this application never updates the pricing database. Updating is done through some other application.
Example
The customer's entity bean local interface might be:
public interface ItemCatalogData extends EJBLocalObject { public int getItemPrice(); public int getShippingCost(int destinationCode); }The code in the stateless SessionBean method (assume it is a TxRequired) that invokes this EntityBean to calculate the total cost including shipping, resembles:
..... // 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);At application assembly time, the customer sets the EJB caching parameters for this bean as follows:
- ActivateAt = ONCE
- LoadAt = DAILY
- ReloadInterval = 2200
Deprecated feature: The reloadInterval and reloadingEnabled attributes of the IBM deployment descriptor extensions, including both the WAR file extension (WEB-INF/ibm-web-ext.xmi) and the application extension (META-INF/ibm-application-ext.xmi) were deprecated.depfeat
On the first call to the getItemPrice() method after 22:00 each night, the EJB container reloads the pricing information from the database. If the clock strikes 22:00 between the call to getItemPrice() and getShippingCost(), the getShippingCost() method still returns the value it had prior to any changes to the database that might have occurred at 22:00, since the first method invocation in this transaction occurred prior to 22:00. Thus, the item price and shipping cost used remain in sync with each other.
Related concepts
Enterprise beans Concurrency control
Related tasks
Develop applications that use JNDI
WebSphere extensions to the Enterprise JavaBeans specification Enterprise bean development best practices