Feature ETP-4129: Fix Y27 deprecation and build warnings - #1045
Feature ETP-4129: Fix Y27 deprecation and build warnings#1045RomanMagnoli wants to merge 6 commits into
Conversation
There was a problem hiding this comment.
Pull request overview
This PR targets Java 27 deprecation/build warnings and Hibernate 6-related API updates by standardizing Log4j2 configuration for Ant-executed Java tasks and refactoring several DAL/Hibernate integration points (interceptors, generators, queries) to newer signatures/APIs.
Changes:
- Standardize Log4j2 initialization across Ant build targets by passing
-Dlog4j.configurationFile=${base.config}/log4j2.xmlto many<java>tasks. - Update Hibernate/DAL integration to reduce warnings and align with newer Hibernate APIs (typed native queries, interceptor signatures, generator interfaces, deprecation suppressions).
- Modernize a few supporting utilities/configurations (Freemarker configuration versioning, UUID generator, Redisson LocalCachedMapOptions API usage, Gradle DSL warnings).
Reviewed changes
Copilot reviewed 27 out of 28 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
src/org/openbravo/service/db/DataImportService.java |
Uses Hibernate-native mutation query API for UPDATE statements. |
src/org/openbravo/dal/xml/XMLEntityConverter.java |
Suppresses deprecation warnings at class level for Hibernate migration noise. |
src/org/openbravo/dal/xml/StaxXMLEntityConverter.java |
Suppresses deprecation warnings at class level for Hibernate migration noise. |
src/org/openbravo/dal/service/OBQuery.java |
Extends suppression to cover deprecation warnings in delete-query creation. |
src/org/openbravo/dal/service/OBDal.java |
Suppresses deprecation warnings on Hibernate 6 refresh-handling helper. |
src/org/openbravo/dal/security/OrganizationStructureProvider.java |
Converts raw native query usage to typed NativeQuery<Object[]>. |
src/org/openbravo/dal/core/SessionHandler.java |
Suppresses deprecation warnings for pool-aware save/delete overloads. |
src/org/openbravo/dal/core/OBInterceptor.java |
Migrates from EmptyInterceptor to Interceptor and updates callback signatures. |
src/org/openbravo/dal/core/OBInstantiator.java |
Suppresses deprecation warnings for Hibernate instantiator SPI usage. |
src/org/openbravo/dal/core/OBContext.java |
Adds targeted deprecation suppressions around acct schema provider fields/methods. |
src/org/openbravo/dal/core/DalSessionFactory.java |
Suppresses deprecations on a couple of delegated SessionFactory methods. |
src/org/openbravo/base/session/SessionFactoryController.java |
Updates JDBC property key usage and changes pool shutdown to use unwrapped implementor. |
src/org/openbravo/base/session/DalUUIDGenerator.java |
Reworks UUID generation to IdentifierGenerator using UUID.randomUUID() normalization. |
src/org/openbravo/base/model/ModelSessionFactoryController.java |
Migrates local interceptor from EmptyInterceptor to Interceptor with updated signatures. |
src/org/openbravo/base/gen/GenerateEntitiesTask.java |
Uses explicit Freemarker versioned Configuration/DefaultObjectWrapper constructors. |
src/com/etendoerp/sequences/services/NonTRXMetadataContributor.java |
Adds suppression for “removal” warnings. |
src/com/etendoerp/sequences/DefaultSequenceGenerator.java |
Migrates sequence generator to Hibernate 6 generator APIs (BeforeExecutionGenerator, etc.). |
src/com/etendoerp/redis/interfaces/CachedConcurrentMap.java |
Updates Redisson LocalCachedMapOptions package/API usage and local-cached map creation. |
src/build.xml |
Adds Log4j2 sysproperty to Ant java tasks; adds cleanup before entity generation. |
src-wad/build.xml |
Adds Log4j2 sysproperty to Ant java tasks. |
src-util/modulescript/build.xml |
Adds Log4j2 sysproperty to Ant java tasks. |
src-util/buildvalidation/build.xml |
Adds Log4j2 sysproperty to Ant java tasks. |
src-trl/build.xml |
Adds Log4j2 sysproperty to Ant java tasks. |
src-db/database/build.xml |
Adds Log4j2 sysproperty to Ant java tasks. |
modules_core/org.openbravo.service.json/src-test/org/openbravo/service/json/test/JsonConversionTest.java |
Updates interceptor callback signatures to match Hibernate API changes. |
modules_core/org.openbravo.client.kernel/src/org/openbravo/client/kernel/event/PersistenceEventOBInterceptor.java |
Updates interceptor callback signatures and removes unused Serializable import. |
build.xml |
Adds Log4j2 sysproperty to Ant java tasks. |
build.gradle |
Fixes Gradle DSL deprecation warnings (property assignment style). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Warning Git Police 👮One or more commit messages do not meet the required standards. Please correct them.
|
1 similar comment
|
Warning Git Police 👮One or more commit messages do not meet the required standards. Please correct them.
|
a8fed3b to
fc064e1
Compare
|
Warning Git Police 👮One or more commit messages do not meet the required standards. Please correct them.
|
fc064e1 to
3fc1a7c
Compare
|
Warning Git Police 👮One or more commit messages do not meet the required standards. Please correct them.
|
3fc1a7c to
b8ef1a4
Compare
|

0 New Issues
0 Fixed Issues
0 Accepted Issues
Contexto
Este PR resuelve los warnings de deprecación emitidos durante la compilación javac de Y27 (Hibernate 6, Redisson nuevo, FreeMarker, Gradle 8+). El objetivo es llegar a 0 warnings de deprecación en la salida del compilador.
Cambios por área
1. Build scripts — configuración Log4j2 (
build.xml,src/build.xml,src-db/,src-trl/,src-util/,src-wad/)Por qué: Las tareas
<java fork="true">de Ant lanzan una JVM nueva que no hereda la configuración de Log4j2 del proceso padre. Sinlog4j.configurationFile, Log4j2 imprime warnings de "no configuration found" en cada tarea forkeada.Qué se hizo: Se agregó
<sysproperty key="log4j.configurationFile" file="${base.config}/log4j2.xml"/>a todas las tareas<java>que usanfork="true".Extra en
generate.entities.quick: Se agregó un<delete>del archivoMETA-INF/services/org.hibernate.service.spi.ServiceContributorantes de regenerar entidades, para evitar registros duplicados delNonTRXMetadataContributorentre builds incrementales.2.
build.gradle— sintaxis Gradle 8+Por qué: Gradle 8 deprecó la asignación de propiedades sin
=(property assignment).url "..."yexceptionFormat "full"emiten warnings.Qué se hizo:
url "..."→url = "..."yexceptionFormat "full"→exceptionFormat = "full".3. Hibernate Interceptor —
OBInterceptor,PersistenceEventOBInterceptor,ModelSessionFactoryController,JsonConversionTest,HiddenUpdateTestPor qué: En Hibernate 6,
EmptyInterceptorfue deprecado. La forma correcta es implementar directamente la interfazInterceptor, que en Hibernate 6 tiene todos sus métodos comodefault(comportamiento vacío por defecto), por lo que no es necesario implementar los métodos que no se usan.Adicionalmente, las firmas de los métodos del
Interceptorcambiaron: el parámetroid/keypasó deSerializableaObject.Qué se hizo:
extends EmptyInterceptor→implements Interceptoren todas las clases afectadas.Serializable id/key→Object id/keyen todas las firmas sobreescritas.super.afterTransactionBegin/Completion/preFlush()— al implementar la interfaz directamente, esas llamadas asuperya no tienen sentido (apuntaban a implementaciones vacías deEmptyInterceptor).import java.io.Serializabledonde ya no se usa.4.
DalUUIDGenerator— migración deUUIDGeneratorPor qué:
org.hibernate.id.UUIDGeneratorestá deprecado en Hibernate 6. La forma recomendada es implementarIdentifierGeneratordirectamente y generar el UUID conjava.util.UUID.randomUUID().Qué se hizo:
extends UUIDGenerator→implements IdentifierGenerator. La lógica de negocio se preservó: si el objeto ya tiene un ID asignado se reutiliza; si no, se genera uno nuevo en formato de 32 caracteres sin guiones.5.
DefaultSequenceGenerator— migración deAnnotationValueGenerationPor qué: La API
org.hibernate.tuple.AnnotationValueGeneration/GenerationTiming/ValueGeneratorfue reemplazada en Hibernate 6 porAnnotationBasedGenerator+BeforeExecutionGenerator.Qué se hizo: Migración completa al nuevo API:
AnnotationBasedGenerator<Sequence>yBeforeExecutionGenerator.initialize(Sequence, Class<?>)→initialize(Sequence, Member, GeneratorCreationContext).getValueGenerator()→generate(SharedSessionContractImplementor, Object, Object, EventType).getGenerationTiming()→getEventTypes()retornandoEventTypeSets.INSERT_ONLY.referenceColumnInSql()ygetDatabaseGeneratedReferencedColumnValue()(no existen en el nuevo API, el generador in-memory los hace innecesarios).6.
SessionFactoryController— APIs deprecadas de HibernatePor qué:
AvailableSettings.USERfue movido aJdbcSettings.JAKARTA_JDBC_USER.sessionFactory.getSessionFactoryOptions()está deprecado a favor de hacerunwrap(SessionFactoryImplementor.class).Qué se hizo:
AvailableSettings.USER→JdbcSettings.JAKARTA_JDBC_USER.sessionFactory.getSessionFactoryOptions().getServiceRegistry()→sessionFactory.unwrap(SessionFactoryImplementor.class).getServiceRegistry().7.
CachedConcurrentMap— migración API RedissonPor qué: En Redisson 3.x,
LocalCachedMapOptionsfue movido al paqueteorg.redisson.api.optionsy su factory method cambió: ya no existedefaults(), el nombre del mapa ahora se configura en el objeto de opciones. La firma degetLocalCachedMap()también cambió — ya no acepta el nombre como parámetro separado.Qué se hizo:
import org.redisson.api.LocalCachedMapOptions→import org.redisson.api.options.LocalCachedMapOptions.LocalCachedMapOptions.defaults()→LocalCachedMapOptions.name(name).getLocalCachedMap(name, options)→getLocalCachedMap(options).8. JPA — queries tipadas y mutation queries
Por qué:
Session.createNativeQuery(String)sin tipo de retorno está deprecado en favor de la versión tipada. Para queries de mutación (UPDATE/DELETE), Hibernate 6 introdujocreateNativeMutationQuery()como API semánticamente correcta.Qué se hizo:
OrganizationStructureProvider:createNativeQuery(sql)→createNativeQuery(sql, Object[].class)— elimina los@SuppressWarnings("rawtypes"/"unchecked")asociados.DataImportService:createNativeQuery(sql).executeUpdate()→createNativeMutationQuery(sql).executeUpdate()(x2).9.
GenerateEntitiesTask— FreeMarker versioned configurationPor qué: El constructor sin argumentos
new Configuration()ynew DefaultObjectWrapper()de FreeMarker 2.3.x están deprecados — requieren la versión de incompatibilidad como argumento para garantizar comportamiento consistente.Qué se hizo:
new Configuration()→new Configuration(Configuration.VERSION_2_3_34)ynew DefaultObjectWrapper()→new DefaultObjectWrapper(Configuration.VERSION_2_3_34).10. Supresiones con
@SuppressWarnings("deprecation")— deuda técnica conocidaLos siguientes casos usan APIs deprecadas que requieren una refactorización más profunda fuera del alcance de este ticket. Se suprime el warning para mantener la salida del compilador limpia, pero quedan pendientes:
DalSessionFactorygetFilterDefinition(),getSessionFactoryOptions()SessionFactorySessionHandlersession.saveOrUpdate(),session.delete()merge()/remove()implica revisar comportamiento de todos los callersOBDalOBQuerydeleteQuery()OBInstantiatorEntityInstantiatorSPIOBContextAcctSchemaStructureProviderXMLEntityConverter,StaxXMLEntityConverterBaseXMLEntityConverterNonTRXMetadataContributorMetadataContributor