2012-10-05 4 views
17

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

+1

Nach Aktivierung der Build-Zeit Instrumentierung habe ich keine Änderung der Ladezeit/Speicherverbrauch bemerkt. –

Antwort

12

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.

+2

Ich habe die Plugin-Snippets bereits gesehen, aber die Frage ist, ob es die Laufzeit-Instrumentierung ersetzt (und die Ladezeit reduziert)? –

3

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> 
+0

Ist das eine Maven-Version der anderen Antwort? – sharakan

+0

Not litraly, Ich habe diese Seite gefunden: http://tricksdev.blogspot.fr/2009/03/hibernate-bytecode-instrumentation.html. Aber ich passe es an, um die letzte Version von InstrumentTask zu benutzen und zu dokumentieren. – Samuel

4

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>