Project

General

Profile

« Previous | Next » 

Revision 7dcc645a

Added by Ayco Hollemann over 10 years ago

Made crud event listener for Level2 validation post insert/update. With pre insert/event a hibernate bug (or undesirable feature) surfaced: error "Found two representations of same collection". See https://forum.hibernate.org/viewtopic.php?p=2231400

View differences:

cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/CdmListenerIntegrator.java
12 12
import org.hibernate.metamodel.source.MetadataImplementor;
13 13
import org.hibernate.service.spi.SessionFactoryServiceRegistry;
14 14

  
15
import eu.etaxonomy.cdm.persistence.validation.ValidationExecutor;
16

  
15 17
/**
16 18
 * @author a.mueller
17 19
 * @created 30.03.2013
18
 *
20
 * 
19 21
 */
20 22
public class CdmListenerIntegrator implements Integrator {
21 23
	private static final Logger logger = Logger.getLogger(CdmListenerIntegrator.class);
22 24

  
23
	/* (non-Javadoc)
24
	 * @see org.hibernate.integrator.spi.Integrator#integrate(org.hibernate.cfg.Configuration, org.hibernate.engine.spi.SessionFactoryImplementor, org.hibernate.service.spi.SessionFactoryServiceRegistry)
25

  
26
	/*
27
	 * (non-Javadoc)
28
	 * 
29
	 * @see org.hibernate.integrator.spi.Integrator#integrate(org.hibernate.cfg.Configuration,
30
	 * org.hibernate.engine.spi.SessionFactoryImplementor,
31
	 * org.hibernate.service.spi.SessionFactoryServiceRegistry)
25 32
	 */
26 33
	@Override
27
	public void integrate(Configuration configuration,
28
			SessionFactoryImplementor sessionFactory,
29
			SessionFactoryServiceRegistry serviceRegistry) {
30
		if (logger.isInfoEnabled()){logger.info("Registering event listeners");}
34
	public void integrate(Configuration configuration, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry)
35
	{
36
		if (logger.isInfoEnabled()) {
37
			logger.info("Registering event listeners");
38
		}
39
		
31 40
		final EventListenerRegistry eventRegistry = serviceRegistry.getService(EventListenerRegistry.class);
32 41

  
33
        //duplication strategy
34
        eventRegistry.addDuplicationStrategy( CdmListenerDuplicationStrategy.NewInstance );
42
		//duplication strategy
43
		eventRegistry.addDuplicationStrategy(CdmListenerDuplicationStrategy.NewInstance);
44
		
45
		ValidationExecutor validationExecutor = new ValidationExecutor();
46
		Level2ValidationEventListener l2Listener = new Level2ValidationEventListener();
47
		l2Listener.setValidationExecutor(validationExecutor);
48
		Level3ValidationEventListener l3Listener = new Level3ValidationEventListener();
49
		l3Listener.setValidationExecutor(validationExecutor);
35 50

  
36
        // prepend to register before or append to register after
37
        // this example will register a persist event listener
38
        eventRegistry.prependListeners(EventType.SAVE, new CacheStrategyGenerator(), new SaveEntityListener());
39
        eventRegistry.prependListeners(EventType.UPDATE, new CacheStrategyGenerator(), new UpdateEntityListener());
40
        eventRegistry.prependListeners(EventType.SAVE_UPDATE, new CacheStrategyGenerator(), new SaveOrUpdateEntityListener()/*, new Level2ValidationSaveOrUpdateEventListener()*/);
41
        eventRegistry.appendListeners(EventType.DELETE, new CdmDeleteListener());
42
        eventRegistry.appendListeners(EventType.POST_LOAD, new CdmPostDataChangeObservableListener());
43
        eventRegistry.appendListeners(EventType.POST_INSERT, new CdmPostDataChangeObservableListener()/*, new Level3ValidationCRUDEventListener()*/);
44
        eventRegistry.appendListeners(EventType.POST_UPDATE, new CdmPostDataChangeObservableListener()/*, new Level3ValidationCRUDEventListener()*/);
45
        eventRegistry.appendListeners(EventType.POST_DELETE, new CdmPostDataChangeObservableListener()/*, new Level3ValidationCRUDEventListener()*/);
46
    }
51
		// prepend to register before or append to register after
52
		// this example will register a persist event listener
53
		eventRegistry.prependListeners(EventType.SAVE, new CacheStrategyGenerator(), new SaveEntityListener());
54
		eventRegistry.prependListeners(EventType.UPDATE, new CacheStrategyGenerator(), new UpdateEntityListener());
55
		eventRegistry.prependListeners(EventType.SAVE_UPDATE, new CacheStrategyGenerator(), new SaveOrUpdateEntityListener());
56
		eventRegistry.appendListeners(EventType.DELETE, new CdmDeleteListener());
57
		eventRegistry.appendListeners(EventType.POST_LOAD, new CdmPostDataChangeObservableListener());
58
		eventRegistry.appendListeners(EventType.POST_INSERT, new CdmPostDataChangeObservableListener(), l2Listener, l3Listener);
59
		eventRegistry.appendListeners(EventType.POST_UPDATE, new CdmPostDataChangeObservableListener(), l2Listener, l3Listener);
60
		eventRegistry.appendListeners(EventType.POST_DELETE, new CdmPostDataChangeObservableListener(), l3Listener);
61
	}
47 62

  
48 63

  
49
	/* (non-Javadoc)
50
	 * @see org.hibernate.integrator.spi.Integrator#integrate(org.hibernate.metamodel.source.MetadataImplementor, org.hibernate.engine.spi.SessionFactoryImplementor, org.hibernate.service.spi.SessionFactoryServiceRegistry)
64
	/*
65
	 * (non-Javadoc)
66
	 * 
67
	 * @see org.hibernate.integrator.spi.Integrator#integrate(org.hibernate.metamodel.source.
68
	 * MetadataImplementor, org.hibernate.engine.spi.SessionFactoryImplementor,
69
	 * org.hibernate.service.spi.SessionFactoryServiceRegistry)
51 70
	 */
52 71
	@Override
53
	public void integrate(MetadataImplementor metadata,
54
			SessionFactoryImplementor sessionFactory,
55
			SessionFactoryServiceRegistry serviceRegistry) {
72
	public void integrate(MetadataImplementor metadata, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry)
73
	{
56 74
		//nothing to do for now
57 75
		logger.warn("Metadata integrate not yet implemented");
58

  
59 76
	}
60 77

  
61
	/* (non-Javadoc)
62
	 * @see org.hibernate.integrator.spi.Integrator#disintegrate(org.hibernate.engine.spi.SessionFactoryImplementor, org.hibernate.service.spi.SessionFactoryServiceRegistry)
78

  
79
	/*
80
	 * (non-Javadoc)
81
	 * 
82
	 * @see org.hibernate.integrator.spi.Integrator#disintegrate(org.hibernate.engine.spi.
83
	 * SessionFactoryImplementor, org.hibernate.service.spi.SessionFactoryServiceRegistry)
63 84
	 */
64 85
	@Override
65
	public void disintegrate(SessionFactoryImplementor sessionFactory,
66
			SessionFactoryServiceRegistry serviceRegistry) {
86
	public void disintegrate(SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry)
87
	{
67 88
		//nothing to do for now
68 89
		logger.warn("Disintegrate not yet implemented");
69

  
70 90
	}
71 91

  
72 92
}

Also available in: Unified diff