The transaction implementation is using the Unit Of Work and the UnitOfWorkProtocol aspect to achive completely transparent transaction demarcation. You can registers one or many listeners to the Unit Of Work which will be called upon commit, rollback etc.
The transaction implementations work great in conjunction with the Persistence components, in which it can for example make them aware of JTA two-phase commit transactions etc. You just register your listeners in the Unit Of Work and the complete transaction will not be committed until all listeners have agreed on that. h2: