Ich habe eine Anwendung mit etwa 3000 Einheiten (Ich weiß, es ist eine Menge, aber ich kann es nicht ändern). Wenn die Anwendung geladen wird, dauert es einige Minuten, bis Hibernate die gesamte Instrumentierung und die SessionFactory-Einrichtung erledigt.
Ich frage mich, ob ich Hibernate konfigurieren kann, um die Instrumentierung in den ursprünglichen Klassen während der Build-Zeit zu tun.
Auf diese Weise kann ich 3000 zusätzliche generierte Proxy-Klassen und den enormen Aufwand beim Start der Anwendung vermeiden.
Ich habe einige Informationen über Hibernate Build-Time-Instrumentierung gefunden (org.hibernate.tool.instrument.javassist.InstrumentTask
), aber es ist nicht klar, ob dies vollständig die Laufzeit-Instrumentierung ersetzt oder nur die Hibernate Lazy-Eigenschaft Abrufmechanismus verarbeitet.
Alle Informationen zum Verschieben der Proxy-Generation in die Build-Zeit sind willkommen.Moving Hibernate Instrumentation zu bauen Zeit
Antwort
Ja, Sie können. Im Hibernate-Code befindet sich eine Ant-Task: org.hibernate.tool.instrument.javassist.InstrumentTask
.
<target name="instrument" depends="compile">
<taskdef name="instrument" classname="org.hibernate.tool.instrument.javassist.InstrumentTask">
<classpath refid="<some-ant-path-including-hibernate-core-jar>"/>
<classpath path="<your-classes-path>"/>
</taskdef>
<instrument verbose="true">
<fileset dir="<your-classes>">
<include name="*.class"/>
</fileset>
</instrument>
</target>
Ich habe einige Maven basierte auch gesehen.
Ich habe die Plugin-Snippets bereits gesehen, aber die Frage ist, ob es die Laufzeit-Instrumentierung ersetzt (und die Ladezeit reduziert)? –
Die Lösung im Internet gefunden. Habe es schnell versucht und es scheint zu funktionieren. Hoffe, ich bin nicht zu spät ..
Die Idee ist, Maven-Antrun-Plugin zu verwenden. Sie müssen dies in Ihrer pom.xml im Abschnitt build/plugins haben.
Im Beispiel unten, vergessen Sie nicht: - um die $ {hibernate.version} und $ {javassist.version} mit der Version zu ersetzen, die Sie verwenden. - die gehören auch die Regeln ändern InstrumentTask läuft nur auf Unternehmen haben
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>Instrument domain classes</id>
<configuration>
<tasks>
<taskdef name="instrument"
classname="org.hibernate.tool.instrument.javassist.InstrumentTask">
<classpath>
<path refid="maven.dependency.classpath"/>
<path refid="maven.plugin.classpath"/>
</classpath>
</taskdef>
<instrument verbose="true">
<fileset dir="${project.build.outputDirectory}">
<include name="**/model/**/*.class"/>
</fileset>
</instrument>
</tasks>
</configuration>
<phase>process-classes</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>${javassist.version}</version>
</dependency>
</dependencies>
</plugin>
Da Hibernate 4.2.8 Sie die Hibernate-verbessern-Maven-Plugin verwenden:
<build>
<plugins>
<plugin>
<groupId>org.hibernate.orm.tooling</groupId>
<artifactId>hibernate-enhance-maven-plugin</artifactId>
<executions>
<execution>
<phase>process-test-resources</phase>
<goals>
<goal>enhance</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
- 1. PersistenceUnit: default kann nicht Hibernate Session bauen - Hibernate
- 2. Ist Zeit, auf Webgl oder nicht zu bauen (Webplayer verwenden)?
- 3. Visual Studio, wie die Zeit ausgegeben wird, um zu bauen?
- 4. Android: Eclipse-Arbeitsbereich braucht eine lange Zeit zu bauen?
- 5. Wie viel Zeit braucht man, um den Trie zu bauen
- 6. web.config Transformation nicht deploy Zeit bauen
- 7. Moving SQL2005 App zu SQL2008
- 8. Remote Runtime Instrumentation
- 9. MMORPG Moving-Protokoll-Mechanismus
- 10. Octave Zeitreihe Moving Average
- 11. Moving scrollbar
- 12. Anpassen von TableViewCell Moving Grabber
- 13. Bedeutet Hibernate Envers eine Transaktion zu einer Zeit?
- 14. Hibernate mit Datum und Zeit zu tun - PostgreSql
- 15. Moving Console Log-Informationen zu Browser-Webseite
- 16. Moving Curl Client ssl zu Guzzle
- 17. Moving Label-Code von Spielplätzen zu Storyboard
- 18. Instrumentation (Diagnose) -Bibliothek für C++
- 19. onTouchEvent von Code über Instrumentation
- 20. Android Instrumentation Run fehlgeschlagen - Assertionsfehler
- 21. Psychopy-moving textstim mit Endpunkt
- 22. Bedeutung der Instrumentation, Benachrichtigung und Synchronisation
- 23. Hibernate Kriteriengruppe nach Datum ohne Zeit
- 24. Moving Pictures Bugs - JavaScript
- 25. Moving SQL Logins
- 26. Bison value moving/efficiency
- 27. Java Moving Ball über
- 28. JavaScript + Canvas Moving Object
- 29. Highcharts - Blasendiagramm - Moving gridlines
- 30. Moving Video mit CSS
Nach Aktivierung der Build-Zeit Instrumentierung habe ich keine Änderung der Ladezeit/Speicherverbrauch bemerkt. –