2 Stimmen

Hibernate sessionFactory wird für jeden Unit-Test neu erstellt (unter Verwendung des Spring-Frameworks)

Ich verwende Spring's AbstractTransactionalDataSourceSpringContextTests für meine Persistenz-Unit-Tests und mein Problem ist meine Tests sind zu langsam: 1 Methode=5s, und jede zusätzliche Methode ist mindestens eine weitere Sekunde. Ich habe über 300 db-Tabellen, so dass ein langsamer Start vielleicht verständlich ist. Ich bin jedoch die Protokolle durchgegangen und eines der überraschenden Dinge ist, dass die Hibernate sessionFactory für jede Testmethode neu aufgebaut wird. Und das ist die Hälfte der Laufzeitkosten für jede zusätzliche Methode.

Sollte ich nicht in der Lage sein, die ursprüngliche sessionFactory wieder zu verwenden?

Ich habe mich ein wenig in den Quellcode vertieft und ich habe keine offensichtliche Möglichkeit gesehen, die Wiederverwendung der sessionFactory zu erzwingen.

Irgendwelche Ideen?

Und jede andere Ideen für die Beschleunigung der Persistenz Unit Tests?

(Spring 2.5 und Hibernate 3.2ish, hsqldb)

1voto

Will Marcouiller Punkte 23205

Sie sollten eine Hilfsklasse oder so schreiben, dass Sie Ihre ISessionFactory-API verpacken können, und Sie sollten sie besser zu statisch Sie wird also nur einmal erstellt, da die Instanziierung dieser API sehr teuer ist.

0voto

Péter Török Punkte 111735

Sie sollten versuchen herauszufinden, wo sessionFactories erstellt werden (ich würde wetten, dass in jeder setUp()-Methode eine neue erstellt wird). Dann können Sie die Erstellung in eine separate Klasse verschieben, vielleicht in eine statische Methode, die intern sicherstellt, dass nur eine Instanz davon erstellt wird (ähnlich wie ein Singleton).

0voto

Brel Punkte 131

Unsere gesamte SpringContext wurde jedes Mal aktualisiert, die ich dachte, war vage im Zusammenhang mit einigen dynamischen Spring Kontext Jonglieren wir tun. Allerdings ist das Jonglieren auf einer Basis pro Klasse, so tun eine Aktualisierung für jede Methode war völlig unnötig.

Die "Lösung" besteht darin, die Kontextaktualisierung zu überspringen, wodurch die Wiederherstellung der Sitzungsfabrik vermieden wird.

Ich bin mir immer noch nicht sicher, warum Spring die Notwendigkeit sieht, die Session Factory bei jeder Aktualisierung von Grund auf neu zu erstellen. Ich nehme an, ein Rebuild für sie ist der einfachste Weg, um eine Sitzung aktualisieren zu tun, aber es ist hoffentlich nicht die schnellste.

Vielen Dank für die Antworten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X