Hibernate EventListeners in Spring konfigurieren

Wer in Spring Hibernate Event Listener eintragen will macht dies folgendermassen (vergleiche auch Spring Dokumentation Kapitel 12.2.2):

<beans>
  <bean id="loadListener" class="org.nautsch.MyLoadEventListener" />

  <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
    <property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>
  </bean>

  <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="myDataSource"/>
    <property name="mappingResources">
      <list>
        <value>product.hbm.xml</value>
      </list>
    </property>
    <property name="hibernateProperties">
      <value>
        hibernate.dialect=org.hibernate.dialect.HSQLDialect
      </value>
    </property>
    <property name="eventListeners">
        <map>
            <entry key="load"><ref local="loadListener" /></entry>
        </map>
    </property>
  </bean>

</beans>

Wer wissen möchte welche Schlüssel es für die EventListener gibt sollte sich mal den Source der Klasse org.hibernate.event.EventListeners anschauen. Dort gibt es einen statischen Block der alle Keys mit den dazugehörigen Typen definiert:

       static {
                eventInterfaceFromType = new HashMap();

                eventInterfaceFromType.put("auto-flush", AutoFlushEventListener.class);
                eventInterfaceFromType.put("merge", MergeEventListener.class);
                eventInterfaceFromType.put("create", PersistEventListener.class);
                eventInterfaceFromType.put("create-onflush", PersistEventListener.class);
                eventInterfaceFromType.put("delete", DeleteEventListener.class);
                eventInterfaceFromType.put("dirty-check", DirtyCheckEventListener.class);
                eventInterfaceFromType.put("evict", EvictEventListener.class);
                eventInterfaceFromType.put("flush", FlushEventListener.class);
                eventInterfaceFromType.put("flush-entity", FlushEntityEventListener.class);
                eventInterfaceFromType.put("load", LoadEventListener.class);
                eventInterfaceFromType.put("load-collection", InitializeCollectionEventListener.class);
                eventInterfaceFromType.put("lock", LockEventListener.class);
                eventInterfaceFromType.put("refresh", RefreshEventListener.class);
                eventInterfaceFromType.put("replicate", ReplicateEventListener.class);
                eventInterfaceFromType.put("save-update", SaveOrUpdateEventListener.class);
                eventInterfaceFromType.put("save", SaveOrUpdateEventListener.class);
                eventInterfaceFromType.put("update", SaveOrUpdateEventListener.class);
                eventInterfaceFromType.put("pre-load", PreLoadEventListener.class);
                eventInterfaceFromType.put("pre-update", PreUpdateEventListener.class);
                eventInterfaceFromType.put("pre-delete", PreDeleteEventListener.class);
                eventInterfaceFromType.put("pre-insert", PreInsertEventListener.class);
                eventInterfaceFromType.put("pre-collection-recreate", PreCollectionRecreateEventListener.class);
                eventInterfaceFromType.put("pre-collection-remove", PreCollectionRemoveEventListener.class);
                eventInterfaceFromType.put("pre-collection-update", PreCollectionUpdateEventListener.class);
                eventInterfaceFromType.put("post-load", PostLoadEventListener.class);
                eventInterfaceFromType.put("post-update", PostUpdateEventListener.class);
                eventInterfaceFromType.put("post-delete", PostDeleteEventListener.class);
                eventInterfaceFromType.put("post-insert", PostInsertEventListener.class);
                eventInterfaceFromType.put("post-commit-update", PostUpdateEventListener.class);
                eventInterfaceFromType.put("post-commit-delete", PostDeleteEventListener.class);
                eventInterfaceFromType.put("post-commit-insert", PostInsertEventListener.class);
                eventInterfaceFromType.put("post-collection-recreate", PostCollectionRecreateEventListener.class);
                eventInterfaceFromType.put("post-collection-remove", PostCollectionRemoveEventListener.class);
                eventInterfaceFromType.put("post-collection-update", PostCollectionUpdateEventListener.class);
                eventInterfaceFromType = Collections.unmodifiableMap( eventInterfaceFromType );
        }

iWoz

Letztes Wochenende war ich mit meinen Kindern in der Bibliothek um wieder einmal Kinderbücher, Bibi Blocksberg-CD’s und ein paar Spiele für die Kleinen zu holen. Was sticht mir doch da ins Auge: iWoz von Steve Wozniak. Also habe ich mir das Buch ausgeliehen und gestern zu Ende gelesen. Ich wollte doch herausbekommen ob es an dem Film Silicon Valley Story auch etwas Wahres hat. 🙂

Was ich aus dem Buch mitnehme lässt sich an folgendem Sachverhalt gut zeigen. In über der Hälfte des Buches geht es darum, wie sich Woz Wissen aneignet, Sachen baut, sich für Dinge interessiert und schlussendlich alle Erfahrung und Wissen im Bau des Apple I gipfeln. Er lernt Schritt für Schritt alles was er benötigt. Es ist die Summe seiner Tätigkeiten die es ihm ermöglichte die Idee für den Apple I zu bekommen und nicht andersherum.