[SPRING] 최대 절전 모드, Java 9 및 SystemException
SPRING최대 절전 모드, Java 9 및 SystemException
나는 Java 9 / Spring Boot 1.5.x / Maven 프로젝트에서 최대 절전 모드 5.2.11 응용 프로그램을 실행하려했지만 클래스가 누락되어 실패했습니다.
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
이 예외가 발생하여 해결 방법을 알고있는 사람이 있습니까? javax.bind 또는 java.se.ee에 --add-modules를 추가하려고 시도했지만 도움이되지 않았습니다.
위의 에러는 Hibernate로 Spring 컨텍스트를 시작하는 mavan-failsafe (2.20.1) 통합 테스트에서 보여줍니다. 응용 프로그램에는 Java 9 특정 코드가 없습니다.
해결법
-
==============================
1.마이그레이션 가이드와 java 문서에 따르면, javax.transaction 패키지를 내보내는 모듈 java.transaction이 @Deprecated로 표시 되었기 때문입니다.
마이그레이션 가이드와 java 문서에 따르면, javax.transaction 패키지를 내보내는 모듈 java.transaction이 @Deprecated로 표시 되었기 때문입니다.
대신 javaee / javax.transaction을 사용하도록 코드를 마이그레이션해야합니다. 현재 종속물에서 자동 모듈을 변환하여 사용할 수 있습니다.
<dependency> <groupId>javax.transaction</groupId> <artifactId>javax.transaction-api</artifactId> <version>1.2</version> </dependency>
module-info.java에 다음을 추가합니다.
requires javax.transaction.api;
또한 maven-failsafe-plugin을 사용하는 동안 Maven의 진행 문서에서 언급 한 최소 호환 버전 2.20.1 이상을 사용하고 있는지 확인하십시오.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>2.20.1</version> </plugin>
@Deprecated (forRemoval = "OP 확인 후")
다른 한편, 일시적인 해결 방법 (결국이 모듈들은 JDK에서 제거 될 것이기 때문에)을 사용하는 것이 가능할 수 있습니다 :
--add-modules java.transaction
코멘트에서 언급했듯이 javax.transaction-api에 대한 필수 종속성은 클래스 경로에서 이미 사용 가능하므로 컴파일러 옵션을 추가하지 않아도됩니다. 그렇지 않으면 현재 패키지를 java.transaction 모듈로 덮어 쓰게됩니다. 이상적으로 사용 사례에 해당하는 javax.transaction 패키지가 SystemException으로 구성되지 않습니다.
-
==============================
2.이것이 내가 생각하는 것입니다. --add-modules java.eth.ee는 기본적으로 해결되지 않은 Java EE로 공유되는 모듈에 따라 내부 API를 해결하는 데 사용되는 모든 Java EE 모듈을 해결합니다. 따라서 개발자는 특정 모듈을 하나씩 추가 할 필요가 없습니다. 한편, JDK9는 SE와 EE를 분리합니다. javax.transaction.SystemException은 더 이상 JDK9 라이브러리에 없지만 EE 라이브러리에 있습니다. java.se.ee 모듈 정보에서와 같이 :
이것이 내가 생각하는 것입니다. --add-modules java.eth.ee는 기본적으로 해결되지 않은 Java EE로 공유되는 모듈에 따라 내부 API를 해결하는 데 사용되는 모든 Java EE 모듈을 해결합니다. 따라서 개발자는 특정 모듈을 하나씩 추가 할 필요가 없습니다. 한편, JDK9는 SE와 EE를 분리합니다. javax.transaction.SystemException은 더 이상 JDK9 라이브러리에 없지만 EE 라이브러리에 있습니다. java.se.ee 모듈 정보에서와 같이 :
@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; }
그러나 모듈 java.transaction의 경우에만 다음과 같습니다. InvalidTransactionException, TransactionRequiredException, TransactionRolledbackException
from https://stackoverflow.com/questions/46515230/hibernate-java-9-and-systemexception by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 보안 세션을 무효화할 수 있습니까? (0) | 2018.12.15 |
---|---|
[SPRING] java.lang.NoSuchFieldError : INSTANCE (0) | 2018.12.15 |
[SPRING] 새로운 Spring UriComponentsBuilder를 사용한 URL 인코딩 (0) | 2018.12.15 |
[SPRING] Weblogic 10.3.5 Spring 버전 무시 (0) | 2018.12.15 |
[SPRING] 클래스 경로에서 Spring WebApplicationInitializer 유형을 감지하지 못함 (0) | 2018.12.15 |