Project

General

Profile

Download (3.48 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 *
3
 */
4
package eu.etaxonomy.cdm.persistence.hibernate;
5

    
6
import org.apache.log4j.Logger;
7
import org.hibernate.boot.Metadata;
8
import org.hibernate.engine.spi.SessionFactoryImplementor;
9
import org.hibernate.event.service.spi.EventListenerRegistry;
10
import org.hibernate.event.spi.EventType;
11
import org.hibernate.integrator.spi.Integrator;
12
import org.hibernate.service.spi.SessionFactoryServiceRegistry;
13

    
14
/**
15
 * NOTE: This class could be replaces by a HibernateSpringIntegrator as suggested in
16
 * https://stackoverflow.com/questions/16019820/using-hibernate-4s-integrator-pattern-and-springs-dependency-injection#16045272
17
 * this would allow for flexible and extensible configuration via the spring application context.
18
 *
19
 * @author a.mueller
20
 * @created 30.03.2013
21
 *
22
 */
23
public class CdmListenerIntegrator implements Integrator {
24
	private static final Logger logger = Logger.getLogger(CdmListenerIntegrator.class);
25

    
26
	@Override
27
	public void integrate(Metadata metadata,
28
	        SessionFactoryImplementor sessionFactory,
29
	        SessionFactoryServiceRegistry serviceRegistry)
30
	{
31
	    if (logger.isInfoEnabled()) {
32
			logger.info("Registering event listeners");
33
		}
34

    
35
		final EventListenerRegistry eventRegistry = serviceRegistry.getService(EventListenerRegistry.class);
36

    
37
		//duplication strategy
38
		eventRegistry.addDuplicationStrategy(CdmListenerDuplicationStrategy.NewInstance);
39

    
40
//		ValidationExecutor validationExecutor = new ValidationExecutor();
41
//		Level2ValidationEventListener l2Listener = new Level2ValidationEventListener();
42
//		l2Listener.setValidationExecutor(validationExecutor);
43
//		Level3ValidationEventListener l3Listener = new Level3ValidationEventListener();
44
//		l3Listener.setValidationExecutor(validationExecutor);
45

    
46
		// prepend to register before or append to register after
47
		// this example will register a persist event listener
48
		eventRegistry.prependListeners(EventType.SAVE, new CacheStrategyGenerator(), new SaveEntityListener());
49
		eventRegistry.prependListeners(EventType.UPDATE, new CacheStrategyGenerator(), new UpdateEntityListener());
50
		eventRegistry.prependListeners(EventType.SAVE_UPDATE, new CacheStrategyGenerator(), new SaveOrUpdateEntityListener());
51
		eventRegistry.appendListeners(EventType.MERGE, new PostMergeEntityListener());
52
//		eventRegistry.appendListeners(EventType.DELETE, new CdmDeleteListener());
53
		eventRegistry.appendListeners(EventType.POST_LOAD, new CdmPostDataChangeObservableListener());
54
//with validation
55
//		eventRegistry.appendListeners(EventType.POST_INSERT, new CdmPostDataChangeObservableListener(), l2Listener, l3Listener);
56
//		eventRegistry.appendListeners(EventType.POST_UPDATE, new CdmPostDataChangeObservableListener(), l2Listener, l3Listener);
57
//		eventRegistry.appendListeners(EventType.POST_DELETE, new CdmPostDataChangeObservableListener(), l3Listener);
58
//without validation
59
		eventRegistry.appendListeners(EventType.POST_INSERT, new CdmPostDataChangeObservableListener());
60
		eventRegistry.appendListeners(EventType.POST_UPDATE, new CdmPostDataChangeObservableListener());
61
		eventRegistry.appendListeners(EventType.POST_DELETE, new CdmPostDataChangeObservableListener());
62

    
63
		eventRegistry.appendListeners(EventType.PRE_INSERT, new CdmPreDataChangeListener());
64
		eventRegistry.appendListeners(EventType.PRE_UPDATE, new CdmPreDataChangeListener());
65
	}
66

    
67
	@Override
68
	public void disintegrate(SessionFactoryImplementor sessionFactory,
69
	        SessionFactoryServiceRegistry serviceRegistry)
70
	{
71
		//nothing to do for now
72
		logger.warn("Disintegrate ListenerIntegrator not yet implemented");
73
	}
74

    
75
}
(7-7/21)