java spring hibernate maven java-9

Hibernate, Java 9 y SystemException



spring maven (2)

De acuerdo con la guía de migración y los documentos de java, desde el módulo java.transaction que exporta el paquete javax.transaction se ha marcado como @Deprecated .

Lo ideal es migrar su código para usar javaee/javax.transaction lugar. Actualmente, puede hacerlo utilizando el módulo automático convertido desde la dependencia:

<dependency> <groupId>javax.transaction</groupId> <artifactId>javax.transaction-api</artifactId> <version>1.2</version> </dependency>

y agregando al module-info.java lo siguiente: -

requires javax.transaction.api;

Además, mientras usa el complemento maven-failsafe-plugin asegúrese, asegúrese de estar utilizando la versión mínima compatible 2.20.1 o superior como se menciona en el documento de progreso de Maven.

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>2.20.1</version> </plugin>

@Deprecated (forRemoval = "después de la confirmación de OP")

Por otro lado, una solución temporal (ya que eventualmente estos módulos se eliminarán del JDK) podría ser hacer uso de: -

--add-modules java.transaction

Como se menciona en los comentarios, dado que la dependencia requerida para javax.transaction-api ya está disponible en el classpath, no se le debe solicitar que agregue ninguna opción de compilador o terminaría anulando el paquete actual con el módulo java.transaction El paquete javax.transaction exportado que idealmente para su caso de uso no consiste en SystemException .

He estado tratando de ejecutar la aplicación Hibernate 5.2.11 en el proyecto Java 9 / Spring Boot 1.5.x / Maven pero estoy fallando en la clase faltante:

Caused by: java.lang.NoClassDefFoundError: javax/transaction/SystemException at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:375) at org.jboss.logging.Logger$1.run(Logger.java:2554) at java.base/java.security.AccessController.doPrivileged(Native Method) at org.jboss.logging.Logger.getMessageLogger(Logger.java:2529) at org.jboss.logging.Logger.getMessageLogger(Logger.java:2516) at org.hibernate.internal.HEMLogging.messageLogger(HEMLogging.java:28) at org.hibernate.internal.HEMLogging.messageLogger(HEMLogging.java:24) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<clinit>(EntityManagerFactoryBuilderImpl.java:115) at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:54) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ... 33 more

¿Alguien ha encontrado esta excepción y conoce una solución? Intenté agregar --add-modules para javax.bind o java.se.ee pero no me ayudaron.

El error anterior se muestra en una prueba de integración mavan-failsafe (2.20.1) que inicia el contexto Spring con Hibernate. La aplicación no tiene ningún código específico de Java 9.


Esto es lo que pienso: --add-modules java.se.ee acuerdo con los módulos compartidos con Java EE no resuelto por defecto resolverá todos los módulos Java EE, utilizados para resolver API internas . Por lo tanto, los desarrolladores no necesitan agregar un módulo específico uno por uno. Por otro lado, JDK9 también está separando EE de SE. javax.transaction.SystemException ya no está en la biblioteca JDK9, pero está en la biblioteca EE. Como en java.se.ee module-info:

@SuppressWarnings({"deprecation", "removal"}) @Deprecated(since="9", forRemoval=true) module java.se.ee { requires transitive java.se; // Upgradeable modules for Java EE technologies requires transitive java.activation; requires transitive java.corba; requires transitive java.transaction; requires transitive java.xml.bind; requires transitive java.xml.ws; requires transitive java.xml.ws.annotation; }

Pero para el módulo java.transaction solo tiene: InvalidTransactionException, TransactionRequiredException, TransactionRolledbackException