2012-10-05 21 views
17

Tengo una aplicación con aproximadamente 3000 entidades (sé que es mucho pero no puedo cambiarla). Cuando se carga la aplicación, Hibernate tarda unos minutos en hacer toda la instrumentación y las cosas de configuración de SessionFactory.
Me preguntaba si puedo configurar Hibernate para hacer la instrumentación en las clases originales durante el tiempo de compilación.
De esta manera puedo evitar 3000 clases de proxy generadas adicionales y la gran sobrecarga en la puesta en marcha de la aplicación.
He encontrado información sobre la instrumentación de tiempo de compilación de Hibernate (org.hibernate.tool.instrument.javassist.InstrumentTask), pero no está claro si esto reemplaza totalmente la instrumentación en tiempo de ejecución o si solo maneja el mecanismo de búsqueda de propiedades diferidas de Hibernate.
Se apreciará cualquier información sobre cómo mover la generación del proxy al tiempo de compilación.Mover la instrumentación de Hibernate al tiempo de compilación

+1

Después de activar el tiempo de construcción instrumentación No noté ningún cambio en el tiempo de carga/consumo de memoria. –

Respuesta

12

Sí, puedes. Hay una tarea Ant en el código de 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> 

He visto algunos basados ​​en Maven también.

+2

Ya he visto los fragmentos del complemento pero la pregunta es si reemplaza la instrumentación en tiempo de ejecución (y reducirá el tiempo de carga). –

3

Encontré la solución en internet. Intenté rápidamente, y parece funcionar. Espero no llegar tarde ...

La idea es usar maven-antrun-plugin. Debes tener esto en tu pom.xml en la sección de construcción/complementos.

En el ejemplo siguiente, no olvide: - para reemplazar $ {hibernate.version} y $ {javassist.version} con la versión que está utilizando. - para modificar las reglas incluyen tener InstrumentTask sólo se ejecuta en su entidad

<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

¿Es esta una versión de maven de la otra respuesta? – sharakan

+0

No literraly, encontré esta página: http://tricksdev.blogspot.fr/2009/03/hibernate-bytecode-instrumentation.html. Pero lo adapto para usar la última versión de InstrumentTask y documentarlo. – Samuel

4

Desde Hibernate 4.2.8 se puede utilizar la hibernación-mejorar-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> 
Cuestiones relacionadas