Exemplo: Utilizando um Bean de Entidade de Leitura
Um cenário de uso e exemplo de como escrever um aplicativo EJB (Enterprise JavaBeans) que utiliza um bean de entidade de leitura.
Cenário de uso
Um cliente possui um banco de dados de informações com taxa de preço e de remessa de catálogo que são atualizadas diariamente antes das 10:00 PM no horário local (22:00 no formato de 24 horas). Ele deseja gravar um aplicativo EJB que tem acesso de leitura a esses dados. Ou seja, esse aplicativo nunca atualiza o banco de dados de preço. A atualização é feita por meio de algum outro aplicativo.
Por exemplo:
A interface local do bean de entidade do cliente pode ser:
public interface ItemCatalogData extends EJBLocalObject {
public int getItemPrice();
public int getShippingCost(int destinationCode);
}
O código no método SessionBean sem preservação de estado (assumindo que é TxRequired) que chama esse EntityBean para calcular o custo total incluindo remessa, seria semelhante a:
.....
// Ocorrem algumas etapas transacionais antes desse ponto, tal como remoção do item do
// inventário, etc.
// Agora obtenha o preço desse item e inicie para calcular o custo total para o comprador
ItemCatalogData theItemData =
(ItemCatalogData) ItemCatalogDataHome.findByPrimaryKey(theCatalogNumber);
int totalcost = theItemData.getItemPrice();
// ... algum outro processamento, etc. no período intermediário
// ...
// ...
// Adicionar custos de remessa
totalcost = totalcost + theItemData.getShippingCost(theDestinationPostalCode);
- ActivateAt = ONCE
- LoadAt = DAILY
- ReloadInterval = 2200
Recurso Reprovado: Os atributos reloadInterval e reloadingEnabled das extensões do descritor de implementação da IBM, incluindo ambas as extensões do arquivo WAR(WEB-INF/ibm-web-ext.xmi) e do aplicativo (META-INF/ibm-application-ext.xmi) foram descontinuados.depfeat
Na primeira chamada para o método getItemPrice() após às 22:00 toda noite, o contêiner EJB recarrega as informações de preço a partir do banco de dados. Se o relógio marcar 22:00 entre a chamada para getItemPrice() e getShippingCost(), o método getShippingCost() ainda retornará o valor que possuía antes de quaisquer alterações no banco de dados que possam ter ocorrido às 22:00, porque a primeira chamada de método nessa transação ocorreu antes das 22:00. Portanto, o preço do item e o custo de remessa permanecem em sincronia entre si.