Ejemplo: utilización de un bean de entidad de sólo lectura
Caso de uso y ejemplo para escribir una aplicación EJB (Enterprise JavaBeans) que utilice un bean de entidad de sólo lectura.
Ejemplo de uso
Un cliente tiene una base de datos de precios de catálogo e información de tarifas de envío que se actualiza a diario no más tarde de las 10:00 pm, hora local (22:00 en formato de 24 horas). Se desea escribir una aplicación EJB que tenga acceso de sólo lectura a estos datos. Es decir, esta aplicación nunca actualiza la base de datos de precios. La actualización se realiza a través de alguna otra aplicación.
Ejemplo
La interfaz local del bean de entidad del cliente podría ser:
public interface ItemCatalogData extends EJBLocalObject {
public int getItemPrice();
public int getShippingCost(int destinationCode);
}
El código del método SessionBean sin estado (se supone que es un TxRequired) que invoca este EntityBean para calcular el coste total incluido el envío, se parecería a:
.....
// Se producen algunos pasos transaccionales antes de este punto, como la eliminación del artículo del
// inventario, etc.
// Ahora se obtiene el precio de este artículo y se empieza a calcular el coste total en el comprador
ItemCatalogData theItemData =
(ItemCatalogData) ItemCatalogDataHome.findByPrimaryKey(theCatalogNumber);
int totalcost = theItemData.getItemPrice();
// ... algún otro proceso, etc. provisional
// ...
// ...
// Se añaden los costes de envío
totalcost = totalcost + theItemData.getShippingCost(theDestinationPostalCode);
- ActivateAt = ONCE
- LoadAt = DAILY
- ReloadInterval = 2200
Deprecated feature: Los atributos reloadInterval y reloadingEnabled de las extensiones del descriptor de despliegue de IBM, incluidas la extensión del archivo WAR (WEB-INF/ibm-web-ext.xmi) y la extensión de la aplicación (META-INF/ibm-application-ext.xmi) están en desuso. depfeat
En la primera llamada al método getItemPrice() después de las 22:00 horas todas las noches, el contenedor de EJB recarga la información de precios de la base de datos. Si el reloj da las 22:00 entre la llamada a getItemPrice() y getShippingCost(), el método getShippingCost() aún devuelve el valor que tenía antes de que se produjera ningún cambio en la base de datos que pudiera haber ocurrido a las 22:00 h, dado que la primera invocación a método de esta transacción sucedió antes de las 22:00 h. De este modo, el precio del artículo y el coste de envío utilizado permanecen sincronizados entre sí.