If the EJB container needs to synchronize the instance variables of an entity bean with the corresponding values stored in a database, it invokes the
ejbLoad
and ejbStore
methods. TheejbLoad
method refreshes the instance variables from the database, and the ejbStore
method writes the variables to the database. The client may not call ejbLoad
and ejbStore
.If a business method is associated with a transaction, the container invokes
ejbLoad
before the business method executes. Immediately after the business method executes, the container callsejbStore
. Because the container invokes ejbLoad
and ejbStore
, you do not have to refresh and store the instance variables in your business methods. The SavingsAccountBean
class relies on the container to synchronize the instance variables with the database. Therefore, the business methods of SavingsAccountBean
should be associated with transactions.If the
ejbLoad
and ejbStore
methods cannot locate an entity in the underlying database, they should throw the javax.ejb.NoSuchEntityException
. This exception is a subclass ofEJBException
. Because EJBException
is a subclass of RuntimeException
, you do not have to include it in the throws
clause. When NoSuchEntityException
is thrown, the EJB container wraps it in a RemoteException
before returning it to the client.In the
SavingsAccountBean
class, ejbLoad
invokes the loadRow
method, which issues a SQL SELECT
statement and assigns the retrieved data to the instance variables. The ejbStore
method calls the storeRow
method, which stores the instance variables in the database with a SQL UPDATE
statement. Here is the code for the ejbLoad
and ejbStore
methods:public void ejbLoad() { try { loadRow(); } catch (Exception ex) { throw new EJBException("ejbLoad: " + ex.getMessage()); } } public void ejbStore() { try { storeRow(); } catch (Exception ex) { throw new EJBException("ejbStore: " + ex.getMessage()); } }
No comments:
Post a Comment