ORM Events
Last updated
Last updated
Hibernate can announce events to listener objects so they can tap in to the life-cycle of the entities. You can either listen to the events globally or within the entity itself by just declaring a few listener methods. The cborm module taps in to the global Hibernate events and re-transmits them as ColdBox interception points. This allows you to intercept ORM events via multiple CFC listeners instead of the rigid approach of a single listener CFC which the ColdFusion engines give you.
This is achieved by the cborm.models.EventHandler
class and by telling the application about it. The event handler also (if configured) will talk to WireBox and auto wire entities with dependencies. Just add your dependency injection properties and off you go with entity injection.
You can enable the cborm event handler by opening the Application.cfc
and adding two settings:
eventHandling
eventHandler
That's it, now the cborm event handler will listen to the ORM events, re-broadcast them and you can create ColdBox Interceptors to listen to them.
Below are the new interception points the ORM Event Handler exposes with the appropriate interception data it announces. Just create an Interceptor CFC, add the method with the name of the interception point and off you go!
Interception Point | Intercept Structure | Description |
|
| Called via the |
|
| Called via the |
|
| Called via the |
|
| Called via the |
|
| Called via the |
|
| Called via the |
|
| Called via the |
|
| Called via the |
|
| Called via the |
|
| Called via the |
|
| Called via the |
|
| Called before the Hibernate session is flushed. Triggered via the |
|
| Called after the Hibernate session is flushed. Triggered via the |
With the exposure of these interception points to your ColdBox application, you can easily create decoupled executable chains of events that respond to ORM events. This really expands the ORM interceptor capabilities to a more decoupled way of listening to ORM events. You can even create different interceptors for different ORM entity classes that respond to the same events, extend the entities with AOP, change entities at runtime, and more; how cool is that.