Entity Bean Timers
Entity
beans set
timers on a specific type of entity bean (e.g., Ship, Customer,
Reservation, etc.) with a specific primary key. When a timer goes
off, the container uses the primary key associated with the timer to
load the entity bean with proper data. Once the entity bean is in the
ready state—its data is loaded and it’s ready
to service requests—the ejbTimeout( ) method
is invoked. The container associates the primary key with the timer
implicitly.
Using timers with entity beans allows entity beans to manage their own timed events. As we’ve seen, it makes sense for a Ship to manage its own maintenance schedule. The maintenance schedule is unique for each ship and required in order to keep the ship sailing, so it could be considered intrinsic to the definition of a ship. If, however, the timed event is not a part of the entity’s definition, it’s best to put the timer into a taskflow bean (i.e., stateless session or message-driven) that represents the scenario, instead of placing the logic in the entity bean. This avoids entity bloat , in which an entity bean’s definition becomes huge from attempting to manage every possible application of the entity bean. It’s the same reason we move taskflow logic out of entity beans and into session beans.
A serious concern with entity beans is the possibility of timer attack , which occurs when too many timers expire at the same time. A timer attack is not caused by malicious intent, but rather poor design. For example, ...