티스토리 뷰
Java EE에서 Jakarta EE로의 전환
spring boot 3.x 버전은 java 17, jakarta EE 9+ 이상을 지원
spring boot 2.7 버전은 jakarta EE 8 을 지원
그 이하 버전은 java 1.8, java EE를 지원한다고 합니다.
java 17, wildFly 27.0.0.Final 에서는 잘 실행되는 프로젝트가
jakarta EE 8을 지원하는 wildFly 26에서는 서블릿 API 에러가 나면서 실행되지 않더라고요.
다음은 버전에 따라 생겼던 이슈들에 대해 해결한 방법입니다.
1. javax.servlet
아래와 같이 Request와 Session을 임포트하려고 했을 때 에러가 난다면
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest
The import javax.servlet cannot be resolved
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
올바른 Servlet 패키지명으로 변경해주어야합니다.
Jakarta EE 9(Tomcat 10, TomEE 9, WildFly 22 Preview, GlassFish 6, Payara 6, Liberty 22 등)의 일부인
Servlet API 버전 5.0부터 패키지 이름이 javax.*에서 jakarta.* 로 변경되었습니다.
따라서 이러한 서버 버전 이상을 대상으로 하는 경우에는 jakarta로 변경하면 됩니다.
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
# 1번 문제 참고 사이트입니다.
2. WebSecurityConfigurerAdapter
SpringSecurity에서 사용하는 WebSecurityConfigurerAdapter 에러.
The import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter cannot be resolved
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
Spring Security 5.7.0-M2에서는 사용자가 컴포넌트 기반 보안 구성으로 전환하도록 권장하기 때문에 WebSecurityConfigurerAdapter를 더 이상 사용하지 않습니다.
이 경우에는 import한 부분을 주석처리해주고 configure에도 @override 를 지워줍니다.
//@Override
protected void configure(HttpSecurity http) throws Exception {
...
페이지별 권한 부분에서 사용했던 antMatchers는 requestMatchers로 바꿔줍니다.
http
.httpBasic().disable()
.cors().configurationSource(corsConfigurationSource())
.and()
.authorizeRequests()
.requestMatchers(... // antMatchers(...를 변경
# 2번 문제 참고 사이트입니다.
https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter
3. file path
Jar 프로젝트 일때에는 아래와 같이 파일경로를 가져왔었는데요.
String FILE_NAME = "a.csv";
String BASE_PATH = new File("").getAbsolutePath();
String FILE_PATH = BASE_PATH + FILE_NAME;
FileReader filereader = new FileReader(FILE_PATH);
War (wildFly) 로 바꾸고 나니 절대경로가 wildFly 서버쪽이 되더라구요.
아래와 같이 파일 절대경로를 가져오는 방법을 변경했습니다.
classpath: 뒤에부터는 프로젝트의 src/main/resources 다음부터 적어주시면 됩니다.
File file = new PathMatchingResourcePatternResolver().getResource("classpath:" + path).getFile();
String FILE_PATH = file.getAbsolutePath();
4. mybatis-spring
Invalid value type for attribute 'factoryBeanObjectType': java.lang.String
이건 패키징과는 별개로 버전이슈가 있었던 내용입니다.
spring boot 버전을 2.x 에서 3.x으로 변경했을 때 mybatis-spring도 2.x에서 3.x으로 변경해주어야한다는 것..!
저는 spring boot 3.2.0을 썼고 아래와 같이 버전을 변경해주었더니 에러가 사라졌습니다.
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.3</version>
</dependency>
참고했던 사이트들입니다.
https://post.dooray.io/we-dooray/tech-insight-ko/back-end/4173/
https://stackoverflow.com/questions/76580588/compatibility-spring-boot-3-x-and-spring-boot-2-7-x
https://www.samsungsds.com/kr/insights/java_jakarta.html
끝!
'프로그래밍 > Java' 카테고리의 다른 글
[오류해결] java.lang.NullPointerException: Cannot invoke "service..." because "this.service" is null 에러 (37) | 2024.01.10 |
---|---|
[springboot] 토큰을 이용한 사용자인증 및 로그아웃 구현하기 (spring security 이용) (36) | 2023.12.22 |
[spring boot] WAS를 JBoss(wildfly) 사용한 개발환경 만들기-2 (43) | 2023.12.05 |
[spring boot] WAS를 JBoss(wildfly) 사용한 개발환경 만들기-1 (21) | 2023.12.02 |
[java] spring security 로그아웃기능 만들기 (+자동로그아웃) (15) | 2023.12.01 |