Hi,
As suggested, i am forwarding my idea as to what i think Hibernate should have.
Hibernate currently lacks proper event Delegation model;
Granted it has a hook for listeners and iterates through them to find out which is appropriate or not.
But a better way would be to add "Queuing of events" approach; meaning
each event is first queued (for firing) and then Hibernate goes through
cycles of phases (it can be internally thought of as a Phase 1 --->
Phase 2 ---> Phase 3 ). and each phase has a queue of events it has
to process. A phase can have corresponding listener to process phases
and clear the queue of events associated with it ( meaning events set
to "fire" in the currently executing phase).
All event creation should be centralized and all events should be
queued through a factory. A flexible approach (ideally) would be to
allow users to create Custom phases to enhance lifecycle of their own
Application using Hibernate's Phase interface. "Phase implementation " could include usage of Enums, but its not
mandatory ( so long as we are worried about back-wards compatibility).
As it is, Hibernate Event system is poorly documented and not very well understood.
To visualize what i am proposing ( it is actually similiar to the way JSF works), you have a Phase queue with Phase Factory and a Phase Listener associated for execution of a phase. Each phase has a bound Queue of Events to it. A broadcast Agent will broad cast the event to happen in a particular phase. Next Broadcast Handler Delegate handles the event broadcast by cycling through phases and finding out what is the current phase and whether the event which is being broadcast is registered to fire in this phase or not; (i.e. is appropriate Phase), based on that a phase listener is called to handle the current phase Phase Listener calls event delegate (which is the current hook for all listeners) and it will then cycle through listeners to transfer control to an appropriate listener.
I'd be happy to contribute.
What do you guys think ?
Regards
Vyas, Anirudh
|| ॐ ||