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
Respuesta
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.
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). –
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>
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>
- 1. Instrumentación de una IU
- 2. tiempo de almacenamiento en caché predeterminado al utilizar Hibernate
- 3. Aviso de tiempo de compilación al utilizar 'Microsoft.Office.Interop.Word._Document.Close'
- 4. Mover la aplicación al teléfono
- 5. jpa hibernate compilación de clave externa compuesta
- 6. C++ Tiempo de compilación manipulación
- 7. ¿Cómo guardar el puntero al miembro en tiempo de compilación?
- 8. Tiempo de compilación de perfiles
- 9. De la compilación al tiempo de ejecución, ¿cómo funciona realmente la codificación de Java String?
- 10. offsetof en tiempo de compilación
- 11. Obtener tiempo de compilación JAR
- 12. Mover al inicio y al final de la búsqueda
- 13. Constantes de tiempo de compilación flexible - Marca de tiempo
- 14. ¿JAXB utiliza instrumentación de bytecode?
- 15. puede usar Hibernate y Tomcat Connection pool al mismo tiempo?
- 16. Instrumentación dinámica con Clang
- 17. hibernate mostrar el tiempo de ejecución de la consulta
- 18. Mover al eclipse Indigo?
- 19. Visual Studio 2008 - Mover archivos en la compilación a bin/
- 20. Id. De compilación de segundo nivel de caché de Hibernate
- 21. gcc: referencia indefinida a _mcount (instrumentación gprof)
- 22. Estructura de árbol de tiempo de compilación
- 23. La sobrecarga es tiempo de compilación en tiempo de ejecución y de la anulación es?
- 24. Tipo de especialización en tiempo de compilación
- 25. Comprobación del desgaste de la pila en tiempo de compilación
- 26. Grupo Hibernate por intervalo de tiempo
- 27. Crear plantillas T4 en tiempo de ejecución (tiempo de compilación)?
- 28. Cálculo de la función de tiempo de compilación Haskell
- 29. GCC optimización en tiempo flotante en tiempo de compilación
- 30. Recopilación de tiempo de compilación y condicionales
Después de activar el tiempo de construcción instrumentación No noté ningún cambio en el tiempo de carga/consumo de memoria. –