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
|| ॐ ||