2012-10-05 17 views
17

Ho un'applicazione con circa 3000 entità (so che è molto, ma non posso cambiarla). Quando l'applicazione carica, Hibernate impiega un minuto per eseguire tutta la strumentazione e il materiale di installazione di SessionFactory.
Mi chiedevo se posso configurare Hibernate per fare la strumentazione sulle classi originali durante il tempo di costruzione.
In questo modo posso evitare 3000 ulteriori classi proxy generate e l'enorme sovraccarico per l'avvio dell'applicazione.
Ho trovato alcune informazioni sulla strumentazione del tempo di costruzione di Hibernate (org.hibernate.tool.instrument.javassist.InstrumentTask) ma non è chiaro se questo sostituisce totalmente la strumentazione di runtime o gestisce solo il meccanismo di recupero delle proprietà pigro di Hibernate.
Tutte le informazioni su come spostare la generazione del proxy per costruire il tempo saranno apprezzate.Spostamento della strumentazione di Hibernate per creare il tempo

+1

Dopo aver attivato la fase di compilazione strumentazione Non ho notato alcun cambiamento nel tempo di caricamento/consumo di memoria. –

risposta

12

Sì, è possibile. Esiste un'attività Ant nel codice Hibernate: 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> 

Ho visto anche alcuni Maven.

+2

Ho già visto i frammenti di plugin ma la domanda è se sostituisce la strumentazione in fase di esecuzione (e ridurrà il tempo di caricamento)? –

3

Trovato la soluzione su Internet. Provato rapidamente, e sembra funzionare. Spero di non essere in ritardo ..

L'idea è di usare maven-antrun-plugin. Devi averlo nel tuo pom.xml nella sezione build/plugins.

Nell'esempio seguente, non dimenticare: - per sostituire $ {hibernate.version} e $ {javassist.version} con la versione che stai utilizzando. - di modificare le regole comprendono di avere InstrumentTask gira solo su vostra entità

<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

Questa è una versione esperta dell'altra risposta? – sharakan

+0

Non dissuasivo, ho trovato questa pagina: http://tricksdev.blogspot.fr/2009/03/hibernate-bytecode-instrumentation.html. Ma lo adattare per usare l'ultima versione di InstrumentTask e documentarlo. – Samuel

4

Dal Hibernate 4.2.8 è possibile utilizzare il hibernate-migliorare-maven-plugin:

<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> 
Problemi correlati