마이그레이션 가이드
애플리케이션을 하나의 주요 Red Hat JBoss Enterprise Application Platform 버전에서 다음 버전으로 마이그레이션하는 방법.
초록
Red Hat 문서에 대한 피드백 제공
문서에 대한 의견을 보내 주셔서 감사합니다. 피드백을 제공하기 위해 문서의 텍스트를 강조 표시하고 주석을 추가할 수 있습니다. Red Hat 설명서에 대한 피드백을 제출하는 방법을 알아보려면 절차의 단계를 따르십시오.
사전 요구 사항
- Red Hat 고객 포털에 로그인합니다.
- Red Hat 고객 포털에서 다중 페이지 HTML 형식으로 문서를 봅니다.
절차
피드백 (Fedback)을 클릭하여 기존 reader 주석을 확인합니다.
참고피드백 기능은 다중 페이지 HTML 형식으로만 활성화됩니다.
- 피드백을 제공할 문서의 섹션을 강조 표시합니다.
선택한 텍스트 옆에 표시되는 프롬프트 메뉴에서 Add Feedback(피드백 추가 )을 클릭합니다.
텍스트 상자가 페이지 오른쪽에 있는 피드백 섹션에 열립니다.
텍스트 상자에 피드백을 입력하고 Submit(제출 )을 클릭합니다.
설명서 문제가 생성되어 있습니다.
- 이 문제를 보려면 피드백 보기에서 문제 추적기 링크를 클릭합니다.
보다 포괄적 수용을 위한 오픈 소스 용어 교체
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.
1장. 소개
이 가이드에서는 Red Hat JBoss Enterprise Application Platform 7에서 Red Hat JBoss Enterprise Application Platform 6 애플리케이션을 성공적으로 실행하고 배포하는 데 필요한 변경 사항을 설명합니다. 이 릴리스에서 사용할 수 있는 새로운 기능, 더 이상 사용되지 않거나 지원되지 않는 기능, 애플리케이션 동작의 변경 사항을 방지하는 데 필요할 수 있는 애플리케이션 및 서버 구성 업데이트에 대한 정보를 제공합니다.
또한 Java 애플리케이션의 마이그레이션을 간소화하는 Migration Toolkit for Applications 및 서버 구성을 업데이트하는 JBoss Server 마이그레이션 툴과 같은 마이그레이션에 도움이 되는 툴에 대한 정보를 제공합니다.
애플리케이션이 성공적으로 배포되고 실행되면 개별 구성 요소를 업그레이드하여 JBoss EAP 7의 새로운 기능과 기능을 사용할 수 있습니다.
JBoss EAP 5 애플리케이션을 JBoss EAP 7로 직접 마이그레이션하려면 JBoss EAP 의 이전 릴리스에서 마이그레이션을 참조하십시오.
1.1. 마이그레이션 및 업그레이드 정보
주요 업그레이드
애플리케이션이 한 주요 릴리스에서 다른 릴리스(예: JBoss EAP 6.4에서 JBoss EAP 7.0)로 이동되면 주요 업그레이드 또는 마이그레이션이 필요합니다. 애플리케이션이 Jakarta EE 사양을 따르는 경우 더 이상 사용되지 않는 API에 액세스하지 않으며 독점 코드가 포함되지 않은 경우 애플리케이션 코드 변경 없이 JBoss EAP 7에서 애플리케이션을 실행할 수 있습니다. 그러나 서버 구성은 JBoss EAP 7에서 변경되어 마이그레이션이 필요합니다. 이 유형의 마이그레이션은 이 가이드에서 설명합니다.
마이너 업데이트
JBoss EAP는 정기적으로 버그 수정, 보안 수정 및 새로운 기능을 포함하는 마이너 업데이트인 포인트 릴리스를 제공합니다. 포인트 릴리스에서 변경한 내용은 본 가이드와 7.3.0 릴리스 노트에 설명되어 있습니다.
JBoss Server 마이그레이션 도구를 사용하여 한 지점 릴리스에서 다른 지점(예: JBoss EAP 7.0에서 JBoss EAP 7.1으로 자동 업그레이드)으로 자동 업그레이드할 수 있습니다. 툴을 구성하고 실행하는 방법에 대한 자세한 내용은 JBoss Server 마이그레이션 툴 사용을 참조하십시오.
원하는 경우 서버 구성을 수동으로 업그레이드할 수 있습니다. 수동 업그레이드를 수행하는 방법에 대한 지침은 JBoss EAP 패치 및 업그레이드 가이드의 JBoss EAP 업그레이드에 설명되어 있습니다.
누적 패치
JBoss EAP는 버그 및 보안 수정이 포함된 누적 패치도 주기적으로 제공합니다. 누적 패치는 마지막 숫자까지 릴리스를 늘립니다(예: 7.1.0에서 7.1.1으로). 패치 설치는 JBoss EAP 패치 및 업그레이드 가이드에서 다룹니다.
1.2. 이 문서에서 EAP_HOME 사용 정보
이 문서에서는 EAP_HOME
변수를 사용하여 JBoss EAP 설치 경로를 나타냅니다. 이 변수를 JBoss EAP 설치의 실제 경로로 바꿉니다.
-
ZIP 설치 방법을 사용하여 JBoss EAP를 설치한 경우 설치 디렉터리는 ZIP 아카이브를 추출한
jboss-eap-7.4
디렉토리입니다. -
RPM 설치 방법을 사용하여 JBoss EAP를 설치한 경우 설치 디렉토리는
/opt/rh/eap7/root/usr/share/wildfly/
입니다. 설치 프로그램을 사용하여 JBoss EAP를 설치한 경우
EAP_HOME
의 기본 경로는${user.home}/EAP-7.4.0
입니다.-
Red Hat Enterprise Linux 및 Solaris의 경우:
/home/USER_NAME/EAP-7.4.0/
-
Microsoft Windows의 경우:
C:\Users\USER_NAME\EAP-7.4.0\
-
Red Hat Enterprise Linux 및 Solaris의 경우:
Red Hat CodeReady Studio 설치 프로그램을 사용하여 JBoss EAP 서버를 설치하고 구성한 경우
EAP_HOME
의 기본 경로는${user.home}/devstudio/runtimes/jboss-eap
입니다.-
Red Hat Enterprise Linux의 경우:
/home/USER_NAME/devstudio/runtimes/jboss-eap/
-
Microsoft Windows의 경우:
C:\Users\USER_NAME\devstudio\runtimes\jboss-eap
또는C:\Documents and Settings\USER_NAME\devstudio\runtimes\jboss-eap\
-
Red Hat Enterprise Linux의 경우:
Red Hat CodeReady Studio에서 Target 런타임 을 7.4 또는 이후 런타임 버전으로 설정하면 프로젝트가 Jakarta EE 8 사양과 호환됩니다.
EAP_HOME
은 환경 변수가 아닙니다. JBOSS_HOME
은 스크립트에서 사용되는 환경 변수입니다.
2장. 마이그레이션 준비
Oracle은 Jakarta EE 8 호환이 가능하도록 Jakarta EE 8 구현(예: JBoss EAP)에서 사용하는 Jakarta EE 8 TCK를 Java EE 8 TCK를 기증했습니다. Jakarta EE 8 API는 Java EE 8 API와 동일합니다. Jakarta EE 8 사양(기술)은 Java EE 8 사양(기술)과 동일합니다.
2.1. 준비 개요
JBoss EAP 7에서는 JBoss EAP 6 애플리케이션의 이전 버전과의 호환성을 제공하기 위해 노력했습니다. 그러나 애플리케이션에서 더 이상 사용되지 않는 기능이나 JBoss EAP 7에서 제거된 기능을 사용하는 경우 애플리케이션 코드를 변경해야 할 수 있습니다.
또한 이 릴리스에서는 JBoss EAP 7 애플리케이션의 배포에 영향을 줄 수 있는 여러 가지 사항이 변경되었습니다. 애플리케이션을 마이그레이션하기 전에 몇 가지 조사 및 계획을 수행하는 것이 좋습니다.
- Jakarta EE 8의 기능에 익숙해지십시오.
- JBoss EAP 7의 새로운 기능 검토.
- 더 이상 사용되지 않고 지원되지 않는 기능 목록을 검토합니다.
- JBoss EAP 7 시작하기 가이드 의 자료 검토.
- 마이그레이션 작업에 도움이 되는 툴을 살펴보십시오.
기능 변경, 개발 자료 및 마이그레이션 작업을 지원하는 툴에 익숙해지면 애플리케이션 및 서버 구성을 평가하여 JBoss EAP 7에서 실행하는 데 필요한 변경 사항을 확인할 수 있습니다.
2.2. Jakarta EE 8 기능 검토
자카르타 EE 8에는 프라이빗 및 퍼블릭 클라우드에서 기능 풍부한 애플리케이션을 보다 쉽게 개발하고 실행할 수 있도록 개선된 기능이 많이 포함되어 있습니다. HTML5, WebSocket, JSON, 배치 및 동시성 유틸리티와 같은 새로운 기능과 최신 표준을 통합했습니다. 업데이트: Jakarta Persistence 2.2, Jakarta RESTful Web Services 2.1, Jakarta Servlet 4.0, Jakarta Expression Language 3.0, Jakarta Messaging 2.0. Jakarta Server Faces 2.3, Jakarta Enterprise Beans 3.2, Contexts and Dependency Injection 2.0 및 Jakarta Bean Validation 2.0.
Jarkata EE Platform 8에서 Jakarta EE 8에 대한 자세한 내용을 확인할 수 있습니다.
2.3. Java EE 7 기능 검토
JBoss EAP 6.4에서 마이그레이션하는 경우 Java EE 7에는 프라이빗 및 퍼블릭 클라우드에서 기능 풍부한 애플리케이션을 보다 쉽게 개발하고 실행할 수 있는 여러 가지 개선 사항이 포함되어 있습니다. HTML5, WebSocket, JSON, 배치 및 동시성 유틸리티와 같은 새로운 기능과 최신 표준을 통합합니다. 업데이트에는 JPA 2.1, JAX-RS 2.0, Servlet 3.1, Expression Language 3.0, JMS 2.0이 포함됩니다. JSF 2.2, EJB 3.2, CDI 1.2 및 Bean Validation 1.1.
Oracle 웹 사이트에서 자습서를 비롯한 Java EE 7에 대한 자세한 정보를 확인할 수 있습니다. Java™ EE 설명서.
2.4. JBoss EAP 7의 새로운 기능 검토
JBoss EAP 7에는 이전 릴리스에 비해 몇 가지 주목할 만한 업그레이드 및 개선 사항이 포함되어 있습니다. 이 섹션에서는 JBoss EAP 7 포인트 릴리스에 도입된 새로운 기능 및 개선 사항을 소개합니다.
JBoss EAP 7.0 도입된 새로운 기능 및 개선 사항
- 자카르타 EE 8
- JBoss EAP 7은 Jakarta EE 8의 인증된 구현으로, 웹 프로필과 전체 플랫폼 사양을 모두 충족합니다. 또한 Jakarta Contexts and Dependency Injection 2.0 및 Jakarta WebSocket 1.1의 최신 반복을 지원합니다.
- Undertow
- Undertow는 JBoss EAP 7에 포함된 새로운 경량의 유연하고 성능이 뛰어난 웹 서버로서, JBoss Web을 대체합니다. Java로 작성되어 처리량과 확장성을 극대화하도록 설계되었습니다. 새로운 HTTP/2 표준과 같은 최신 웹 기술을 지원합니다.
- Apache ActiveMQ Artemis
- Apache ActiveMQ Artemis는 새로운 JBoss EAP 7 기본 제공 메시징 프로바이더입니다. HornetQ에서 가져온 코드를 기반으로 이 Apache 하위 프로젝트는 입증된 비차단 아키텍처를 기반으로 탁월한 성능을 제공합니다.
- ironJacamar 1.2
- 최신 ironJacamar는 자카르타 커넥터 및 데이터 소스에 대한 안정적이고 풍부한 기능을 제공합니다.
- JBossWS 5
- 5세대 JBossWS는 대폭적인 도약으로, JBoss EAP 7 웹 서비스에 새로운 기능과 성능을 개선했습니다.
- RESTEasy 3
- JBoss EAP 7에는 최신 RESTEasy 생성이 포함되어 있습니다. 또한 표준 Jakarta RESTful Web Services 2.1을 뛰어넘어 JSON 웹 암호화, jackson, Jakarta JSON Processing 1.1, vimtison 등의 유용한 확장 기능을 제공합니다.
- OpenJDK ORB
- JBoss EAP 7은 JacORB IIOP 구현을 OpenJDK ORB의 다운스트림 분기로 대체하여 JVM ORB와의 상호 운용성을 개선했습니다.
- 풍부한 기능 클러스터링
- 클러스터링 지원은 JBoss EAP 7에서 크게 리팩토링되었으며 애플리케이션별로 액세스할 수 있는 몇 가지 공용 API를 포함합니다.
- 포트 감소
- JBoss EAP 7은 HTTP 업그레이드를 활용하여 관리 포트(9990) 및 애플리케이션 포트(8080)의 두 가지 HTTP 포트로 멀티플렉싱되는 거의 모든 프로토콜을 이동했습니다.
- 향상된 로깅
- 관리 API는 이제 서버에서 사용 가능한 로그 파일을 나열하고 보거나 기본 패턴 포맷터 이외의 사용자 지정 포맷터를 정의하는 기능을 지원합니다. 배포의 로깅 설정도 크게 향상되었습니다.
JBoss EAP 7.0에 도입된 새로운 기능의 전체 목록은 JBoss EAP 7.0.0 릴리스 노트 의 새로운 기능 및 개선 사항을 참조하십시오.
JBoss EAP 7.1에 도입된 새로운 기능 및 개선 사항
- Elytron
- WildFly Elytron 프로젝트를 기반으로 하는 Elytron은 JBoss EAP 7.1의 새 보안 프레임워크입니다. 전체 애플리케이션 서버에서 보안을 통합하도록 설계되었습니다.
- 관리 콘솔
-
추가 하위 시스템을 구성하고, 향상된 트랜잭션 하위 시스템 및
트랜잭션
리소스 지표를 제공하고, 많은 추가 구성을 관리하는 기능을 제공하도록 관리 콘솔이 향상되었습니다. - 관리 CLI
-
관리 CLI는
echo-command
인수를 통해 응답 및 파일 연결, 모듈 구성 및 디버깅 지원에 대한 향상된 지원을 제공합니다.
JBoss EAP 7.1에 도입된 새로운 기능의 전체 목록은 Red Hat 고객 포털의 7.1.0 릴리스 노트 에서 새로운 기능 및 개선 사항을 참조하십시오.
JBoss EAP 7.2에 도입된 새로운 기능 및 개선 사항
- 자카르타 EE 8
- JBoss EAP 7.2는 Jakarta EE 8의 인증된 구현입니다. Jakarta Servlet 4.0, Jakarta Persistence 2.2, Contexts and Dependency Injection 2.0, Jakarta Server Faces 2.3, Jakarta JSON Binding 1.0, Jakarta JSON Processing 1.1, Jakarta RESTful Web Services 2.1 등의 지원이 포함되어 있습니다. Jakarta Enterprise Edition(Jakarta EE) 8 플랫폼에서 지원되는 기술에 대한 자세한 내용은 Jakarta EE Platform 8을 참조하십시오.
JBoss EAP 7.3에 도입된 새로운 기능 및 개선 사항
- 클러스터링
-
이제
mod_cluster
하위 시스템에서 새 특성initial-load
를 정의합니다.initial-load
특성은 클러스터에 가입하는 동안 과부하를 방지하도록 새로 가입된 노드의 부하 값을 점진적으로 늘리는 데 도움이 됩니다. - Eclipse MicroProfile 지표
- Eclipse MicroProfile 지표 기능은 JBoss EAP에 대한 모니터링 데이터를 제공합니다. 이 릴리스에서는 Prometheus 형식으로 JBoss EAP 지표를 제공하기 위해 SmallR Metrics 구성 요소를 개선합니다.
- Jakarta Enterprise Beans
- MDB(메시지 기반 빈)는 이제 둘 이상의 배달 그룹에 속할 수 있습니다.
- Elytron
-
이 릴리스의
elytron
하위 시스템은 이제 JASPI(Java Authentication SPI for Containers)에서 서블릿 프로파일 구현을 제공합니다. Elytron은 이제 JwtValidator의 향상된 지원을 포함합니다. 또한 Jakarta EE Security API(Security 1.0 API) 지원도 포함되어 있습니다. 이 지원에 상응하는 Jakarta는 Jakarta Security 1.0 사양에 정의되어 있습니다. - 자카르타 EE 8
- JBoss EAP 7.3은 Jakarta EE 8 플랫폼을 기반으로 합니다.
- Jakarta EE 8의 BOM 변경
JBoss EAP 7.3에서 Jakarta EE 8 플랫폼으로 전환한 결과 그룹 ID
org.jboss.bom
의 일부 JBoss EAP BOM이 대체되었습니다. 애플리케이션이 교체된 BOM을 사용하는 경우 애플리케이션을 JBoss EAP 7.3 릴리스로 마이그레이션할 때 새 BOM의 Artifact ID를 포함하도록 POM 프로젝트를 업데이트합니다. 다음과 같은 BOM이 교체되었습니다.표 2.1. BOM Artifacts가 Jakarta EE의 그룹 ID
org.jboss.bom
에서 대체이전 Artifact ID 새 Artifact ID jboss-eap-javaee8
jboss-eap-jakartaee8
jboss-eap-javaee8-with-tools
jboss-eap-jakartaee8-with-tools
프로젝트 종속성 구성에 대한 자세한 내용은 개발 가이드 의 프로젝트 종속성 관리를 참조하십시오.
- Jakarta EE 8 백워즈 호환성
- JBoss EAP 7.3은 Jakarta EE 8과의 이전 버전과의 호환성을 유지합니다. Jakarta EE 8은 다른 Jakarta EE 버전과 이전 버전과도 호환됩니다. 이전의 모든 JBoss EAP 7 애플리케이션은 JBoss EAP 7.3에 배포해야 합니다.
- JBoss EAP Operator
-
JBoss EAPnow는 일반적인 배포 관련 작업을 자동화하기 위해 JBoss EAP별 컨트롤러인 EAP 운영자를 제공합니다. EAP 운영자는 애플리케이션 클러스터에서 안전한 트랜잭션 복구를 보장하고
StatefulSet
을 사용하여 Jakarta Enterprise Beans 원격 및 트랜잭션 복구 처리를 적절히 처리합니다. - 관리 콘솔
- 이제 관리 콘솔에서 외부 자카르타 메시징 서버 리소스를 구성할 수 있습니다.
- 메시징
-
journal-file-open-timeout
속성은 이제 메시지 저널 파일을 여는 시간 초과 값을 구성합니다.
정적 HTTP 로드 밸런서에 대한 기존 지원 외에도 mod_cluster를 사용하는 로드 밸런서가 지원됩니다.
- OpenShift Enhancements
- OpenShift에서 S2I 빌드를 위해 JBoss EAP 관리 CLI를 활용합니다. OpenShift에서는 Galleon 계층을 사용하여 이미지 풋프린트를 사용자 지정할 수 있습니다. Jakarta Enterprise Beans 원격 및 트랜잭션 복구 처리 또한 OpenShift 내에서 개선되었습니다.
- 보안
-
이 릴리스의
server-ssl-sni-context
는 서버 측 SNI 일치를 제공합니다. 제공된 호스트 이름이 일치하지 않는 경우 기본값과 함께 호스트 이름과 SSL 컨텍스트의 상관 관계를 연결하는 일치하는 규칙을 제공합니다.
JBoss EAP 7.3에 도입된 새로운 기능의 전체 목록은 Red Hat 고객 포털의 7.3.0 릴리스 노트 의 새로운 기능 및 개선 사항을 참조하십시오.
2.5. 더 이상 사용되지 않거나 지원되지 않는 기능 목록 검토
애플리케이션을 JBoss EAP 7.4로 마이그레이션하기 전에 이전 JBoss EAP 릴리스에서 사용 가능한 일부 기능이 더 이상 사용되지 않거나 지원되지 않을 수 있습니다. 유지 관리 비용이 높고 커뮤니티에 대한 관심이 적고 대체 솔루션보다 우수한 일부 기술에 대한 지원이 제거되었습니다.
다음은 더 이상 사용되지 않고 지원되지 않는 일부 기능에 대한 간략한 요약입니다.
- 엔터티 빈
- 엔터티 빈은 더 이상 지원되지 않습니다. 애플리케이션에서 엔터티 빈을 사용하는 경우 훨씬 더 성능이 뛰어나고 유연한 API를 제공하는 Jakarta Persistence를 사용하도록 코드를 마이그레이션해야 합니다.
- JAX-RPC
- Jakarta XML Web Services는 훨씬 더 정확하고 완전한 솔루션을 제공하므로 Jakarta XML RPC를 위해 작성된 코드를 자카르타 XML 웹 서비스를 사용하도록 마이그레이션해야 합니다.
- 자카르타 배포
- Jakarta Deployment는 여러 공급자의 툴이 자카르타 EE 8 플랫폼 제품에서 애플리케이션을 구성하고 배포할 수 있도록 하는 계약을 정의한 것은 널리 채택되지 않았습니다. 관리 콘솔, 관리 CLI, 배포 스캐너 또는 Maven과 같은 애플리케이션 배포에 대해 또 다른 JBoss EAP 지원 옵션을 사용해야 합니다.
- 일반 자카르타 메시징 리소스 어댑터
- 자카르타 메시징 공급자에 연결하도록 일반 자카르타 메시징 리소스 어댑터를 구성하는 기능은 더 이상 지원되지 않습니다.
- IO 하위 시스템
- IO 버퍼 풀은 더 이상 사용되지 않지만 현재 릴리스에서는 기본값으로 설정되어 있습니다. 원하는 경우 Undertow 바이트 버퍼 풀을 기본값으로 설정할 수 있습니다.
- 캐시 저장소
-
원격
캐시 저장소는핫로드
캐시 저장소를 사용하는 대신 더 이상 사용되지 않습니다. - 플랫폼 및 기능
- 이전 릴리스에서 사용 가능한 여러 플랫폼 및 데이터베이스는 JBoss EAP 7.4에서 더 이상 사용되지 않습니다.
JBoss EAP 7.0에서 더 이상 사용되지 않고 지원되지 않는 기능의 전체 목록은 Red Hat 고객 포털의 JBoss EAP 7.0.0 릴리스 노트 에서 지원되지 않거나 사용되지 않는 기능을 참조하십시오.
JBoss EAP 7.1에서 더 이상 사용되지 않고 지원되지 않는 기능의 전체 목록은 Red Hat 고객 포털의 JBoss EAP 7.1.0 릴리스 노트 에서 지원되지 않거나 사용되지 않는 기능을 참조하십시오.
JBoss EAP 7.2에서 더 이상 사용되지 않고 지원되지 않는 기능의 전체 목록은 Red Hat 고객 포털의 JBoss EAP 7.2.0 릴리스 노트 에서 지원되지 않거나 사용되지 않는 기능을 참조하십시오.
JBoss EAP 7.3에서 더 이상 사용되지 않고 지원되지 않는 기능의 전체 목록은 Red Hat 고객 포털의 JBoss EAP 7.3.0 릴리스 노트 에서 지원되지 않거나 더 이상 사용되지 않는 기능을 참조하십시오.
2.6. JBoss EAP 시작 방법 검토
JBoss EAP Getting Started 가이드를 검토하십시오. 여기에는 다음과 같은 중요한 정보가 포함됩니다.
- JBoss EAP 7을 다운로드하고 설치하는 방법
- Red Hat CodeReady Studio를 다운로드하고 설치하는 방법
- 개발 환경에 맞게 Maven을 구성하고, 프로젝트 종속성을 관리하며, JBoss EAP BOM(Bill of Expertise) 아티팩트를 사용하도록 프로젝트를 구성하는 방법
- 제품과 함께 제공되는 빠른 시작 예제 애플리케이션을 다운로드하고 실행하는 방법
2.7. 마이그레이션 분석 및 계획
각 애플리케이션 및 서버 구성은 고유하므로 마이그레이션을 시도하기 전에 기존 애플리케이션 및 서버 플랫폼의 구성 요소와 아키텍처를 철저히 이해해야 합니다. 마이그레이션 계획에는 다음 정보를 고려하는 프로덕션에 대한 상세한 테스트 및 롤아웃 로드맵이 포함되어야 합니다.
- 마이그레이션에 대한 응답자 식별
- 마이그레이션을 담당하는 이해관계자, 프로젝트 관리자, 개발자, 관리자 및 기타 사람을 식별합니다.
- Application Server Platform 구성 및 하드웨어 검토
기존 애플리케이션 서버 및 플랫폼 구성을 검사하여 JBoss EAP 7의 기능 변경의 영향을 확인합니다. 검토에는 다음 항목이 포함되어야 합니다.
- 운영 체제 및 버전
- 애플리케이션에서 사용하는 데이터베이스
- 웹 서버
- 보안 아키텍처
- 프로세서 수 및 유형
- 메모리 양
- 물리적 디스크 스토리지의 용량
- 데이터베이스 또는 메시징 데이터 마이그레이션
- 마이그레이션의 영향을 받을 수 있는 기타 구성 요소
- 현재 프로덕션 환경 검토
마이그레이션 프로세스를 테스트 및 스테이징하기 위해 최대한 긴밀하게 프로덕션 환경을 다시 생성할 계획이어야 합니다.
- 클러스터링 구성을 모두 고려합니다. 클러스터를 마이그레이션하는 방법에 대한 자세한 내용은 JBoss EAP 패치 및 업그레이드 가이드에서 클러스터 업그레이드를 참조하십시오.
- 현재 대규모 관리형 도메인을 실행 중인 경우 점진적 마이그레이션 접근 방식을 고려하십시오.
- 데이터베이스 또는 메시징 데이터를 마이그레이션해야 하는지 여부를 결정합니다.
- 기존 애플리케이션 검사 및 이해
기존 JBoss EAP 6 애플리케이션을 철저하게 검토합니다. 다음과 같은 아키텍처, 기능, 기능 및 구성 요소에 대해 숙지하십시오.
- JVM 버전
- 다른 Red Hat 애플리케이션 서버 미들웨어 구성 요소와의 통합
- 독점형 타사 소프트웨어와의 통합
- 교체가 필요한 더 이상 사용되지 않는 기능 사용
- 배포 설명자, Java Naming 및 Directory Interface, 지속성, JDBC 구성 및 풀링, 자카르타 메시징 주제 및 큐, 로깅을 포함한 애플리케이션 구성
JBoss EAP 7으로 마이그레이션하는 동안 수정해야 하는 코드 또는 구성 비호환성을 식별합니다.
- 상세한 테스트 계획 만들기
- 이 계획에는 회귀 테스트 및 수용 기준 요구 사항이 포함되어야 합니다.
- 또한 성능 테스트도 포함해야 합니다.
- 롤아웃 전에 마이그레이션을 테스트할 수 있도록 프로덕션 환경에 최대한 가까운 스테이징 환경을 설정합니다.
- 백업 및 백아웃 계획을 작성하십시오!
- 마이그레이션 프로세스에 사용 가능한 리소스 확인
- 개발 팀의 기술을 평가하고 교육 또는 추가 컨설팅 도움말을 계획합니다.
- 마이그레이션 프로세스 중에 스테이징 및 테스트하는 데 추가 하드웨어 및 기타 리소스가 필요합니다.
- 공식 교육이 필요한지 여부를 결정합니다. 이 경우 일정에 추가합니다.
- 계획 실행
- 필요한 리소스를 수집하고 마이그레이션 계획을 구현합니다.
애플리케이션을 수정하기 전에 백업 복사본을 만들어야 합니다.
2.8. 중요한 데이터 백업 및 서버 상태 검토
애플리케이션을 마이그레이션하기 전에 다음과 같은 잠재적 문제를 알고 있어야 합니다.
-
마이그레이션에서 임시 폴더가 제거될 수 있습니다.
data/content/
디렉터리에 저장된 배포는 마이그레이션 전에 백업하고 완료한 후 복원해야 합니다. 그렇지 않으면 컨텐츠가 누락되어 서버가 시작되지 않습니다. -
마이그레이션 전에 열려 있는 트랜잭션을 처리하고
data/tx-object-store/
트랜잭션 디렉터리를 삭제합니다. -
업그레이드 후에도 적용 가능한지 확인하려면
data/timer-service-data
의 영구 타이머 데이터를 점검해야 합니다. 업그레이드하기 전에 해당 디렉터리에서deployment-*
파일을 검토하여 여전히 사용 중인 타이머를 확인합니다.
시작하기 전에 현재 서버 구성 및 애플리케이션을 백업해야 합니다.
2.9. RPM 설치 마이그레이션
단일 Red Hat Enterprise Linux Server에 2개 이상의 RPM 설치 JBoss EAP 인스턴스를 보유하는 것은 지원되지 않습니다. 따라서 JBoss EAP 7로 마이그레이션할 때 새 시스템으로 JBoss EAP 설치를 마이그레이션하는 것이 좋습니다.
JBoss EAP 6에서 JBoss EAP 7로 JBoss EAP RPM 설치를 마이그레이션하는 경우 JBoss EAP 7이 기존 JBoss EAP RPM 설치가 없는 시스템에 설치되어 있는지 확인합니다.
RPM을 사용하여 JBoss EAP 7을 설치하려면 JBoss EAP 설치 가이드를 참조하십시오.
이 가이드의 마이그레이션 지침은 JBoss EAP의 마이그레이션 RPM 설치에도 적용되지만 ZIP 또는 설치 프로그램 설치와 비교하여 RPM 설치에 맞게 일부 단계(예: JBoss EAP 시작 방법)를 변경해야 할 수도 있습니다.
2.10. JBoss EAP를 서비스로 마이그레이션
JBoss EAP 6를 서비스로 실행하는 경우 JBoss EAP 7에 대한 업데이트된 구성 지침에 대한 JBoss EAP 설치 가이드에서 서비스로 실행하도록 JBoss EAP 구성을 검토합니다.
3장. 마이그레이션 지원 툴
3.1. Migration Toolkit for Applications를 사용하여 마이그레이션 애플리케이션 분석
MTA(Migration Toolkit for Applications)는 Java 애플리케이션의 마이그레이션을 간소화하는 데 도움이 되는 확장 가능하고 사용자 지정 가능한 규칙 기반 툴 세트입니다. 마이그레이션하려는 애플리케이션에서 사용하는 API, 기술 및 아키텍처를 분석하고 각 애플리케이션에 대한 상세한 마이그레이션 보고서를 제공합니다. 이러한 보고서는 다음과 같은 정보를 제공합니다.
- 필요한 마이그레이션 변경 사항에 대한 자세한 설명
- 보고된 변경이 필수인지 아니면 선택 사항인지 여부
- 보고된 변경이 복잡하거나 간단한지 여부
- 마이그레이션을 변경해야 하는 코드 링크
- 힌트 및 필요한 변경을 수행하는 방법에 대한 정보 링크
- 각 마이그레이션 문제에 대한 예상 작업 수준과 애플리케이션을 마이그레이션하기 위한 총 예상 노력
MTA를 사용하여 JBoss EAP 6 애플리케이션의 코드와 아키텍처를 분석한 후 JBoss EAP 7로 마이그레이션할 수 있습니다. JBoss EAP 6에서 JBoss EAP 7로의 마이그레이션을 위한 MTA 규칙 세트는 JBoss EAP 7로 마이그레이션할 때 대체 구성으로 교체해야 하는 XML 설명자 및 특정 애플리케이션 코드 및 매개 변수에 대해 보고합니다.
Migration Toolkit for Applications를 사용하여 JBoss EAP 6 애플리케이션을 분석하는 방법에 대한 자세한 내용은 Migration Toolkit for Applications Getting Started Guide를 참조하십시오.
3.2. 서버 구성 마이그레이션에 JBoss Server 마이그레이션 도구 사용
JBoss Server 마이그레이션 도구는 기존 구성을 유지하면서 JBoss EAP 7에 새 기능과 설정을 포함하도록 서버 구성을 업데이트하는 데 선호되는 방법입니다. JBoss Server 마이그레이션 도구는 기존 JBoss EAP 서버 구성 파일을 읽고 새 하위 시스템에 대한 구성을 추가하고, 기존 하위 시스템 구성을 새 기능으로 업데이트하고, 사용되지 않는 하위 시스템 구성을 제거합니다.
JBoss Server 마이그레이션 도구를 사용하여 다음 구성에 대해 독립 실행형 서버 및 관리형 도메인을 마이그레이션할 수 있습니다.
- JBoss EAP 7.4로 마이그레이션
JBoss Server 마이그레이션 도구는 JBoss EAP 7.4와 함께 제공되므로 별도의 다운로드 또는 설치가 필요하지 않습니다. 이 툴은 JBoss EAP 6.4 및 모든 7.x 릴리스에서 JBoss EAP 7.4로의 마이그레이션을 지원합니다.
EAP_HOME/bin
디렉터리에 있는jboss-server-migration
스크립트를 실행하여 툴을 실행합니다. 툴을 구성하고 실행하는 방법에 대한 자세한 내용은 JBoss Server 마이그레이션 툴 사용을 참조하십시오.이 버전의 툴이 지원되므로 이 버전의 JBoss Server 마이그레이션 도구를 사용하여 서버 구성을 JBoss EAP 7.4로 마이그레이션하는 것이 좋습니다.
- WildFly에서 JBoss EAP로 마이그레이션
WildFly 서버에서 JBoss EAP로 마이그레이션하려면 JBoss Server Migration Tool GitHub 리포지토리에서 JBoss Server 마이그레이션 툴의 최신 바이너리 배포를 다운로드해야 합니다. 이 오픈 소스 독립 실행형 버전의 툴은 여러 버전의 WildFly 서버에서 JBoss EAP로의 마이그레이션을 지원합니다. 이 버전의 툴 설치 및 실행 방법에 대한 자세한 내용은 JBoss Server 마이그레이션 툴 사용자 가이드를 참조하십시오.
중요JBoss Server 마이그레이션 툴의 바이너리 배포는 지원되지 않습니다. 이전 릴리스에서 JBoss EAP를 마이그레이션하는 경우 지원되는 이 툴 버전을 사용하여 서버 구성을 JBoss EAP 7.4로 마이그레이션하는 것이 좋습니다.
4장. 서버 설정 변경
4.1. RPM 설치 변경 사항
JBoss EAP 6에서 RPM 설치의 기본 경로는 /usr/share/jbossas/
디렉토리였습니다.
JBoss EAP 7은 Red Hat Software Collections 규칙을 사용하도록 빌드되었습니다. 소프트웨어 컬렉션의 루트 디렉토리는 일반적으로 소프트웨어 컬렉션과 기본 시스템 설치 간의 충돌을 방지하기 위해 /opt/
디렉토리에 있습니다. 파일 시스템 계층 구조 표준(FHS)에서 /opt/
디렉터리를 사용하는 것이 좋습니다. 그 결과 RPM 설치의 기본 경로가 JBoss EAP 7에서 /opt/rh/eap7/root/usr/share/wildfly/
로 변경되었습니다.
4.2. 서버 구성 마이그레이션 옵션
JBoss EAP 6에서 JBoss EAP 7으로 서버 구성을 마이그레이션하려면 JBoss Server 마이그레이션 도구를 사용하거나 관리 CLI 마이그레이션
작업을 통해 수동 마이그레이션을 수행할 수 있습니다.
JBoss Server 마이그레이션 도구
JBoss Server 마이그레이션 도구는 기존 구성을 유지하면서 JBoss EAP 7에 새 기능과 설정을 포함하도록 구성을 업데이트하는 데 선호되는 방법입니다. 툴을 구성하고 실행하는 방법에 대한 자세한 내용은 JBoss Server 마이그레이션 툴 사용을 참조하십시오.
관리 CLI 마이그레이션 작업
관리 CLI migrate
작업을 사용하여 JBoss EAP 6 서버 구성 파일의 jacorb
,메시징
및 웹
하위 시스템을 업데이트하여 새 릴리스에서 실행되도록 할 수 있지만 결과는 완전한 JBoss EAP 7 구성이 아닙니다. 예를 들면 다음과 같습니다.
-
이 작업은 이제 JBoss EAP 7에서 사용되는 새로운
http-remoting
및 새 포트 설정으로 원본원격
프로토콜 및 포트 설정을 업데이트하지 않습니다. - 구성에는 새로운 JBoss EAP 하위 시스템 또는 클러스터된 Singleton 배포 또는 정상 종료와 같은 기능이 포함되지 않습니다.
- 구성에는 배치 처리와 같은 Jakarta EE 8 기능이 포함되지 않습니다.
-
마이그레이션
작업은ejb3
하위 시스템 구성을 마이그레이션하지 않습니다. 가능한 Jakarta Enterprise Beans 마이그레이션 문제에 대한 자세한 내용은 Jakarta Enterprise Beans Server Configuration Changes 를 참조하십시오.
마이그레이션 작업을 사용하여 서버 구성을 마이그레이션하는
방법에 대한 자세한 내용은 Management CLI Migration Operation 을 참조하십시오.
4.3. 관리 CLI 마이그레이션 작업
관리 CLI를 사용하여 JBoss EAP 7에서 실행되도록 JBoss EAP 6 서버 구성 파일을 업데이트할 수 있습니다. 관리 CLI는 이전 릴리스에서 새 구성으로 jacorb
,messaging
및 web
하위 시스템을 자동으로 업데이트하는 마이그레이션
작업을 제공합니다. 마이그레이션을 수행하기 전에 jacorb
,messaging
및 web
하위 시스템에 대해 describe-migration
작업을 실행하여 제안된 마이그레이션 구성 변경 사항을 검토할 수도 있습니다. cmp
,jaxr
또는 스레드
하위 시스템에 대한 대체 항목이 없으며 서버 구성에서 제거해야 합니다.
마이그레이션
작업의 제한 사항은 Server Configuration Migration Options 를 참조하십시오. JBoss Server 마이그레이션 도구는 기존 구성을 유지하면서 JBoss EAP 7에 새 기능과 설정을 포함하도록 구성을 업데이트하는 데 선호되는 방법입니다. 툴을 구성하고 실행하는 방법에 대한 자세한 내용은 JBoss Server 마이그레이션 툴 사용을 참조하십시오.
표 4.1. 하위 시스템 마이그레이션 및 관리 CLI 작업
JBoss EAP 6 하위 시스템 | JBoss EAP 7 하위 시스템 | 관리 CLI 작업 |
---|---|---|
CMP | 교체 없음 | 제거 |
jacorb | iiop-openjdk | migrate |
JAXR | 교체 없음 | 제거 |
메시징 | messaging-activemq | migrate |
스레드 | 교체 없음 | 제거 |
web | Undertow | migrate |
서버 및 관리 CLI 시작
JBoss EAP 7에서 실행되도록 JBoss EAP 6 서버 구성을 업데이트하려면 아래 단계를 따르십시오.
- 시작하기 전에 Back Up Important Data를 검토하고 서버 상태를 검토합니다. 여기에는 서버가 양호한 상태인지 확인하고 적절한 파일이 백업되는지 확인하는 데 중요한 정보가 포함되어 있습니다.
JBoss EAP 6 구성으로 JBoss EAP 7 서버를 시작합니다.
- JBoss EAP 7 서버 구성 파일을 백업합니다.
이전 릴리스의 구성 파일을 JBoss EAP 7 디렉터리에 복사합니다.
$ cp EAP6_HOME/standalone/configuration/standalone-full.xml EAP7_HOME/standalone/configuration
JBoss EAP 7 설치 디렉터리로 이동하고
--start-mode=admin-only
인수로 서버를 시작합니다.$ bin/standalone.sh -c standalone-full.xml --start-mode=admin-only
참고서버를 시작할 때 서버 로그에 다음
org.jboss.as.controller.management-operation
ERRORS가 표시됩니다. 이러한 오류는 예상되며 레거시 하위 시스템 구성을 제거하거나 JBoss EAP 7로 마이그레이션해야 함을 나타냅니다.- WFLYCTL0402: 레거시 확장 기능 'org.jboss.as.cmp'에서 제공하는 하위 시스템 [cmp]은 이 버전을 실행하는 서버에서 지원되지 않습니다. 서버가 작동하기 전에 하위 시스템과 확장 기능을 모두 제거하거나 마이그레이션해야 합니다.
- WFLYCTL0402: 레거시 확장 기능 'org.jboss.as.jacorb'에서 제공하는 하위 시스템은 이 버전을 실행하는 서버에서 지원되지 않습니다. 서버가 작동하기 전에 하위 시스템과 확장 기능을 모두 제거하거나 마이그레이션해야 합니다.
- WFLYCTL0402: 레거시 확장 기능 'org.jboss.as.jaxr'에서 제공하는 하위 시스템은 이 버전을 실행하는 서버에서 지원되지 않습니다. 서버가 작동하기 전에 하위 시스템과 확장 기능을 모두 제거하거나 마이그레이션해야 합니다.
- WFLYCTL0402: 레거시 확장 기능 'org.jboss.as.messaging'에서 제공하는 하위 시스템은 이 버전을 실행하는 서버에서 지원되지 않습니다. 서버가 작동하기 전에 하위 시스템과 확장 기능을 모두 제거하거나 마이그레이션해야 합니다.
- WFLYCTL0402: 레거시 확장 기능 'org.jboss.as.threads'에서 제공하는 하위 시스템은 이 버전을 실행하는 서버에서 지원되지 않습니다. 서버가 작동하기 전에 하위 시스템과 확장 기능을 모두 제거하거나 마이그레이션해야 합니다.
- WFLYCTL0402: 레거시 확장 기능 'org.jboss.as.web'에서 제공하는 하위 시스템 [web]은 이 버전을 실행하는 서버에서 지원되지 않습니다. 서버가 작동하기 전에 하위 시스템과 확장 기능을 모두 제거하거나 마이그레이션해야 합니다.
새 터미널을 열고 JBoss EAP 7 설치 디렉터리로 이동한 다음
--controller=remote://localhost:9990
인수를 사용하여 관리 CLI를 시작합니다.$ bin/jboss-cli.sh --connect --controller=remote://localhost:9990
JacORB, 메시징 및 웹 하위 시스템 마이그레이션
마이그레이션을 수행하기 전에 하위 시스템에 대한 구성 변경 사항을 검토하려면
describe-migration
작업을 실행합니다.describe-migration
작업은 다음 구문을 사용합니다./subsystem=SUBSYSTEM_NAME:describe-migration
다음 예제에서는 JBoss EAP 7로 마이그레이션할 때 JBoss EAP 6.4
standalone-full.xml
구성 파일에 대한 구성 변경 사항을 설명합니다. 가독성을 높이고 공간을 절약하기 위해 항목이 출력에서 제거되었습니다.예: describe-migration 작업
/subsystem=messaging:describe-migration { "outcome" => "success", "result" => { "migration-warnings" => [], "migration-operations" => [ { "operation" => "add", "address" => [("extension" => "org.wildfly.extension.messaging-activemq")], "module" => "org.wildfly.extension.messaging-activemq" }, { "operation" => "add", "address" => [("subsystem" => "messaging-activemq")] }, <!-- *** Entries removed for readability *** --> { "operation" => "remove", "address" => [("subsystem" => "messaging")] }, { "operation" => "remove", "address" => [("extension" => "org.jboss.as.messaging")] } ] } }
migrate
작업을 실행하여 하위 시스템 구성을 JBoss EAP 7에서 대체하는 하위 시스템으로 마이그레이션합니다. 이 작업은 다음 구문을 사용합니다./subsystem=SUBSYSTEM_NAME:migrate
참고메시징
하위 시스템에서describe-migration
및migrate
작업을 사용하면 기존 클라이언트의 액세스를 구성하는 인수를 전달할 수 있습니다. 명령 구문에 대한 자세한 내용은 Messaging Subsystem Migration and Forward Compatibility 를 참조하십시오.명령의 결과 및 결과를 검토합니다. 작업이 성공적으로 완료되고 "마이그레이션 경고" 항목이 없는지 확인하십시오. 즉, 하위 시스템의 마이그레이션 구성이 완료되었습니다.
예제: 마이그레이션에 성공한 마이그레이션(No Warnings)
/subsystem=messaging:migrate { "outcome" => "success", "result" => {"migration-warnings" => []} }
로그에 "마이그레이션 경고" 항목이 표시되면 서버 구성의 마이그레이션이 성공적으로 완료되었음을 나타내지만 모든 요소 및 특성을 마이그레이션할 수 없었습니다. "마이그레이션-경고"에서 제공하는 제안 사항을 따르고 이러한 구성을 수정하려면 추가 관리 CLI 명령을 실행해야 합니다. 다음은 "migration-warnings"를 반환하는
마이그레이션
작업의 예입니다.예: 경고로 작업 마이그레이션
/subsystem=messaging:migrate { "outcome" => "success", "result" => {"migration-warnings" => [ "WFLYMSG0080: Could not migrate attribute group-address from resource [ (\"subsystem\" => \"messaging-activemq\"), (\"server\" => \"default\"), (\"broadcast-group\" => \"groupB\") ]. Use instead the socket-binding attribute to configure this broadcast-group.", "WFLYMSG0080: Could not migrate attribute group-port from resource [ (\"subsystem\" => \"messaging-activemq\"), (\"server\" => \"default\"), (\"broadcast-group\" => \"groupB\") ]. Use instead the socket-binding attribute to configure this broadcast-group.", "WFLYMSG0080: Could not migrate attribute local-bind-address from resource [ (\"subsystem\" => \"messaging-activemq\"), (\"server\" => \"default\"), (\"broadcast-group\" => \"groupA\") ]. Use instead the socket-binding attribute to configure this broadcast-group.", "WFLYMSG0080: Could not migrate attribute local-bind-port from resource [ (\"subsystem\" => \"messaging-activemq\"), (\"server\" => \"default\"), (\"broadcast-group\" => \"groupA\") ]. Use instead the socket-binding attribute to configure this broadcast-group.", "WFLYMSG0080: Could not migrate attribute group-address from resource [ (\"subsystem\" => \"messaging-activemq\"), (\"server\" => \"default\"), (\"broadcast-group\" => \"groupA\") ]. Use instead the socket-binding attribute to configure this broadcast-group.", "WFLYMSG0080: Could not migrate attribute group-port from resource [ (\"subsystem\" => \"messaging-activemq\"), (\"server\" => \"default\"), (\"broadcast-group\" => \"groupA\") ]. Use instead the socket-binding attribute to configure this broadcast-group." ]} }
참고각 하위 시스템에 대한
마이그레이션
및describe-migration
경고 목록은 이 가이드 의 끝에 있는 참조 에 있습니다.서버 구성 파일을 검토하여 확장 프로그램, 하위 시스템 및 네임스페이스가 업데이트되었으며 기존 하위 시스템 구성이 JBoss EAP 7로 마이그레이션되었는지 확인합니다.
참고다음 명령을 사용하여 각
jacorb
,messaging
및web
하위 시스템에 대해 이 프로세스를 반복해야 합니다./subsystem=jacorb:migrate /subsystem=messaging:migrate /subsystem=web:migrate
서버 구성에서
cmp
,jaxr
및스레드
하위 시스템 및 확장 기능을 제거합니다.관리 CLI 프롬프트에서 다음 명령을 실행하여 사용되지 않는
cmp
,jaxr
및스레드
하위 시스템을 제거합니다./subsystem=cmp:remove /extension=org.jboss.as.cmp:remove /subsystem=jaxr:remove /extension=org.jboss.as.jaxr:remove /subsystem=threads:remove /extension=org.jboss.as.threads:remove
일반 작업을 위해 서버를 다시 시작하기 전에 messaging
,jacorb
및 web
하위 시스템을 마이그레이션하고 cmp
,jaxr
및 스레드
확장 및 하위 시스템을 제거해야 합니다. 이 프로세스를 완료하기 전에 서버를 다시 시작해야 하는 경우 서버 시작 명령줄에 --start-mode=admin-only
인수를 포함해야 합니다. 이렇게 하면 구성 변경 사항을 계속할 수 있습니다.
4.4. 변경 사항 로깅
4.4.1. 메시지 접두사 변경 사항 로깅
로그 메시지 앞에 메시지를 보고하는 하위 시스템의 프로젝트 코드 앞에 추가합니다. 모든 로그 메시지의 접두사가 JBoss EAP 7에서 변경되었습니다.
JBoss EAP 7에서 사용되는 새 로그 메시지 프로젝트 코드 접두사의 전체 목록은 JBoss EAP 개발 가이드 의 JBoss EAP에 사용된 프로젝트 코드를 참조하십시오.
4.4.2. Root Logger 콘솔 핸들러 변경
JBoss EAP 7.0 루트 로거에는 모든 도메인 서버 프로필과 standalone -full-ha
프로필을 제외한 모든 기본 독립 실행형 프로필에 대한 콘솔 로그 핸들러가 포함되어 있습니다. JBoss EAP 7.1부터 루트 로거에는 관리형 도메인 프로필에 대한 콘솔 로그 핸들러가 더 이상 포함되지 않습니다. 호스트 컨트롤러 및 프로세스 컨트롤러는 기본적으로 콘솔에 기록합니다. JBoss EAP 7.0에서 제공된 동일한 기능을 수행하려면 JBoss EAP 의 구성 가이드에서 콘솔 로그 핸들러 구성을 참조하십시오.
4.5. 웹 서버 설정 변경
4.5.1. 웹 하위 시스템을 Undertow로 교체
Undertow는 JBoss EAP 7에서 웹 서버로 JBoss Web을 대체합니다. 즉, 레거시 웹
하위 시스템 구성을 새 JBoss EAP 7 undertow
하위 시스템 구성으로 마이그레이션해야 합니다.
-
서버 구성 파일에서
urn:jboss:domain:web:2.2
하위 시스템 구성 네임스페이스가urn:jboss:domain:undertow:10.0
네임스페이스로 교체되었습니다. -
EAP_HOME/modules/system/layers/base/
에 있는org.jboss.as.web
확장 모듈이org.wildfly.extension.undertow
확장 모듈로 교체되었습니다.
관리 CLI migrate
작업을 사용하여 서버 구성 파일에서 웹
하위 시스템을 마이그레이션할 수
있습니다. 그러나 이 작업은 모든 JBoss Web 하위 시스템 구성을 마이그레이션할 수 없습니다. "migration-warning" 항목이 표시되면 추가 관리 CLI 명령을 실행하여 해당 구성을 Undertow로 마이그레이션해야 합니다. 관리 CLI 마이그레이션
작업에 대한 자세한 내용은 Management CLI Migration Operation 을 참조하십시오.
다음은 JBoss EAP 6.4의 기본 웹
하위 시스템 구성의 예입니다.
<subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default-host" native="false"> <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/> <virtual-server name="default-host" enable-welcome-root="true"> <alias name="localhost"/> <alias name="example.com"/> </virtual-server> </subsystem>
다음은 JBoss EAP 7.4의 default undertow
하위 시스템 구성의 예입니다.
<subsystem xmlns="urn:jboss:domain:undertow:10.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other"> <buffer-cache name="default"/> <server name="default-server"> <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/> <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/> <host name="default-host" alias="localhost"> <location name="/" handler="welcome-content"/> <http-invoker security-realm="ApplicationRealm"/> </host> </server> ... </subsystem>
4.5.2. JBoss Web Rewrite Conditions 마이그레이션
관리 CLI 마이그레이션
작업은 재작성 조건을 자동으로 마이그레이션할 수 없습니다. 해당 이미지는 "마이그레이션 경고"로 보고되며 수동으로 마이그레이션해야 합니다. Undertow Predicates Attributes 및 Handlers 를 사용하여 JBoss EAP 7에서 동등한 구성을 생성할 수 있습니다.
다음은 재작성
구성을 포함하는 JBoss EAP 6의 웹
하위 시스템 구성의 예입니다.
<subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default" native="false"> <virtual-server name="default" enable-welcome-root="true"> <alias name="localhost"/> <rewrite name="test" pattern="(.*)/toberewritten/(.*)" substitution="$1/rewritten/$2" flags="NC"/> <rewrite name="test2" pattern="(.*)" substitution="-" flags="F"> <condition name="get" test="%{REQUEST_METHOD}" pattern="GET"/> <condition name="andCond" test="%{REQUEST_URI}" pattern=".*index.html" flags="NC"/> </rewrite> </virtual-server> </subsystem>
관리 CLI 마이그레이션 작업 지침에 따라 서버와 관리 CLI를 시작한 다음 다음 명령을 사용하여 웹
하위 시스템 구성 파일을 마이그레이션합니다.
/subsystem=web:migrate
위의 구성에서 마이그레이션
작업을 실행할 때 다음 "migration-warnings"가 보고됩니다.
/subsystem=web:migrate { "outcome" => "success", "result" => {"migration-warnings" => [ "WFLYWEB0002: Could not migrate resource { \"pattern\" => \"(.*)\", \"substitution\" => \"-\", \"flags\" => \"F\", \"operation\" => \"add\", \"address\" => [ (\"subsystem\" => \"web\"), (\"virtual-server\" => \"default-host\"), (\"rewrite\" => \"test2\") ] }", "WFLYWEB0002: Could not migrate resource { \"test\" => \"%{REQUEST_METHOD}\", \"pattern\" => \"GET\", \"flags\" => undefined, \"operation\" => \"add\", \"address\" => [ (\"subsystem\" => \"web\"), (\"virtual-server\" => \"default-host\"), (\"rewrite\" => \"test2\"), (\"condition\" => \"get\") ] }", "WFLYWEB0002: Could not migrate resource { \"test\" => \"%{REQUEST_URI}\", \"pattern\" => \".*index.html\", \"flags\" => \"NC\", \"operation\" => \"add\", \"address\" => [ (\"subsystem\" => \"web\"), (\"virtual-server\" => \"default-host\"), (\"rewrite\" => \"test2\"), (\"condition\" => \"andCond\") ] }" ]} }
서버 구성 파일을 검토하고 undertow
하위 시스템에 대한 다음 구성이 표시됩니다.
재작성 구성이 삭제됩니다.
<subsystem xmlns="urn:jboss:domain:undertow:10.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other"> <buffer-cache name="default"/> <server name="default-server"> <http-listener name="http" socket-binding="http"/> <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/> <host name="default-host" alias="localhost, example.com"> <location name="/" handler="welcome-content"/> </host> </server> <servlet-container name="default"> <jsp-config/> </servlet-container> <handlers> <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/> </handlers> </subsystem>
관리 CLI를 사용하여 필터를 생성하여 undertow 하위 시스템에서
재작성 구성을 대체합니다. 각 명령에 "{"outcome" ✓ "success"}"가 표시되어야 합니다.
# Create the filters /subsystem=undertow/configuration=filter/expression-filter="test1":add(expression="path('(.*)/toberewritten/(.*)') -> rewrite('$1/rewritten/$2')") /subsystem=undertow/configuration=filter/expression-filter="test2":add(expression="method('GET') and path('.*index.html') -> response-code(403)") # Add the filters to the default server /subsystem=undertow/server=default-server/host=default-host/filter-ref="test1":add /subsystem=undertow/server=default-server/host=default-host/filter-ref="test2":add
업데이트된 서버 구성 파일을 검토합니다. 이제 JBoss Web 하위 시스템이 undertow
하위 시스템에서 완전히 마이그레이션되고 구성됩니다.
<subsystem xmlns="urn:jboss:domain:undertow:10.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other"> <buffer-cache name="default"/> <server name="default-server"> <http-listener name="http" socket-binding="http"/> <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/> <host name="default-host" alias="localhost, example.com"> <location name="/" handler="welcome-content"/> <filter-ref name="test1"/> <filter-ref name="test2"/> </host> </server> <servlet-container name="default"> <jsp-config/> </servlet-container> <handlers> <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/> </handlers> <filters> <expression-filter name="test1" expression="path('(.*)/toberewritten/(.*)') -> rewrite('$1/rewritten/$2')"/> <expression-filter name="test2" expression="method('GET') and path('.*index.html') -> response-code(403)"/> </filters> </subsystem>
관리 CLI를 사용하여 필터 및 핸들러를 구성하는 방법에 대한 자세한 내용은 JBoss EAP 7 구성 가이드에서 웹 서버 구성을 참조하십시오.
4.5.3. JBoss Web System 속성 마이그레이션
이전 JBoss EAP 릴리스에서는 시스템 속성을 사용하여 기본 JBoss Web 동작을 수정할 수 있습니다. Undertow에서 동일한 동작을 구성하는 방법에 대한 자세한 내용은 JBoss Web System Properties Migration Reference를 참조하십시오.
4.5.4. 액세스 로그 헤더 패턴 업데이트
JBoss EAP 6.4에서 JBoss EAP 7로 마이그레이션하는 경우 액세스 로그에서 더 이상 예상 "참조자" 및 "사용자 에이전트" 값을 작성하지 않는 것을 알 수 있습니다. 이는 JBoss EAP 6.4에 포함된 JBoss Web에서 access-log
에서 %{headername}i
패턴을 사용하여 들어오는 헤더를 기록했기 때문입니다.
예제: JBoss EAP 6.4의 액세스 로그 형식
<access-log pattern="%h %l %u %t "%T sec" "%r" %s %b "%{Referer}i" "%{User-agent}i""/>
JBoss EAP 7에서 Undertow를 사용하도록 변경하면 수신 헤더의 패턴이 %{i,headername}
으로 변경되었습니다.
예제: JBoss EAP 7의 액세스 형식 헤더
<access-log pattern="%h %l %u %t "%T sec" "%r" %s %b "%{i,Referer}" "%{i,User-Agent}""/>
4.5.5. 글로벌 마이그레이션
JBoss EAP의 이전 릴리스에서는 센서가 지원되었습니다. 센서는 요청을 변경하거나 추가 처리를 수행하기 위해 서블릿 필터 전에 애플리케이션의 요청 처리 파이프라인에 삽입된 사용자 지정 클래스입니다.
- 글로벌 센서는 배포된 모든 애플리케이션의 요청 처리 파이프라인에 삽입되며 서버 구성 파일에 구성됩니다.
- Authenticator wheel은 요청의 자격 증명을 인증합니다.
-
사용자 지정 애플리케이션 센서는
org.apache.catalina.valves.ValveBase
클래스를 확장하여 생성되었으며jboss-web.xml
설명자 파일의<valve>
요소에서 구성됩니다. 이러한 센서는 수동으로 마이그레이션해야 합니다.
이 섹션에서는 글로벌 센서를 마이그레이션하는 방법에 대해 설명합니다. 사용자 지정 및 인증 센서의 마이그레이션에 대해서는 본 가이드의 Migrate Custom Application(사용자 정의 애플리케이션 마이그레이션) 섹션에서 설명합니다.
JBoss EAP 7의 JBoss Web을 대체하는 Undertow는 전역 센서를 지원하지 않지만 Undertow 핸들러를 사용하여 유사한 기능을 수행할 수 있어야 합니다. Undertow에는 공통 기능을 제공하는 여러 기본 제공 핸들러가 포함되어 있습니다. 또한 사용자 지정 게이지 기능을 교체하는 데 사용할 수 있는 사용자 지정 핸들러를 생성하는 기능을 제공합니다.
애플리케이션에서 센서를 사용하는 경우 JBoss EAP 7로 마이그레이션할 때 동일한 기능을 수행하기 위해 적절한 Undertow 핸들러 코드로 교체해야 합니다.
핸들러 구성 방법에 대한 자세한 내용은 JBoss EAP 7 구성 가이드에서 핸들러 구성을 참조하십시오.
필터 구성 방법에 대한 자세한 내용은 JBoss EAP 7 구성 가이드에서 필터 구성을 참조하십시오.
JBoss 웹 사이트 마이그레이션
다음 표에는 JBoss Web에서 이전 릴리스의 JBoss EAP 릴리스와 해당 Undertow 기본 제공 핸들러가 나열되어 있습니다. JBoss 웹 센서는 org.apache.catalina.valves
패키지에 있습니다.
표 4.2. 핸들러에 대한 매핑
확대/축소 | 핸들러 |
---|---|
AccessLogValve | io.undertow.server.handlers.accesslog.AccessLogHandler |
CrawlerSessionManagerValve | io.undertow.servlet.handlers.CrawlerSessionManagerHandler |
ExtendedAccessLogValve | io.undertow.server.handlers.accesslog.AccessLogHandler |
JDBCAccessLogValve |
자세한 내용은 아래 |
RemoteAddrValve | io.undertow.server.handlers.IPAddressAccessControlHandler |
RemoteHostValve | io.undertow.server.handlers.AccessControlListHandler |
RemoteIpValve | io.undertow.server.handlers.ProxyPeerAddressHandler |
RequestDumperValve | io.undertow.server.handlers.RequestDumpingHandler |
RewriteValve | 이러한 센서를 수동으로 마이그레이션하는 방법은 JBoss Web Rewrite Conditions 마이그레이션을 참조하십시오. |
StuckThreadDetectionValve | io.undertow.server.handlers.StuckThreadDetectionHandler |
관리 CLI 마이그레이션
작업을 사용하여 다음 기준을 충족하는 글로벌 센서를 자동으로 마이그레이션할 수 있습니다.
- 이는 수동 프로세싱이 필요하지 않은 이전 표에 나열된 센서로 제한됩니다.
-
서버 구성 파일의
웹
하위 시스템에서 정의해야 합니다.
관리 CLI 마이그레이션
작업에 대한 자세한 내용은 Management CLI Migration Operation 을 참조하십시오.
JDBCAccessLogValve 수동 마이그레이션 절차
org.apache.catalina.valve.JDBCAccessLogValve
브릿지는 규칙에 대한 예외이며 자동으로 마이그레이션할 수 없습니다. Undertow .server.handlers.JDBCLogHandler
. 다음 예제를 마이그레이션하려면 아래 단계를 수행하십시오.
<valve name="jdbc" module="org.jboss.as.web" class-name="org.apache.catalina.valves.JDBCAccessLogValve"> <param param-name="driverName" param-value="com.mysql.jdbc.Driver" /> <param param-name="connectionName" param-value="root" /> <param param-name="connectionPassword" param-value="password" /> <param param-name="connectionURL" param-value="jdbc:mysql://localhost:3306/wildfly?zeroDateTimeBehavior=convertToNull" /> <param param-name="format" param-value="combined" /> </valve>
- 로그 항목을 저장할 데이터베이스에 대한 드라이버 모듈을 생성합니다.
데이터베이스의 데이터 소스를 구성하고 데이터 소스
하위 시스템에서
사용 가능한 드라이버 목록에 드라이버를 추가합니다.<datasources> <datasource jndi-name="java:jboss/datasources/accessLogDS" pool-name="accessLogDS" enabled="true" use-java-context="true"> <connection-url>jdbc:mysql://localhost:3306/wildfly?zeroDateTimeBehavior=convertToNull</connection-url> <driver>mysql</driver> <security> <user-name>root</user-name> <password>Password1!</password> </security> </datasource> ... <drivers> <driver name="mysql" module="com.mysql"> <driver-class>com.mysql.jdbc.Driver</driver-class> </driver> ... </drivers> </datasources>
다음
표현식:
를 구성합니다.jdbc-access-log(datasource=DATASOURCE_JNDI_NAME)를 사용하여
filterundertow 하위 시스템에서
expression-<filters> <expression-filter name="jdbc-access" expression="jdbc-access-log(datasource='java:jboss/datasources/accessLogDS')" /> ... </filters>
4.5.6. Set-Cookie Behavior에 대한 변경 사항
Set-Cookie
HTTP 응답 헤더 구문(예: RFC2109 및 RFC2965)에 대한 이전 사양은 쿠키 값을 인용할 때 쿠키 값에 공백 및 기타 구분 기호 문자를 허용합니다. JBoss EAP 6.4의 JBoss Web은 이전 사양을 준수하고 구분 기호 문자가 포함된 경우 쿠키 값을 자동으로 인용했습니다.
Set-Cookie
HTTP 응답 헤더 구문에 대한 RFC6265 사양은 Set-Cookie
응답 헤더의 쿠키 값이 특정 제약 조건을 준수해야 한다고 명시합니다. 예를 들어 US-ASCII 문자여야 하지만 CTRL(controls), 공백, 큰따옴표, 쉼표, 세미콜론 또는 백슬래시 문자를 포함할 수 없습니다.
JBoss EAP 7.0에서 누적 패치 Red Hat JBoss Enterprise Application Platform 7.0 업데이트 08 이전에 Undertow는 이러한 잘못된 문자를 제한하지 않으며 제외된 문자가 포함된 쿠키를 따옴표로 묶지 않습니다. 이 누적 패치 또는 최신 누적 패치를 적용하면 the io.undertow.cookie.DEFAULT_ENABLE_RFC6265_COOKIE_VALIDATION 시스템 속성을
규격 쿠키 검증을 활성화할 수 있습니다.
true
로 설정하여 RFC6265
기본적으로 Undertow는 JBoss EAP 7.1부터 RFC6265 준수 쿠키 검증을 활성화하지 않습니다. 제외된 문자가 포함된 쿠키를 따옴표로 지정합니다. JBoss EAP 7.1부터는 io.undertow.cookie.DEFAULT_ENABLE_RFC6265_COOKIE_VALIDATION
시스템 속성을 사용하여 RFC6265 준수 쿠키 검증을 활성화할 수 없습니다. 대신 rfc6265-cookie-validation
리스너 특성을 true
로 설정하여 HTTP, HTTPS 또는 AJP 리스너에 대한 RFC6265 호환 쿠키 검증을 활성화합니다. 이 속성의 기본값은 false
입니다. 다음 예제에서는 HTTP 리스너에 대해 RFC6265 호환 쿠키 검증을 활성화합니다.
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=rfc6265-cookie-validation,value=true)
4.5.7. HTTP 메서드 호출 동작 변경
JBoss Web을 웹 서버로 포함하는 JBoss EAP 6.4에서는 기본적으로 HTTP TRACE
메서드 호출이 허용되었습니다.
JBoss EAP 7에서 JBoss Web을 웹 서버로 대체하는 Undertow는 기본적으로 HTTP TRACE
메서드 호출을 허용하지 않습니다. 이 설정은 undertow 하위 시스템에서
http
특성을 사용하여 구성됩니다. 다음 -listener 요소의 disallowed-
methodsread-resource
명령의 출력을 검토하여 확인할 수 있습니다. disallowed-methods
속성의 값은 ["TRACE"]
입니다.
/subsystem=undertow/server=default-server/http-listener=default:read-resource { "outcome" => "success", "result" => { "allow-encoded-slash" => false, "allow-equals-in-cookie-value" => false, "allow-unescaped-characters-in-url" => false, "always-set-keep-alive" => true, "buffer-pipelined-data" => false, "buffer-pool" => "default", "certificate-forwarding" => false, "decode-url" => true, "disallowed-methods" => ["TRACE"], ... } }
JBoss EAP 7 이상에서 HTTP TRACE
메서드 호출을 활성화하려면 다음 명령을 실행하여 disallowed-methods
특성 목록에서 "TRACE" 항목을 제거해야 합니다.
/subsystem=undertow/server=default-server/http-listener=default:list-remove(name=disallowed-methods,value="TRACE")
read-resource
명령을 다시 실행하면 TRACE
메서드 호출이 더 이상 허용되지 않는 메서드 목록에 표시되지 않습니다.
/subsystem=undertow/server=default-server/http-listener=default:read-resource { "outcome" => "success", "result" => { "allow-encoded-slash" => false, "allow-equals-in-cookie-value" => false, "allow-unescaped-characters-in-url" => false, "always-set-keep-alive" => true, "buffer-pipelined-data" => false, "buffer-pool" => "default", "certificate-forwarding" => false, "decode-url" => true, "disallowed-methods" => [], ... } }
HTTP 메서드의 기본 동작에 대한 자세한 내용은 JBoss EAP 구성 가이드의 Default Behavior of HTTP Methods 를 참조하십시오.
4.5.8. 기본 웹 모듈 동작의 변경 사항
JBoss EAP 7.0에서는 웹 애플리케이션의 루트 컨텍스트가 mod_cluster에서 기본적으로 비활성화되었습니다.
JBoss EAP 7.1부터는 더 이상 그렇지 않습니다. 루트 컨텍스트가 비활성화될 것으로 예상되는 경우 예기치 않은 결과가 발생할 수 있습니다. 예를 들어 요청이 바람직하지 않은 노드로 잘못 라우팅되거나 노출되지 않아야 하는 프라이빗 애플리케이션에 공용 프록시를 통해 실수로 액세스할 수 있습니다. 이제 명시적으로 제외되지 않는 한 Undertow 위치도 mod_cluster 로드 밸런서에 자동으로 등록됩니다.
다음 관리 CLI 명령을 사용하여 modcluster
하위 시스템 구성에서 ROOT를 제외합니다.
/subsystem=modcluster/mod-cluster-config=configuration:write-attribute(name=excluded-contexts,value=ROOT)
다음 관리 CLI 명령을 사용하여 기본 시작 웹 애플리케이션을 비활성화합니다.
/subsystem=undertow/server=default-server/host=default-host/location=\/:remove /subsystem=undertow/configuration=handler/file=welcome-content:remove reload
기본 시작 웹 애플리케이션을 구성하는 방법에 대한 자세한 내용은 JBoss EAP 의 개발 가이드에서 기본 시작 웹 애플리케이션 구성을 참조하십시오.
4.5.9. Undertow Subsystem Default Configuration의 변경 사항
JBoss EAP 7.2 이전에는 default undertow
하위 시스템 구성에 default-host
에 의해 각 HTTP 응답에 추가된 두 개의 응답 헤더 필터가 포함되었습니다.
-
server
는JBoss-EAP/7
로 설정되었습니다. -
Undertow/1
로 설정되었습니다
.
이러한 응답 헤더 필터는 사용 중인 서버에 대한 정보가 의도치 않게 공개되지 않도록 기본 JBoss EAP 7.2 구성에서 제거되었습니다.
다음은 JBoss EAP 7.1의 default undertow
하위 시스템 구성의 예입니다.
<subsystem xmlns="urn:jboss:domain:undertow:4.0"> <buffer-cache name="default"/> <server name="default-server"> <http-listener name="default" socket-binding="http" redirect-socket="https"/> <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/> <host name="default-host" alias="localhost"> <location name="/" handler="welcome-content"/> <filter-ref name="server-header"/> <filter-ref name="x-powered-by-header"/> <http-invoker security-realm="ApplicationRealm"/> </host> </server> <servlet-container name="default"> <jsp-config/> <websockets/> </servlet-container> <handlers> <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/> </handlers> <filters> <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/> <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/> </filters> </subsystem>
다음은 JBoss EAP 7.4의 새 default undertow
하위 시스템 구성의 예입니다.
<subsystem xmlns="urn:jboss:domain:undertow:10.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other"> <buffer-cache name="default"/> <server name="default-server"> <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/> <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/> <host name="default-host" alias="localhost"> <location name="/" handler="welcome-content"/> <http-invoker security-realm="ApplicationRealm"/> </host> </server> <servlet-container name="default"> <jsp-config/> <websockets/> </servlet-container> <handlers> <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/> </handlers> </subsystem>
4.6. JGroups 서버 구성 변경 사항
4.6.1. JGroups는 사설 네트워크 인터페이스로 기본 설정됩니다.
JBoss EAP 6 기본 구성에서 JGroups는 서버 구성 파일의 <interfaces>
섹션에 정의된 공용
인터페이스를 사용했습니다.
전용 네트워크 인터페이스를 사용하는 것이 좋습니다. JGroups는 이제 JBoss EAP 7에서 서버 구성 파일의 <interfaces>
섹션에 정의된 새 개인
인터페이스를 사용하도록 기본 설정되어 있습니다.
4.6.2. JGroups 채널 변경
JGroups는 JGroups 채널 형식으로 HA 서비스에 대한 그룹 통신 지원을 제공합니다. JBoss EAP 7은 서버 구성 파일의 jgroups
하위 시스템에 <channel>
요소를 도입합니다. 관리 CLI를 사용하여 JGroups 채널 구성을 추가, 제거 또는 변경할 수 있습니다.
JGroups 구성 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드에서 JGroups 클러스터 통신을 참조하십시오.
4.7. Infinispan 서버 구성 변경
4.7.1. Infinispan 기본 캐시 구성 변경
JBoss EAP 6에서는 웹 세션 복제 및 EJB 복제를 위한 기본 클러스터된 캐시가 ASYNC
캐시를 복제했습니다. 이는 JBoss EAP 7에서 변경되었습니다. 기본 클러스터된 캐시가 이제 ASYNC
캐시를 분산합니다. 복제된 캐시는 더 이상 기본적으로 구성되지 않습니다. 복제된 캐시를 추가하고 기본값으로 설정하는 방법에 대한 정보는 JBoss EAP 구성 가이드 의 캐시 모드 구성을 참조하십시오.
이는 새 JBoss EAP 7 기본 구성을 사용하는 경우에만 영향을 미칩니다. JBoss EAP 6에서 구성을 마이그레이션하는 경우 infinispan
하위 시스템의 구성이 유지됩니다.
4.7.2. Infinispan 캐시 전략 변경
JBoss EAP 7에서는 ASYNC
캐시 전략의 동작이 변경되었습니다.
JBoss EAP 6에서는 ASYNC
캐시 읽기가 가용되었습니다. 차단되지는 않지만, (예: 페일오버 시) 오래된 데이터를 더티 읽기가 쉽습니다. 이는 이전 요청이 완료되기 전에 동일한 사용자에 대한 후속 요청을 시작할 수 있기 때문입니다. 클러스터 토폴로지 변경이 세션 선호도에 영향을 미칠 수 있으므로 분산 모드를 사용할 때 이 허용은 허용되지 않습니다.
JBoss EAP 7에서 ASYNC
캐시 읽기에는 잠금이 필요합니다. 이전 복제가 완료될 때까지 동일한 사용자의 새 요청을 차단하므로 더티 읽기가 방지됩니다.
4.7.3. 비활성화를 위한 사용자 정의 상태 저장 세션 빈 캐시 구성
JBoss EAP 7.1 이상에서 비활성화를 위해 사용자 정의 SFSB(상태 저장 세션 빈) 캐시를 구성할 때 다음과 같은 제한 사항에 유의하십시오.
-
ejb3
하위 시스템의infinispan
passivation-store에 구성된
특성은 JBoss EAP 7.1 이상에서 더 이상 사용되지 않습니다. JBoss EAP 6.4는 즉시 활성화를 지원하여idle-
timeoutidle-timeout
값에 따라 비활성화했습니다. JBoss EAP 7.1 이상에서는 지연 비활성화를 지원하고max-size
임계값에 도달하면 활성화됩니다. -
JBoss EAP 7.1 이상에서 Jakarta Enterprise Beans 클라이언트에서 사용하는 클러스터 이름은
jgroups
하위 시스템에서 구성된 대로 채널의 실제 클러스터 이름으로 결정됩니다. -
JBoss EAP 7.1 이상에서는 계속
max-size
특성을 설정하여 비활성화 임계값을 제어할 수 있습니다. Jakarta Enterprise Beans 캐시 구성에서 제거 또는 만료를 구성해서는 안 됩니다.
-
ejb3
하위 시스템에서passivation
특성을 사용하여 제거를 구성해야 합니다.-store의 max-
size -
SFSB Java 소스 코드에서
@StatefulTimeout
주석을 사용하거나ejb-jar.xml
파일에서stateful-timeout
값을 지정하여 만료를 구성해야 합니다.
-
4.7.4. Infinispan 캐시 컨테이너 전송 변경
JBoss EAP 7.0과 이후 버전 간의 동작을 변경하려면 배치 모드에서 또는 특수 헤더를 사용하여 캐시 컨테이너 전송 프로토콜에 대한 업데이트를 수행해야 합니다. 이러한 동작 변경은 JBoss EAP 서버 관리에 사용되는 도구에도 영향을 미칩니다.
다음은 JBoss EAP 7.0에서 캐시 컨테이너 전송 프로토콜을 구성하는 데 사용되는 관리 CLI 명령의 예입니다.
/subsystem=infinispan/cache-container=my:add() /subsystem=infinispan/cache-container=my/transport=jgroups:add() /subsystem=infinispan/cache-container=my/invalidation-cache=mycache:add(mode=SYNC)
다음은 JBoss EAP 7.1에서 동일한 구성을 수행하는 데 필요한 관리 CLI 명령의 예입니다. 명령은 배치 모드에서 실행됩니다.
batch /subsystem=infinispan/cache-container=my:add() /subsystem=infinispan/cache-container=my/transport=jgroups:add() /subsystem=infinispan/cache-container=my/invalidation-cache=mycache:add(mode=SYNC) run-batch
배치 모드를 사용하지 않으려면 전송을 정의할 때 작업 헤더 allow-resource-service-restart=true
를 대신 지정할 수 있습니다. 이 경우 작업을 적용할 수 있도록 서비스를 다시 시작하고 일부 서비스는 서비스를 다시 시작할 때까지 작동을 중지할 수 있습니다.
스크립트를 사용하여 캐시 컨테이너 전송 프로토콜을 업데이트하는 경우 이를 검토하고 배치 모드를 추가합니다.
4.8. Jakarta Enterprise Beans Server 구성 변경
ejb3
하위 시스템에 대한 마이그레이션
작업이 없으므로 관리 CLI migrate
작업을 사용하여 다른 기존 JBoss EAP 6.4 구성을 업그레이드하는 경우 ejb3
하위 시스템 구성이 마이그레이션되지 않습니다. ejb3
하위 시스템의 구성이 JBoss EAP 6.4와 약간 다르기 때문에 엔터프라이즈 빈 애플리케이션을 배포할 때 서버 로그에 예외가 표시될 수 있습니다.
JBoss Server 마이그레이션 도구를 사용하여 서버 구성을 업데이트하는 경우 ejb3
하위 시스템을 올바르게 구성해야 하며 Jakarta Enterprise Beans 애플리케이션을 배포할 때 문제가 표시되지 않아야 합니다. 툴을 구성하고 실행하는 방법에 대한 자세한 내용은 JBoss Server 마이그레이션 툴 사용을 참조하십시오.
DuplicateServiceException
다음 DuplicateServiceException
은 JBoss EAP 7에서 변경 사항을 캐싱하기 때문에 발생합니다.
서버 로그에서 DuplicateServiceException
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service jboss.deployment.unit."mdb-1.0-SNAPSHOT.jar".cache-dependencies-installer: org.jboss.msc.service.StartException in service jboss.deployment.unit."mdb-1.0-SNAPSHOT.jar".cache-dependencies-installer: Failed to start service ... Caused by: org.jboss.msc.service.DuplicateServiceException: Service jboss.infinispan.ejb."mdb-1.0-SNAPSHOT.jar".config is already registered
이 오류를 해결하려면 캐시를 재구성해야 합니다.
- 지침에 따라 서버 및 관리 CLI 시작.
다음 명령을 실행하여
ejb3
하위 시스템에서 캐싱을 재구성합니다./subsystem=ejb3/file-passivation-store=file:remove /subsystem=ejb3/cluster-passivation-store=infinispan:remove /subsystem=ejb3/passivation-store=infinispan:add(cache-container=ejb, max-size=10000) /subsystem=ejb3/cache=passivating:remove /subsystem=ejb3/cache=clustered:remove /subsystem=ejb3/cache=distributable:add(passivation-store=infinispan, aliases=[passivating, clustered])
4.9. 메시징 서버 구성 변경
JBoss EAP 7에서 ActiveMQ Artemis는 HornetQ를 자카르타 메시징 지원 공급자로 대체합니다. 이 섹션에서는 구성 및 관련 메시징 데이터를 마이그레이션하는 방법을 설명합니다.
4.9.1. 메시징 하위 시스템 서버 구성 변경
EAP_HOME/modules/system/layers/base/
에 있는 org.jboss.as.messaging
모듈 확장 기능은 org.wildfly.extension.messaging-activemq
확장 모듈로 교체되었습니다.
urn:jboss:domain:messaging:3.0
하위 시스템 구성 네임스페이스가 urn:jboss:domain:messaging-activemq:4.0
네임스페이스로 교체되었습니다.
관리 모델
대부분의 경우 요소 및 특성 이름을 이전 릴리스에서 사용된 항목과 유사하게 유지하기 위해 노력했습니다. 다음 테이블에는 몇 가지 변경 사항이 나열되어 있습니다.
표 4.3. 메시징 속성 매핑
HornetQ 이름 | ActiveMQ 이름 |
---|---|
hornetq-server | server |
hornetq-serverType | serverType |
커넥터 | 커넥터 |
discovery-group-name | discovery-group |
새 messaging-activemq
하위 시스템에서 호출된 관리 작업이 /subsystem=messaging/wonetq-server=에서
로 변경되었습니다.
/subsystem=
messaging-activemq/server=
마이그레이션 작업을 호출하여 기존 JBoss EAP 6 메시징
하위 시스템 구성을 JBoss EAP 7 서버의 messaging-activemq
하위 시스템으로 마이그레이션할
수 있습니다.
/subsystem=messaging:migrate
마이그레이션
작업을 실행하기 전에 describe-migration
작업을 호출하여 기존 JBoss EAP 6 메시징
하위 시스템 구성에서 JBoss EAP 7 서버의 messaging-activemq
하위 시스템으로 마이그레이션하는 데 수행할 관리 작업 목록을 검토할 수 있습니다.
/subsystem=messaging:describe-migration
마이그레이션
및 describe-migration
작업에서는 자동으로 마이그레이션할 수 없는 리소스 또는 속성에 대한 마이그레이션 경고
목록도 표시합니다.
메시징 하위 시스템 마이그레이션 및 전달 호환성
메시징
하위 시스템에 대한 describe-migration
및 마이그레이션
작업은 추가 구성 인수를 제공합니다. 레거시 JBoss EAP 6 클라이언트가 JBoss EAP 7 서버에 연결할 수 있도록 메시징을 구성하려면 다음과 같이 부울 add-legacy-entries 인수를
또는 describe-
migration마이그레이션
작업에 추가할 수 있습니다.
/subsystem=messaging:describe-migration(add-legacy-entries=true) /subsystem=messaging:migrate(add-legacy-entries=true)
부울 인수 add-legacy-entries
가 true
로 설정된 경우 messaging-activemq
하위 시스템은 legacy-connection-factory
리소스를 생성하고 legacy-entries
를 jms-queue
및 jms-topic
리소스에 추가합니다.
부울 인수 add-legacy-entries
가 false
로 설정된 경우 messaging-activemq
하위 시스템에서 레거시 리소스가 생성되지 않으며 레거시 메시징 클라이언트는 JBoss EAP 7 서버와 통신할 수 없습니다. 이는 기본값입니다.
앞뒤의 호환성 및 이전 버전과의 호환성에 대한 자세한 내용은 JBoss EAP에 대한 메시징 구성의 Backward 및 Forward Compatibility 를 참조하십시오.
관리 CLI 마이그레이션 및 마이그레이션
작업에
대한 자세한 내용은 Management CLI Migration Operation 을 참조하십시오.
forward-when-no-consumers 속성 동작에서 변경
forward-when-no-consumers
속성의 동작은 JBoss EAP 7에서 변경되었습니다.
JBoss EAP 6에서는 forward-when-no-consumers
가 false
로 설정되어 클러스터에 소비자가 없는 경우 메시지가 클러스터의 모든 노드에 재배포되었습니다.
이 동작은 JBoss EAP 7에서 변경되었습니다. forward-when-no-consumers
가 false
로 설정되어 있고 클러스터에 소비자가 없는 경우 메시지가 재배포되지 않습니다. 대신 해당 노드는 전송된 원래 노드에 보관됩니다.
기본 클러스터 로드 밸런싱 정책 변경
JBoss EAP 7에서는 기본 클러스터 로드 밸런싱 정책이 변경되었습니다.
JBoss EAP 6에서는 기본 클러스터 로드 밸런싱 정책이 STRICT
과 유사했습니다. 이 정책은 레거시 forward-when-no-consumers
매개 변수를 true
로 설정하는 것과 같습니다. JBoss EAP 7에서 기본값은 이제 ON_DEMAND
로, 레거시 forward-when-no-consumers
매개 변수를 false로
설정하는 것과 같습니다. 이러한 설정에 대한 자세한 내용은 Configuring Messaging for JBoss EAP에서 Cluster Connection Attributes 를 참조하십시오.
메시징 하위 시스템 XML 구성
새로운 messaging-activemq
하위 시스템에서 XML 구성은 크게 변경되었으며 이제 다른 JBoss EAP 하위 시스템과 더 일관된 XML 체계를 제공합니다.
새 messaging-activemq
하위 시스템을 준수하도록 JBoss EAP 메시징
하위 시스템 XML 구성을 수정하지 않는 것이 좋습니다. 대신 레거시 하위 시스템 마이그레이션
작업을 호출합니다. 이 작업은 새 messaging-activemq
하위 시스템의 XML 구성을 실행의 일부로 작성합니다.
4.9.2. 메시징 데이터 마이그레이션
다음 접근 방식 중 하나를 사용하여 이전 릴리스에서 JBoss EAP의 현재 릴리스로 메시징 데이터를 마이그레이션할 수 있습니다.
-
파일 기반 메시징 시스템의 경우 내보내기 및 가져오기 방법을 사용하여 메시징 데이터를 JBoss EAP 6.4 및 이전 JBoss EAP 7.x 릴리스에서 JBoss EAP 7.4로 마이그레이션할 수 있습니다. 이 방법을 사용하면 이전 릴리스에서 메시징 데이터를 내보내고 관리 CLI
import-journal
작업을 사용하여 가져옵니다. 이 방법은 파일 기반 메시징 시스템에만 사용할 수 있습니다. - 자카르타 메시징 브리지를 구성하여 JBoss EAP 6.4에서 JBoss EAP 7.4로 메시징 데이터를 마이그레이션할 수 있습니다. 파일 기반 및 JDBC 메시징 시스템에 이 접근 방식을 사용할 수 있습니다.
Jakarta Messaging 지원 공급자로서 HornetQ에서 ActiveMQ Artemis로의 변경으로 인해 메시징 데이터의 형식과 위치가 JBoss EAP 7.0 이상에서 변경되었습니다. 6.4 에서 7.x 릴리스 사이의 메시징 데이터 폴더 이름과 위치에 대한 변경 내용은 메시징 폴더 이름 매핑 을 참조하십시오.
4.9.2.1. 내보내기 및 가져오기를 사용하여 메시징 데이터 마이그레이션
이 방법을 사용하면 이전 릴리스의 메시징 데이터를 XML 파일로 내보낸 다음 import-journal
작업을 사용하여 해당 파일을 가져옵니다.
메시징 데이터를 XML 파일로 내보냅니다.
- XML 형식의 메시징 데이터를 가져옵니다.
export 및 import 방법을 사용하여 스토리지에 JDBC 기반 저널을 사용하는 시스템 간에 메시징 데이터를 이동할 수 없습니다.
JBoss EAP 6.4에서 메시징 데이터 내보내기
메시징 지원 공급자로서 HornetQ에서 ActiveMQ Artemis로의 변경으로 인해 메시징 데이터의 형식과 위치가 JBoss EAP 7.0 이상에서 변경되었습니다.
JBoss EAP 6.4에서 메시징 데이터를 내보내려면 HornetQ 내보내기
유틸리티를 사용해야 합니다. HornetQ 내보내기
유틸리티는 JBoss EAP 6.4에서 XML 파일로 메시징 데이터를 생성하고 내보냅니다. 이 명령을 사용하려면 JBoss EAP 6.4와 함께 제공된 필수 HornetQ JARs의 경로를 지정해야 하며, 이전 릴리스의 메시징 바인딩/
, messagingjournal/
, messagingpaging/
, messaginglargemessages/
폴더에 대한 경로를 인수로 전달하고 내보낸 XML 데이터를 작성할 출력 파일을 지정해야 합니다.
다음은 HornetQ 내보내기 유틸리티에 필요한 구문입니다
.
$ java -jar -mp MODULE_PATH org.hornetq.exporter MESSAGING_BINDINGS_DIRECTORY MESSAGING_JOURNAL_DIRECTORY MESSAGING_PAGING_DIRECTORY MESSAGING_LARGE_MESSAGES_DIRECTORY > OUTPUT_DATA.xml
패치 또는 업그레이드와 함께 설치된 JAR을 포함하여 HornetQ JAR의 올바른 버전이 로드되고 내보내기
유틸리티에서 사용할 수 있도록 사용자 지정 모듈을 만듭니다. 선호하는 편집기를 사용하여 EAP6_HOME/modules/org/profileetq/exporter/main/
디렉터리에 새 module.xml
파일을 생성하고 다음 콘텐츠를 복사합니다.
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.1" name="org.hornetq.exporter"> <main-class name="org.hornetq.jms.persistence.impl.journal.XmlDataExporter"/> <properties> <property name="jboss.api" value="deprecated"/> </properties> <dependencies> <module name="org.hornetq"/> </dependencies> </module>
사용자 지정 모듈은 module/ system
디렉터리에 생성됩니다.
/
layers/base/ 디렉터리가 아닌 modules/
데이터를 내보내려면 아래 단계를 수행하십시오.
- JBoss EAP 6.4 서버를 중지합니다.
- 위에서 설명한 대로 사용자 지정 모듈을 생성합니다.
다음 명령을 실행하여 데이터를 내보냅니다.
$ java -jar jboss-modules.jar -mp modules/ org.hornetq.exporter standalone/data/messagingbindings/ standalone/data/messagingjournal/ standalone/data/messagingpaging standalone/data/messaginglargemessages/ > OUTPUT_DIRECTORY/OldMessagingData.xml
- 명령을 완료할 때 로그에 오류 또는 경고 메시지가 없는지 확인합니다.
- 운영 체제에 사용할 수 있는 도구를 사용하여 생성된 출력 파일에서 XML의 유효성을 검사합니다.
JBoss EAP 7.x에서 메시징 데이터 내보내기
다음 단계에 따라 JBoss EAP 7.x에서 메시징 데이터를 내보냅니다.
터미널을 열고 JBoss EAP 7.x 설치 디렉터리로 이동한 다음
관리자 전용
모드로 서버를 시작합니다.$ EAP_HOME/bin/standalone.sh -c standalone-full.xml --start-mode=admin-only
새 터미널을 열고 JBoss EAP 7.x 설치 디렉터리로 이동한 다음 관리 CLI에 연결합니다.
$ EAP_HOME/bin/jboss-cli.sh --connect
다음 관리 CLI 명령을 사용하여 메시징 저널 데이터를 내보냅니다.
/subsystem=messaging-activemq/server=default:export-journal()
- 명령을 완료할 때 로그에 오류 또는 경고 메시지가 없는지 확인합니다.
- 운영 체제에 사용할 수 있는 도구를 사용하여 생성된 출력 파일에서 XML의 유효성을 검사합니다.
XML 포맷 메시징 데이터 가져 오기
그런 다음 import-journal
작업을 다음과 같이 사용하여 XML 파일을 JBoss EAP 7.0 이상으로 가져옵니다.
대상 서버가 이미 일부 메시징 작업을 수행한 경우 가져오기 실패 시 데이터 손실을 방지하기 위해 import-journal
작업을 시작하기 전에 메시징 폴더를 백업해야 합니다. 자세한 내용은 메시징 폴더 데이터 백업 에서 참조하십시오.
- JBoss EAP 6.4 서버를 JBoss EAP 7.4로 마이그레이션하는 경우 관리 CLI 마이그레이션 작업을 사용하거나 JBoss Server 마이그레이션 도구를 실행하여 서버 구성 마이그레이션을 완료했는지 확인하십시오. 툴을 구성하고 실행하는 방법에 대한 자세한 내용은 JBoss Server 마이그레이션 툴 사용을 참조하십시오.
자카르타 메시징 클라이언트가 연결되지 않고 일반 모드에서 JBoss EAP 7.x 서버를 시작합니다.
중요자카르타 메시징 클라이언트가 연결되지 않고 서버를 시작하는 것이 중요합니다. 이는
import-journal
작업이 Jakarta Messaging 생산자처럼 동작하기 때문입니다. 작업이 진행 중이면 즉시 메시지를 사용할 수 있습니다. 가져오기 및 자카르타 메시징 클라이언트가 연결되어 있는 도중에 이 작업이 실패하면 Jakarta Messaging 클라이언트가 이미 일부 메시지를 사용했을 수 있으므로 복구할 방법이 없습니다.새 터미널을 열고 JBoss EAP 7.x 설치 디렉터리로 이동한 다음 관리 CLI에 연결합니다.
$ EAP_HOME/bin/jboss-cli.sh --connect
다음 관리 CLI 명령을 사용하여 메시징 데이터를 가져옵니다.
/subsystem=messaging-activemq/server=default:import-journal(file=OUTPUT_DIRECTORY/OldMessagingData.xml)
중요이 명령을 두 번 이상 실행하지 마십시오. 그러면 중복 메시지가 표시됩니다!
주의JBoss EAP 7.0을 사용하는 경우 대용량 메시지를 읽을 때 알려진 문제를 방지하려면 Red Hat JBoss Enterprise Application Platform 7.0 Update 05 또는 최신 누적 패치를 JBoss EAP 설치에 적용해야 합니다. 자세한 내용은 가져온 저널에서 큰 메시지를 읽을 때 JBEAP-4407 - IndexOutOfBoundsException과 함께 소비자 충돌 을 참조하십시오.
이 문제는 JBoss EAP 7.1 이상에는 영향을 미치지 않습니다.
가져오기 메시징 데이터 오류에서 복구
import-journal
작업이 실패하면 다음 단계를 사용하여 복구를 시도할 수 있습니다.
- JBoss EAP 7.x 서버를 종료합니다.
- 모든 메시징 저널 폴더를 삭제합니다. 메시징 저널 폴더에 대한 올바른 디렉터리 위치를 확인하려면 관리 CLI 명령의 메시징 폴더 백업을 참조하십시오.
- 가져오기 전에 대상 서버 메시징 데이터를 백업한 경우 백업 위치에서 이전 단계에서 결정된 메시징 저널 디렉터리로 메시징 폴더를 복사합니다.
- 단계를 반복 하여 XML 형식의 메시징 데이터를 가져옵니다.
4.9.2.2. 메시징 브리지를 사용하여 메시징 데이터 마이그레이션
이 방법을 사용하면 메시징 브리지를 구성하고 JBoss EAP 7.x 서버에 배포합니다. 이 브리지는 JBoss EAP 6.4 HornetQ 대기열에서 JBoss EAP 7.x ActiveMQ Artemis 대기열로 메시지를 이동합니다.
Jakarta Messaging 브리지는 소스 Jakarta Messaging 대기열 또는 주제의 메시지를 사용하고 일반적으로 다른 서버에 있는 대상 Jakarta Messaging 대기열 또는 항목으로 보냅니다. JMS 1.1 규격인 경우 모든 메시징 서버 간에 메시지를 브리지하는 데 사용할 수 있습니다. 소스 및 대상 Jakarta Messaging 리소스는 Java Naming 및 Directory Interface(Java 네이밍 및 디렉터리 인터페이스)를 사용하여 조회하며 Java Naming 및 Directory Interface 조회를 위한 클라이언트 클래스를 모듈에 번들로 포함해야 합니다. 그런 다음, 모듈 이름은 Jakarta Messaging 브리지 구성에서 선언됩니다.
이 섹션에서는 서버 구성 및 메시징 브리지를 배포하여 메시징 데이터를 JBoss EAP 6.4에서 JBoss EAP 7.x로 이동하는 방법을 설명합니다.
소스 JBoss EAP 6.4 서버 구성
- JBoss EAP 6.4 서버를 중지합니다.
HornetQ 저널 및 구성 파일을 백업합니다.
-
기본적으로 HornetQ 저널은
EAP6_HOME/standalone/data/
디렉터리에 있습니다. - 각 릴리스의 기본 메시징 폴더 위치는 메시징 폴더 이름 매핑 을 참조하십시오.
-
기본적으로 HornetQ 저널은
-
JMS 메시지가 포함된
InQueue
JMS 대기열이 JBoss EAP 6.4 서버에 정의되어 있는지 확인합니다. 메시징
하위 시스템 구성에 다음과 유사한RemoteConnectionFactory
에 대한 항목이 포함되어 있는지 확인합니다.<connection-factory name="RemoteConnectionFactory"> <entries> <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/> </entries> ... </connection-factory>
항목이 없는 경우 다음 관리 CLI 명령을 사용하여 생성합니다.
/subsystem=messaging/hornetq-server=default/connection-factory=RemoteConnectionFactory:add(factory-type=XA_GENERIC, connector=[netty], entries=[java:jboss/exported/jms/RemoteConnectionFactory],ha=true,block-on-acknowledge=true,retry-interval=1000,retry-interval-multiplier=1.0,reconnect-attempts=-1)
대상 JBoss EAP 7.x 서버 구성
Jakarta Messaging 브리지 구성을 사용하려면 이전 릴리스에서 HornetQ 서버에 연결하려면
org.steinetq
모듈이 필요합니다. 이 모듈과 해당 직접 종속성은 JBoss EAP 7.x에 없으므로 이전 릴리스에서 다음 모듈을 복사해야 합니다.org.steinetq
모듈을 JBoss EAP 7.xEAP_HOME/modules/org/
디렉터리에 복사합니다.-
이 모듈에 패치를 적용하지 않은 경우 JBoss EAP 6.4 서버에서 이 폴더를 복사합니다.
EAP6_HOME/modules/system/layers/base/org/hornetq/
-
이 모듈에 패치를 적용한 경우 JBoss EAP 6.4 서버에서 이 폴더를 복사합니다.
EAP6_HOME/modules/system/layers/base/.overlays/layer-base-jboss-eap-6.4.x.CP/org/tmpetq/
-
이 모듈에 패치를 적용하지 않은 경우 JBoss EAP 6.4 서버에서 이 폴더를 복사합니다.
JBoss EAP 7.x
EAP_HOME/modules/org/ tokensetq/main/module.xml
파일에서 HornetQlib
경로의<resource-root>
;를 제거합니다.JBoss EAP 6.4
조직에 패치를 적용하지 않은 경우 파일에서 다음 행을 제거합니다.
<resource-root path="lib"/>
JBoss EAP 6.4
조직에 패치를 적용한 경우 파일에서 다음 행을 제거합니다.
<resource-root path="lib"/> <resource-root path="../../../../../org/hornetq/main/lib"/>
주의HornetQ
lib
경로resource-root
를 제거하지 않으면 브리지가 로그 파일에서 다음 오류와 함께 실패합니다.2016-07-15 09:32:25,660 ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 2) WFLYCTL0013: Operation ("add") failed - address: ([ ("subsystem" => "messaging-activemq"), ("jms-bridge" => "myBridge") ]) - failure description: "WFLYMSGAMQ0086: Unable to load module org.hornetq"
org.jboss.netty
모듈을 JBoss EAP 7.xEAP_HOME/modules/org/jboss/
디렉터리에 복사합니다.-
이 모듈에 패치를 적용하지 않은 경우 JBoss EAP 6.4 서버에서 이 폴더를 복사합니다.
EAP6_HOME/modules/system/layers/base/org/jboss/netty/
-
이 모듈에 패치를 적용한 경우 JBoss EAP 6.4 서버에서 이 폴더를 복사합니다.
EAP6_HOME/modules/system/layers/base/.overlays/layer-base-jboss-eap-6.4.x.CP/org/jboss/netty
-
이 모듈에 패치를 적용하지 않은 경우 JBoss EAP 6.4 서버에서 이 폴더를 복사합니다.
JBoss EAP 6.4 서버에서 받은 메시지를 포함하도록 자카르타 메시징 큐를 만듭니다. 다음은 메시지를 수신하기 위해
MigratedMessagesQueue
Jakarta Messaging 큐를 생성하는 관리 CLI 명령의 예입니다.jms-queue add --queue-address=MigratedMessagesQueue --entries=[jms/queue/MigratedMessagesQueue java:jboss/exported/jms/queue/MigratedMessagesQueue]
그러면 JBoss EAP 7.x 서버의
messaging
구성이 생성됩니다.-activemq 하위 시스템에서 기본 서버에 대한 다음 jms-
queue<jms-queue name="MigratedMessagesQueue" entries="jms/queue/MigratedMessagesQueue java:jboss/exported/jms/queue/MigratedMessagesQueue"/>
messaging-activemq
하위 시스템기본
서버에 다음과 유사한InVmConnectionFactory
connection-factory
에 대한 구성이 포함되어 있는지 확인합니다.<connection-factory name="InVmConnectionFactory" factory-type="XA_GENERIC" entries="java:/ConnectionFactory" connectors="in-vm"/>
항목이 없는 경우 다음 관리 CLI 명령을 사용하여 생성합니다.
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:add(factory-type=XA_GENERIC, connectors=[in-vm], entries=[java:/ConnectionFactory])
JBoss EAP 6.4 서버에 구성된
InQueue
JMS 큐에서 메시지를 읽고 JBoss EAP 7.x 서버에 구성된MigratedMessagesQueue
로 전송하는 자카르타 메시징 브리지를 생성하고 배포합니다./subsystem=messaging-activemq/jms-bridge=myBridge:add(add-messageID-in-header=true,max-batch-time=100,max-batch-size=10,max-retries=-1,failure-retry-interval=1000,quality-of-service=AT_MOST_ONCE,module=org.hornetq,source-destination=jms/queue/InQueue,source-connection-factory=jms/RemoteConnectionFactory,source-context=[("java.naming.factory.initial"=>"org.wildfly.naming.client.WildFlyInitialContextFactory"),("java.naming.provider.url"=>"remote://127.0.0.1:4447")],target-destination=jms/queue/MigratedMessagesQueue,target-connection-factory=java:/ConnectionFactory)
이렇게 하면 JBoss EAP 7.x 서버의
messaging-activemq
하위 시스템에서 다음jms-bridge
구성이 생성됩니다.<jms-bridge name="myBridge" add-messageID-in-header="true" max-batch-time="100" max-batch-size="10" max-retries="-1" failure-retry-interval="1000" quality-of-service="AT_MOST_ONCE" module="org.hornetq"> <source destination="jms/queue/InQueue" connection-factory="jms/RemoteConnectionFactory"> <source-context> <property name="java.naming.factory.initial" value="org.wildfly.naming.client.WildFlyInitialContextFactory"/> <property name="java.naming.provider.url" value="remote://127.0.0.1:4447"/> </source-context> </source> <target destination="jms/queue/MigratedMessagesQueue" connection-factory="java:/ConnectionFactory"/> </jms-bridge>
-
JBoss EAP 6.4에 대해 보안이 구성된 경우 연결을 생성할 때 Java 네이밍 및 디렉터리 인터페이스 조회에 사용할 올바른 사용자 이름과 암호를 지정하는 Source
-context
를 포함하도록 메시징 브리지 구성<source>
요소도 구성해야 합니다.
메시징 데이터 마이그레이션
다음 구성에 제공한 정보가 올바른지 확인합니다.
- 모든 대기열 및 토픽 이름.
-
Java Naming 및 Directory Interface 조회를 위한
java.naming.provider.url
.
- 대상 Jakarta Messaging 대상을 JBoss EAP 7.x 서버에 배포했는지 확인합니다.
- JBoss EAP 6.4 및 JBoss EAP 7.x 서버를 모두 시작합니다.
4.9.2.3. 메시징 폴더 이름 매핑
다음 표는 이전 릴리스에서 사용된 메시징 디렉터리 이름과 현재 JBoss EAP 릴리스에서 사용된 해당 이름을 보여줍니다. 디렉터리는 지정되지 않은 경우EAP_HOME/standalone/
디렉터리를 기준으로 합니다.
data/를 기본값으로 사용하는 jboss.server.data
.dir
JBoss EAP 6.4 디렉터리 이름 | JBoss EAP 7.x 디렉터리 이름 |
---|---|
|
|
|
|
|
|
|
|
대규모 메시지가 없거나 페이징이 비활성화된 경우 messaginglargemessages/
및 messagingpaging/
디렉터리가 없을 수 있습니다.
4.9.2.4. 메시징 폴더 데이터 백업
대상 서버가 이미 메시지를 처리한 경우 대상 메시지 폴더를 시작하기 전에 백업 위치에 백업하는 것이 좋습니다. 메시징 폴더의 기본 위치는 EAP_HOME/standalone/data/activemq/
이지만 구성할 수 있습니다. 메시징 데이터의 위치가 확실하지 않은 경우 다음 관리 CLI 명령을 사용하여 메시징 폴더의 위치를 찾을 수 있습니다.
/subsystem=messaging-activemq/server=default/path=journal-directory:resolve-path /subsystem=messaging-activemq/server=default/path=paging-directory:resolve-path /subsystem=messaging-activemq/server=default/path=bindings-directory:resolve-path /subsystem=messaging-activemq/server=default/path=large-messages-directory:resolve-path
폴더 위치를 알고 나면 각 폴더를 안전한 백업 위치로 복사합니다.
4.9.3. 메시징 대상 마이그레이션
JBoss EAP 6에서는 메시징 대상 대기열이 메시징
하위 시스템의 <copet
요소에서 구성되었습니다.
q-server> 요소 아래 <jms-destinations
>
<hornetq-server> ... <jms-destinations> <jms-queue name="testQueue"> <entry name="queue/test"/> <entry name="java:jboss/exported/jms/queue/test"/> </jms-queue> </jms-destinations> ... </hornetq-server>
JBoss EAP 7에서 Jakarta Messaging 대상 대기열은 messaging-activemq
하위 시스템의 기본 <server>
요소에 구성됩니다.
<server name="default"> ... <jms-queue name="testQueue" entries="queue/test java:jboss/exported/jms/queue/test"/> ... </server>
4.9.4. 메시징 인터셉터 마이그레이션
메시징 인터셉터는 JBoss EAP 7에서 Jakarta Messaging 공급업체인 ActiveMQ Artemis와 HornetQ를 대체하여 크게 변경되었습니다.
이전 릴리스의 JBoss EAP에 포함된 HornetQ 메시징
하위 시스템에는 JAR에 추가한 다음 HornetQ module.xml
파일을 수정하여 HornetQ 인터셉터를 설치해야 했습니다.
JBoss EAP 7에 포함된 messaging-activemq
하위 시스템은 module.xml
파일을 수정할 필요가 없습니다. 이제 Apache ActiveMQ Artemis Interceptor 인터페이스를 구현하는 사용자 인터셉터 클래스는 이제 모든 서버 모듈에서 로드할 수 있습니다. 서버 구성 파일의 messaging-activemq
하위 시스템에서 인터셉터를 로드해야 하는 모듈을 지정합니다.
예제: 인터셉터 설정
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> <server name="default"> ... <incoming-interceptors> <class name="com.mycompany.incoming.myInterceptor" module="com.mycompany" /> <class name="com.othercompany.incoming.myOtherInterceptor" module="com.othercompany" /> </incoming-interceptors> <outgoing-interceptors> <class name="com.mycompany.outgoing.myInterceptor" module="com.mycompany" /> <class name="com.othercompany.outgoing.myOtherInterceptor" module="com.othercompany" /> </outgoing-interceptors> </server> </subsystem>
4.9.5. Netty Servlet 구성 교체
JBoss EAP 6에서는 Netty Servlet 전송을 사용하도록 서블릿 엔진을 구성할 수 있습니다. ActiveMQ Artemis는 JBoss EAP 7에서 HornetQ를 기본 제공 메시징 프로바이더로 교체하므로 이 구성을 더 이상 사용할 수 없습니다. 대신 새로운 기본 제공 메시징 HTTP 커넥터 및 HTTP 어셉터를 사용하려면 서블릿 구성을 교체해야 합니다.
4.9.6. 일반 자카르타 메시징 리소스 어댑터 구성
타사 Jakarta Messaging 공급자와 함께 사용할 일반 Jakarta Messaging 리소스 어댑터를 구성하는 방법은 JBoss EAP 7에서 변경되었습니다. 자세한 내용은 JBoss EAP 에 대한 메시징에서 일반 자카르타 메시징 리소스 어댑터 배포를 참조하십시오.
4.9.7. 메시징 구성 변경
JBoss EAP 7.0에서 check-for
정책을 구성한 경우 기본값은 -live-server 특성을 지정하지 않고 replication-
masterfalse입니다
. 이는 JBoss EAP 7.1 이상에서 변경되었습니다. check-for-live-server
특성의 기본값은 이제 true
입니다.
다음은 check-for-live-server
특성을 지정하지 않고 replication-master
정책을 구성하는 관리 CLI 명령의 예입니다.
/subsystem=messaging-activemq/server=default/ha-policy=replication-master:add(cluster-name=my-cluster,group-name=group1)
관리 CLI를 사용하여 리소스를 읽는 경우 check-for-live-server
특성 값이 true
로 설정되어 있는지 확인합니다.
/subsystem=messaging-activemq/server=default/ha-policy=replication-master:read-resource(recursive=true) { "outcome" => "success", "result" => { "check-for-live-server" => true, "cluster-name" => "my-cluster", "group-name" => "group1", "initial-replication-sync-timeout" => 30000L }, "response-headers" => {"process-state" => "reload-required"} }
4.9.8. JMS 및 Jakarta Messaging Serialization Behavior 릴리스의 변경 사항
javax.jms.JMSException
의 serialVersionUID
가 JMS 1.1과 JMS 2.0.0 간에 변경되었습니다. 즉, JMSException
의 인스턴스 또는 하위 클래스 중 일부가 JMS 1.1을 사용하여 직렬화되면 JMS 2.0.0을 사용하여 역직렬화할 수 없습니다. 그 반대도 마찬가지입니다. JMS 2.0.0을 사용하여 JMSException
의 인스턴스를 직렬화하면 JMS 1.1을 사용하여 역직렬화할 수 없습니다. 이 두 경우 모두 다음과 유사한 예외가 발생합니다.
javax.jms.JMSException: javax.jms.JMSException; local class incompatible: stream classdesc serialVersionUID = 8951994251593378324, local class serialVersionUID = 2368476267211489441
이 문제는 Jakarta Messaging 2.0.1 유지 관리 릴리스에서 해결되었습니다.
JMS 2.0.1 사양은 Jakarta Messaging 2.0.3 사양과 호환됩니다.
다음 표는 각 JBoss EAP 릴리스에 대한 세부적인 구현입니다.
표 4.4. 각 JBoss EAP 릴리스에 대한 구현
JBoss EAP 버전 | 구현 | 버전 |
---|---|---|
6.4 | HornetQ | JMS 1.1 |
7.0 | Apache ActiveMQ Artemis | JMS 2.0.0 |
7.1 이상 | Apache ActiveMQ Artemis | 자카르타 메시징 2.0.3 이상 |
serialVersionUID
비호환성으로 인해 마이그레이션 문제가 발생할 수 있습니다.
-
JBoss EAP 6.4 클라이언트를 사용하여
JMSException
이 포함된 메시지를 보내면 메시징 데이터를 JBoss EAP 7.0으로 마이그레이션한 다음 JBoss EAP 7.0 클라이언트를 사용하여 해당 메시지를 역직렬화하려고 하면 역직렬화가 실패하고 예외가 발생합니다. 이는 JMS 1.1의serialVersionUID
가 JMS 2.0.0의 와 호환되지 않기 때문입니다. -
JBoss EAP 7.0 클라이언트를 사용하여
JMSException
이 포함된 메시지를 보내는 경우 메시징 데이터를 JBoss EAP 7.1 이상으로 마이그레이션한 다음 JBoss EAP 7.1 이상 클라이언트를 사용하여 해당 메시지를 역직렬화하려고 하면 역직렬화가 실패하고 예외가 발생합니다. 이는 JMS 2.0.0의serialVersionUID
가 자카르타 메시징 2.0.3 이상과 호환되지 않기 때문입니다.
JBoss EAP 6.4 클라이언트를 사용하여 JMSException
이 포함된 메시지를 보내는 경우 메시징 데이터를 JBoss EAP 7.1 이상으로 마이그레이션한 다음 JBoss EAP 7.1 이상 클라이언트를 사용하여 해당 메시지를 역직렬화하려고 하면 JMS 1.1의 serialVersionUID
가 자카르타 메시징 2.0.3 이상에서와 호환되므로 직렬화가 성공합니다.
메시징 데이터를 마이그레이션하기 전에 다음을 수행하는 것이 좋습니다.
- JBoss EAP 6.4에서 JBoss EAP 7.0으로 메시징 데이터를 마이그레이션하기 전에 JMSExceptions가 포함된 JMS 1.1 메시지를 모두 사용해야 합니다.
- JBoss EAP 7.0에서 JBoss EAP 7.1 이상으로 메시징 데이터를 마이그레이션하기 전에 Jakarta Messaging 예외가 포함된 자카르타 메시징 2.0.3 메시지를 모두 사용해야 합니다.
4.10. JMX 관리 및 자카르타 관리 변경
JBoss EAP 6의 HornetQ 구성 요소는 자체 JMX 관리를 제공했습니다. 그러나 권장되지 않았으며 이제는 더 이상 사용되지 않으며 더 이상 지원되지 않습니다. JBoss EAP 6에서 이 기능을 사용하는 경우 JBoss EAP 관리 CLI 또는 JBoss EAP 7에서 제공하는 자카르타 관리 관리를 사용하도록 관리 툴을 마이그레이션해야 합니다.
JBoss EAP 7과 함께 제공되는 jboss-client.jar
를 사용하려면 클라이언트 라이브러리도 업그레이드해야 합니다.
다음은 JBoss EAP 6에서 사용된 HornetQ JMX 관리 코드의 예입니다.
JMXConnector connector = null; try { HashMap environment = new HashMap(); String[] credentials = new String[]{"admin", "Password123!"}; environment.put(JMXConnector.CREDENTIALS, credentials); // HornetQ used the protocol "remoting-jmx" and port "9999" JMXServiceURL beanServerUrl = new JMXServiceURL("service:jmx:remoting-jmx://127.0.0.1:9990"); connector = JMXConnectorFactory.connect(beanServerUrl, environment); MBeanServerConnection mbeanServer = connector.getMBeanServerConnection(); // The JMX object name pointed to the HornetQ JMX management ObjectName objectName = new ObjectName("org.hornetq:type=Server,module=JMS"); // The invoked method name was "listConnectionIDs" String[] connections = (String[]) mbeanServer.invoke(objectName, "listConnectionIDs", new Object[]{}, new String[]{}); for (String connection : connections) { System.out.println(connection); } } finally { if (connector != null) { connector.close(); } }
다음은 JBoss EAP 7에서 ActiveMQ Artemis에 필요한 동등한 코드의 예입니다.
JMXConnector connector = null; try { HashMap environment = new HashMap(); String[] credentials = new String[]{"admin", "Password123!"}; environment.put(JMXConnector.CREDENTIALS, credentials); // ActiveMQ Artemis uses the protocol "remote+http" and port "9990" JMXServiceURL beanServerUrl = new JMXServiceURL("service:jmx:remote+http://127.0.0.1:9990"); connector = JMXConnectorFactory.connect(beanServerUrl, environment); MBeanServerConnection mbeanServer = connector.getMBeanServerConnection(); // The Jakarta Management object name points to the new Jakarta Management in the `messaging-activemq` subsystem ObjectName objectName = new ObjectName("jboss.as:subsystem=messaging-activemq,server=default"); // The invoked method name is now "listConnectionIds" String[] connections = (String[]) mbeanServer.invoke(objectName, "listConnectionIds", new Object[]{}, new String[]{}); for (String connection : connections) { System.out.println(connection); } } finally { if (connector != null) { connector.close(); } }
메서드 이름과 매개 변수는 새 구현에서 변경되었습니다. 다음 단계에 따라 JConsole에서 새 메서드 이름을 찾을 수 있습니다.
다음 명령을 사용하여 JConsole에 연결합니다.
$ EAP_HOME/bin/jconsole.sh
- JBoss EAP 로컬 프로세스에 연결. "jboss-modules.jar"로 시작해야 합니다.
- MBeans 탭에서 jboss.as → messaging-activemq → default → Operations 를 선택하여 메서드 이름과 속성 목록을 표시합니다.
4.11. ORB 서버 구성 변경
JacORB 구현은 JBoss EAP 7에서 OpenJDK ORB의 다운스트림 분기로 교체되었습니다.
EAP_HOME/modules/system/layers/base/
에 있는 org.jboss.as.jacorb
확장 모듈은 org.wildfly.iiop-openjdk
확장 모듈로 교체되었습니다.
서버 구성 파일의 urn:jboss:domain:jacorb:1.4
하위 시스템 구성 네임스페이스가 urn:jboss:domain:iiop-openjdk:2.1
네임스페이스로 교체되었습니다.
다음은 JBoss EAP 6의 기본 jacorb
시스템 구성의 예입니다.
<subsystem xmlns="urn:jboss:domain:jacorb:1.4"> <orb socket-binding="jacorb" ssl-socket-binding="jacorb-ssl"> <initializers security="identity" transactions="spec"/> </orb> </subsystem>
다음은 JBoss EAP 7의 기본 iiop-openjdk
하위 시스템 구성의 예입니다.
<subsystem xmlns="urn:jboss:domain:iiop-openjdk:2.1"> <orb socket-binding="jacorb" ssl-socket-binding="jacorb-ssl" /> <initializers security="identity" transactions="spec" /> </subsystem>
새로운 iiop-openjdk
하위 시스템 구성은 레거시 요소 및 속성의 하위 집합만 허용합니다. 다음은 유효한 모든 요소 및 속성을 포함하는 이전 릴리스의 jacorb
하위 시스템 구성의 예입니다.
<subsystem xmlns="urn:jboss:domain:jacorb:1.4"> <orb name="JBoss" print-version="off" use-imr="off" use-bom="off" cache-typecodes="off" cache-poa-names="off" giop-minor-version="2" socket-binding="jacorb" ssl-socket-binding="jacorb-ssl"> <connection retries="5" retry-interval="500" client-timeout="0" server-timeout="0" max-server-connections="500" max-managed-buf-size="24" outbuf-size="2048" outbuf-cache-timeout="-1"/> <initializers security="off" transactions="spec"/> </orb> <poa monitoring="off" queue-wait="on" queue-min="10" queue-max="100"> <request-processors pool-size="10" max-threads="32"/> </poa> <naming root-context="JBoss/Naming/root" export-corbaloc="on"/> <interop sun="on" comet="off" iona="off" chunk-custom-rmi-valuetypes="on" lax-boolean-encoding="off" indirection-encoding-disable="off" strict-check-on-tc-creation="off"/> <security support-ssl="off" add-component-via-interceptor="on" client-supports="MutualAuth" client-requires="None" server-supports="MutualAuth" server-requires="None"/> <properties> <property name="some_property" value="some_value"/> </properties> </subsystem>
다음 요소 특성은 더 이상 지원되지 않으므로 제거해야 합니다.
표 4.5. 제거할 속성
요소 | 지원되지 않는 속성 |
---|---|
<orb> |
|
<poa> |
|
다음 on/off
속성은 더 이상 지원되지 않으며 관리 CLI 마이그레이션 작업을 실행할 때 마이그레이션
되지 않습니다. on
으로 설정된 경우 마이그레이션 경고가 표시됩니다. 이 표에 언급되지 않는 기타 온/오프
속성(예: <security support-ssl="on|off">
)은 여전히 지원되며 성공적으로 마이그레이션됩니다. 유일한 차이점은 해당 값이 on/off에서
로 변경됩니다.
true/
false
표 4.6. ton Off 또는 Remove 속성
요소 | off로 설정할 속성 |
---|---|
<orb> |
|
<interop> |
(24시간
|
<poa> |
|
4.12. 스레드 하위 시스템 구성 마이그레이션
JBoss EAP 6 서버 구성에는 서버의 다양한 하위 시스템에서 스레드
풀을 관리하는 데 사용된 스레드 하위 시스템이 포함되어 있었습니다.
스레드
하위 시스템은 JBoss EAP 7에서 더 이상 사용할 수 없습니다. 대신 각 하위 시스템은 자체 스레드 풀을 관리합니다.
infinispan
하위 시스템에 대한 스레드 풀을 구성하는 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드에서 Infinispan 스레드 풀 구성을 참조하십시오.
jgroups
하위 시스템에 대한 스레드 풀을 구성하는 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드에서 JGroups 스레드 풀 구성을 참조하십시오.
JBoss EAP 6에서는 thread 하위 시스템에 정의된 실행
자를 참조하여 웹
하위 시스템의 커넥터 및 리스너용 스레드
풀을 구성했습니다. JBoss EAP 7에서는 이제 the io
하위 시스템에 정의된 작업자
를 참조하여 undertow
하위 시스템의 스레드 풀을 구성합니다. 자세한 내용은 JBoss EAP 구성 가이드에서 IO 하위 시스템 구성을 참조하십시오.
원격
하위 시스템의 스레드 풀 구성 변경에 대한 자세한 내용은 이 가이드 의 Remoting Subsystem Configuration 마이그레이션 및 JBoss EAP 구성 가이드의 엔드포인트 구성을 참조하십시오.
4.13. Remoting Subsystem Configuration 마이그레이션
JBoss EAP 6에서는 다양한 worker-*
특성을 설정하여 원격
하위 시스템의 스레드 풀을 구성했습니다. 작업자 스레드 풀은 더 이상 JBoss EAP 7의 원격
하위 시스템에서 구성되지 않으며 기존 구성을 수정하려는 경우 다음 메시지가 표시됩니다.
WFLYRMT0022: Worker configuration is no longer used, please use endpoint worker configuration
JBoss EAP 7에서 작업자 스레드 풀은 the io
하위 시스템에 정의된 작업자
를 참조하는 엔드포인트 구성으로 교체됩니다.
엔드포인트 구성 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드의 엔드포인트 구성을 참조하십시오.
4.14. 웹소켓 서버 설정 변경
JBoss EAP 6에서 WebSockets을 사용하려면 다음과 유사한 명령을 사용하여 JBoss EAP 서버 구성 파일의 웹
하위 시스템에서 http
커넥터에 대해 차단되지 않은 NIO2 커넥터 프로토콜을 활성화해야 했습니다.
/subsystem=web/connector=http/:write-attribute(name=protocol,value=org.apache.coyote.http11.Http11NioProtocol)
애플리케이션에서 WebSockets을 사용하려면 WEB-INF/jboss
요소도 만들어 -web.xml 파일에 <enable-web
sockets>true
로 설정해야 했습니다.
JBoss EAP 7에서는 더 이상 기본 WebSocket 지원을 위해 서버를 구성하거나 애플리케이션을 사용하도록 구성할 필요가 없습니다. WebSockets은 Jakarta EE 8 사양의 요구 사항이며 필수 프로토콜은 기본적으로 구성됩니다. 더 복잡한 WebSocket 구성은 JBoss EAP 서버 구성 파일의 undertow
하위 시스템의 servlet-container
에서 수행됩니다. 다음 명령을 사용하여 사용 가능한 설정을 볼 수 있습니다.
/subsystem=undertow/servlet-container=default/setting=websockets:read-resource(recursive=true) { "outcome" => "success", "result" => { "buffer-pool" => "default", "dispatch-to-worker" => true, "worker" => "default" } }
WebSocket 개발에 대한 자세한 내용은 JBoss EAP 개발 가이드에서 웹소켓 애플리케이션 생성을 참조하십시오.
WebSocket 코드 예제는 JBoss EAP와 함께 제공되는 빠른 시작에서도 확인할 수 있습니다.
4.15. SSO(Single Sign-On) 서버 변경
infinispan
하위 시스템은 여전히 JBoss EAP 7에서 Infinispan 캐시의 형태로 HA 서비스에 대한 분산 캐싱 지원을 제공하지만 인증 정보의 캐싱 및 배포는 이전 릴리스와 다르게 처리됩니다.
JBoss EAP 6에서 SSO(Single Sign-On)가 Infinispan 캐시를 제공하지 않은 경우 캐시가 배포되지 않았습니다.
JBoss EAP 7에서 SSO는 HA 프로필을 선택할 때 자동으로 배포됩니다. HA 프로필을 실행할 때 각 호스트에는 웹 캐시 컨테이너의 기본 캐시를 기반으로 하는 고유한 Infinispan 캐시가 있습니다. 이 캐시는 호스트의 관련 세션 및 SSO 쿠키 정보를 저장합니다. JBoss EAP는 개별 캐시 정보를 모든 호스트에 전파합니다. JBoss EAP 7에서는 Infinispan 캐시를 SSO에 구체적으로 할당할 수 없습니다.
JBoss EAP 7에서 SSO는 서버 구성 파일의 the undertow 하위 시스템에서
구성됩니다.
JBoss EAP 7로 마이그레이션할 때 SSO에 대한 애플리케이션 코드 변경이 필요하지 않습니다.
4.16. 데이터 소스 구성 변경
4.16.1. JDBC 데이터 소스 드라이버 이름
JBoss EAP의 이전 릴리스에서 데이터 소스를 구성하면 드라이버 이름에 지정된 값이 JDBC 드라이버 JAR에 포함된 META-INF/services/java.sql.Driver
파일에 나열된 클래스 수에 따라 달라집니다.
단일 클래스를 포함하는 드라이버
META-INF/services/java.sql.Driver
파일이 하나의 클래스만 지정한 경우 드라이버 이름 값은 단순히 JDBC 드라이버 JAR의 이름이었습니다. 이는 JBoss EAP 7에서 변경되지 않았습니다.
여러 클래스를 포함하는 드라이버
JBoss EAP 6에서 META-INF/services/java.sql.Driver
파일에 두 개 이상의 클래스가 나열된 경우 다음 형식으로 주 버전 및 부 버전과 함께 JAR 이름에 해당 이름을 추가하여 드라이버 클래스가 어떤 클래스를 지정했는지 지정합니다.
JAR_NAME + DRIVER_CLASS_NAME + "_" + MAJOR_VERSION + "_" + MINOR_VERSION
JBoss EAP 7에서는 다음과 같이 변경되었습니다. 이제 다음 형식을 사용하여 드라이버 이름을 지정합니다.
JAR_NAME + "_" + DRIVER_CLASS_NAME + "_" + MAJOR_VERSION + "_" + MINOR_VERSION
JAR_NAME과 DRIVER_CLASS_NAME 사이에 밑줄이 추가되었습니다.
MySQL 5.1.31 JDBC 드라이버는 두 개의 클래스가 포함된 드라이버의 예입니다. 드라이버 클래스 이름은 com.mysql.jdbc.Driver
입니다. 다음 예제에서는 이전 릴리스에서 드라이버 이름을 지정하는 방법과 JBoss EAP의 현재 릴리스 간의 차이점을 보여줍니다.
예제: JBoss EAP 6 드라이버 이름
mysql-connector-java-5.1.31-bin.jarcom.mysql.jdbc.Driver_5_1
예제: JBoss EAP 7 드라이버 이름
mysql-connector-java-5.1.31-bin.jar_com.mysql.jdbc.Driver_5_1
4.17. 보안 서버 설정 변경
JBoss EAP 7로 마이그레이션하고 Java Security Manager가 활성화된 상태로 실행되도록 계획하는 경우 정책을 정의하는 방식으로 변경했으며 추가 구성 변경이 필요할 수 있습니다. 또한 사용자 지정 보안 관리자는 JBoss EAP 7에서 지원되지 않습니다.
Java Security Manager 서버 구성 변경에 대한 자세한 내용은 How to Configure Server Security for JBoss EAP에서 이전 버전에서 이동 고려 사항을 참조하십시오.
4.17.1. JBoss EAP 7.0과 JBoss EAP 7.1 간의 레거시 보안 동작 변경
4.17.1.1. 연결할 수 없는 LDAP Realms의 HTTP 상태 변경
JBoss EAP 7.0의 서버에서 LDAP 영역에 연결할 수 없는 경우 보안
하위 시스템에서 HTTP 상태 코드 "401 Unauthorized"를 반환했습니다.
JBoss EAP 7.1 이상에서 레거시 보안
하위 시스템은 "500 Internal Error"의 HTTP 상태 코드를 반환하여 예기치 않은 조건이 발생하여 서버가 요청을 성공적으로 처리하지 못했음을 보다 정확하게 설명합니다.
4.17.1.2. DN에서 구문 역할로 LDAP 보안 영역 활성화
JBoss EAP 7.0에서 org.jboss.as.domain.management.security.parseGroupNameFromLdapDN
시스템 속성은 LDAP 보안 영역이 DN에서 역할을 구문 분석할 수 있도록 하는 데 사용되었습니다. 이 속성이 true
로 설정되면 DN에서 역할을 구문 분석했습니다. 그러지 않으면 일반 LDAP 검색을 사용하여 역할을 검색할 수 있었습니다.
JBoss EAP 7.1 이상에서는 이 시스템 속성이 더 이상 사용되지 않습니다. 대신 다음 관리 CLI 명령을 사용하여 핵심 서비스 경로에서 새로 도입된 parse-group-name-from-dn
특성을 true
로 설정하여 이 옵션을 구성합니다.
/core-service=management/security-realm=REALM_NAME/authorization=ldap/group-search=principal-to-group:add(parse-group-name-from-dn=true)
4.17.1.3. JBoss EAP SSL 인증서를 LDAP 서버로 전송 시 변경 사항
JBoss EAP 7.0에서 관리 인터페이스가 ldapSSL
보안 영역을 사용하도록 구성되면 서버와 LDAP 간의 상호 인증이 실패하여 관리 인터페이스에서 인증에 실패할 수 있습니다. 서로 다른 두 개의 LDAP 연결이 생성되고 각각 다른 스레드에 의해 연결되고 SSL 세션을 공유하지 않기 때문입니다.
JBoss EAP 7.1은 LDAP 아웃바운드
이 옵션을 사용하면 아웃바운드 LDAP 연결을 구성하여 항상 클라이언트 인증서가 필요하도록 구성된 LDAP 서버를 지원할 수 있습니다.
-커넥션에 always-send-client-cert
관리 속성을 도입했습니다.
LDAP 인증은 다음 두 단계로 수행됩니다.
- 계정을 검색합니다.
- 자격 증명을 확인합니다.
기본적으로 always-send-client-cert
특성은 false
로 설정되어 있으므로 클라이언트 SSL 인증서는 첫 번째 검색 계정 요청에서만 전송됩니다. 이 특성이 true
로 설정되면 JBoss EAP LDAP 클라이언트는 검색 및 확인 요청을 모두 사용하여 LDAP 서버에 클라이언트 인증서를 보냅니다.
다음 관리 CLI 명령을 사용하여 이 속성을 true
로 설정할 수 있습니다.
/core-service=management/ldap-connection=my-ldap-connection:write-attribute(name=always-send-client-cert,value=true)
이렇게 하면 서버 구성 파일에 다음과 같은 LDAP 아웃바운드 연결이 생성됩니다.
<management> .... <outbound-connections> <ldap name="my-ldap-connection" url="ldap://127.0.0.1:389" search-dn="cn=search,dc=myCompany,dc=com" search-credential="myPass" always-send-client-cert="true"/> </outbound-connections> .... </management>
4.17.2. FIPS 모드 변경
FIPS 모드에서 실행 중인 경우 기본 동작이 JBoss EAP 7.0과 JBoss EAP 7.1 간에 변경되었습니다.
레거시 보안 영역을 사용하는 경우 JBoss EAP 7.1 이상에서는 개발을 위해 자체 서명된 인증서의 자동 생성을 제공합니다. JBoss EAP 7.0에서 사용할 수 없는 이 기능은 기본적으로 활성화되어 있습니다. 즉, FIPS 모드에서 실행 중인 경우 자동 자체 서명 인증서 생성을 비활성화하도록 서버를 구성해야 합니다. 그렇지 않으면 서버를 시작할 때 다음과 같은 오류가 표시될 수 있습니다.
ERROR [org.xnio.listener] (default I/O-6) XNIO001007: A channel event listener threw an exception: java.lang.RuntimeException: WFLYDM0114: Failed to lazily initialize SSL context ... Caused by: java.lang.RuntimeException: WFLYDM0112: Failed to generate self signed certificate ... Caused by: java.security.KeyStoreException: Cannot get key bytes, not PKCS#8 encoded
자체 서명된 자동 인증서 생성에 대한 자세한 내용은 JBoss EAP 용 서버 보안 구성 방법의 애플리케이션 자동 자체 서명 인증서 생성을 참조하십시오.
4.18. 트랜잭션 하위 시스템 변경
JBoss EAP 6의 트랜잭션
하위 시스템에서 사용 가능한 일부 Transaction Manager 구성 속성은 JBoss EAP 7에서 변경되었습니다.
제거된 트랜잭션 하위 시스템 속성
다음 표에는 JBoss EAP 7의 트랜잭션
하위 시스템과 동등한 대체 속성에서 제거된 JBoss EAP 6 속성이 나열되어 있습니다.
JBoss EAP 6의 특성 | JBoss EAP 7에서 교체 |
---|---|
경로 | object-store-path |
relative-to | object-store-relative-to |
사용되지 않는 트랜잭션 하위 시스템 속성
JBoss EAP 6의 트랜잭션
하위 시스템에서 사용 가능한 다음 특성은 JBoss EAP 7에서 더 이상 사용되지 않습니다. 더 이상 사용되지 않는 속성은 향후 제품 릴리스에서 제거될 수 있습니다. 다음 테이블에는 동등한 대체 특성이 나열되어 있습니다.
JBoss EAP 6의 특성 | JBoss EAP 7에서 교체 |
---|---|
use-hornetq-store | use-journal-store |
hornetq-store-enable-async-io | journal-store-enable-async-io |
enable-statistics | 통계 지원 |
4.19. mod_cluster 설정 변경
mod_cluster의 정적 프록시 목록의 구성이 JBoss EAP 7에서 변경되었습니다.
JBoss EAP 6에서는 hostname:port
형식으로 지정된 httpd 프록시 주소의 쉼표로 구분된 목록인 proxy-list
특성을 구성했습니다.
proxy-list
특성은 JBoss EAP 7에서 더 이상 사용되지 않습니다. 아웃바운드 소켓 바인딩 이름 목록인 proxy
속성으로 교체되었습니다.
이 변경은 mod_cluster에 대한 알림을 비활성화하는 경우와 같이 정적 프록시 목록을 정의하는 방법에 영향을 미칩니다. mod_cluster에 대한 알림을 비활성화하는 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드의 mod_cluster 비활성화 를 참조하십시오.
mod_cluster 속성에 대한 자세한 내용은 JBoss EAP 구성 가이드의 ModCluster 하위 시스템 속성 에서 참조하십시오.
4.20. 구성 변경 사항 보기
JBoss EAP 7은 실행 중인 서버에 대한 구성 변경 사항을 추적할 수 있는 기능을 제공합니다. 이를 통해 관리자는 권한이 있는 사용자가 변경한 구성 기록을 볼 수 있습니다.
JBoss EAP 7.0에서는 core-service
관리 CLI 명령을 사용하여 옵션을 구성하고 최근 구성 변경 사항을 나열해야 합니다.
예제: JBoss EAP 7.0의 구성 변경 사항 나열
/core-service=management/service=configuration-changes:add(max-history=10) /core-service=management/service=configuration-changes:list-changes
JBoss EAP 7.1은 실행 중인 서버의 구성 변경 사항을 추적하도록 구성할 수 있는 새로운 코어 관리
하위 시스템을 도입했습니다. JBoss EAP 7.1 이상에서 구성 변경 사항을 구성하고 보는 데 선호되는 방법입니다.
예제: JBoss EAP 7.1 이상에서 구성 변경 사항 나열
/subsystem=core-management/service=configuration-changes:add(max-history=20) /subsystem=core-management/service=configuration-changes:list-changes
JBoss EAP 7.1에 도입된 새로운 core-management
하위 시스템을 사용하는 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드의 구성 변경 보기를 참조하십시오.
5장. 애플리케이션 마이그레이션 변경
5.1. 웹 서비스 애플리케이션 변경
JBossWS 5는 주로 Apache CXF, ApacheWSS4J 및 Apache Santuario 구성 요소의 업그레이드를 통해 JBoss EAP 7 웹 서비스에 새로운 기능 및 성능 개선을 제공합니다.
5.1.1. JAX-RPC 지원 변경 사항
JAX-RPC(Java API for XML-based RPC)는 Java EE 6에서 더 이상 사용되지 않으며 Java EE 7에서는 선택 사항이었습니다. JBoss EAP 7에서 더 이상 사용 가능하거나 지원되지 않습니다. JAX-RPC를 사용하는 애플리케이션은 현재 Jakarta EE 표준 웹 서비스 프레임워크인 Jakarta XML Web Services 를 사용하도록 마이그레이션해야 합니다.
JAX-RPC 웹 서비스는 다음 방법 중 하나로 식별할 수 있습니다.
-
루트 요소
<java-wsdl-mapping>을 갖는 XML 파일인 JAX-
RPC 매핑 파일이 있습니다. <
jaxrpc-mapping-file>
요소가 포함된; 하위 요소를 포함하는 <webservice-description>
;webservices.xml
XML 설명자 파일이 있습니다. 다음은 JAX-RPC 웹 서비스를 정의하는webservices.xml
설명자 파일의 예입니다.<webservices xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd" version="1.1"> <webservice-description> <webservice-description-name>HelloService</webservice-description-name> <wsdl-file>WEB-INF/wsdl/HelloService.wsdl</wsdl-file> <jaxrpc-mapping-file>WEB-INF/mapping.xml</jaxrpc-mapping-file> <port-component> <port-component-name>Hello</port-component-name> <wsdl-port>HelloPort</wsdl-port> <service-endpoint-interface>org.jboss.chap12.hello.Hello</service-endpoint-interface> <service-impl-bean> <servlet-link>HelloWorldServlet</servlet-link> </service-impl-bean> </port-component> </webservice-description> </webservices>
-
JAX
-RPC 매핑 파일을 참조하는
파일이 있습니다.<service-ref>
가 포함된 ejb-jar.xml
5.1.2. Apache CXF Spring 웹 서비스 변경
JBoss EAP의 이전 릴리스에서는 엔드포인트 배포 아카이브에 jbossws-cxf.xml
구성 파일을 포함하여 JBossWS 및 Apache CXF 통합을 사용자 지정할 수 있습니다. 이에 대한 한 가지 사용 사례는 Apache CXF 버스에서 웹 서비스 클라이언트 및 서버 엔드포인트에 대한 인터셉터 체인을 구성하는 것이었습니다. 이러한 통합에는 Spring을 JBoss EAP 서버에 배포해야 했습니다.
Spring 통합은 JBoss EAP 7에서 더 이상 지원되지 않습니다. jbossws-cxf.xml
설명자 구성 파일이 포함된 애플리케이션을 수정하여 해당 파일에 정의된 사용자 지정 구성을 교체해야 합니다. Apache CXF API에 직접 액세스할 수는 있지만 애플리케이션은 이식할 수 없습니다.
권장되는 접근 방식은 Spring 사용자 지정 구성을 가능한 새로운 JBossWS 설명자 구성 옵션으로 교체하는 것입니다. JBossWS 설명자 기반 접근 방식은 클라이언트 엔드포인트 코드를 수정할 필요 없이 유사한 기능을 제공합니다. 경우에 따라 Spring을 CDI(Context Dependency Injection)로 바꿀 수 있습니다.
Apache CXF 인터셉터
JBossWS 설명자는 클라이언트 엔드포인트 코드를 수정하지 않고 인터셉터를 선언할 수 있는 새로운 구성 옵션을 제공합니다. 대신 cxf.interceptors. in 및 cxf.interceptors.
out
속성에 대해 인터셉터 클래스 이름 목록을 지정하여 사전 정의된 클라이언트 및 끝점 구성 내에서 인터셉터를 선언합니다.
다음은 이러한 속성을 사용하여 인터셉터를 선언하는 jaxws-endpoint-config.xml
파일의 예입니다.
<?xml version="1.0" encoding="UTF-8"?> <jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd"> <endpoint-config> <config-name>org.jboss.test.ws.jaxws.cxf.interceptors.EndpointImpl</config-name> <property> <property-name>cxf.interceptors.in</property-name> <property-value>org.jboss.test.ws.jaxws.cxf.interceptors.EndpointInterceptor,org.jboss.test.ws.jaxws.cxf.interceptors.FooInterceptor</property-value> </property> <property> <property-name>cxf.interceptors.out</property-name> <property-value>org.jboss.test.ws.jaxws.cxf.interceptors.EndpointCounterInterceptor</property-value> </property> </endpoint-config> </jaxws-config>
Apache CXF 기능
JBossWS 설명자를 사용하면 cxf.features
속성에 대한 기능 클래스 이름 목록을 지정하여 사전 정의된 클라이언트 및 엔드포인트 구성 내에서 기능을 선언할 수 있습니다.
다음은 이 속성을 사용하여 기능을 선언하는 jaxws-endpoint-config.xml
파일의 예입니다.
<?xml version="1.0" encoding="UTF-8"?> <jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd"> <endpoint-config> <config-name>Custom FI Config</config-name> <property> <property-name>cxf.features</property-name> <property-value>org.apache.cxf.feature.FastInfosetFeature</property-value> </property> </endpoint-config> </jaxws-config>
Apache CXF HTTP 전송
Apache CXF에서 HTTP 전송 구성은 org.apache.cxf.transport.http.HTTPConduit
옵션을 지정하여 수행합니다. JBossWS 통합을 통해 다음과 같이 Apache CXF API를 프로그래밍 방식으로 수정할 수 있습니다.
import org.apache.cxf.frontend.ClientProxy; import org.apache.cxf.transport.http.HTTPConduit; import org.apache.cxf.transports.http.configuration.HTTPClientPolicy; // Set chunking threshold before using a JAX-WS port client ... HTTPConduit conduit = (HTTPConduit)ClientProxy.getClient(port).getConduit(); HTTPClientPolicy client = conduit.getClient(); client.setChunkingThreshold(8192); ...
시스템 속성을 설정하여 Apache CXF HTTPConduit
기본값을 제어하고 재정의할 수도 있습니다.
속성 | 유형 | 설명 |
---|---|---|
cxf.client.allowChunking | 부울 | 청크를 사용하여 요청을 보낼지 여부를 지정합니다. |
cxf.client.chunkingThreshold | 정수 | chunking이 아닌 상태에서 청크 모드로 전환하는 임계값을 설정합니다. |
cxf.client.connectionTimeout | 긴 | 연결 시간 제한에 대한 시간(밀리초)을 설정합니다. |
cxf.client.receiveTimeout | 긴 | 수신 시간 제한에 대한 시간(밀리초)을 설정합니다. |
cxf.client.connection | 문자열 |
|
cxf.tls-client.disableCNCheck | 부울 | CN 호스트 이름 확인을 비활성화할지 여부를 지정합니다. |
5.1.3. WS-Security 변경
-
애플리케이션에
org.apache.ws.security.WSPasswordCallback
클래스에 액세스하는 사용자 지정 콜백 핸들러가 포함된 경우 이 클래스는org.apache.wss4j.common.ext
패키지로 이동했습니다. -
org.apache.ws.security.saml.ext
패키지의 대부분의 SAML 빈 오브젝트가org.apache.wss4j.common.saml 패키지로
이동되었습니다. - RSA v1.5 키 전송을 사용하면 모든 관련 알고리즘이 기본적으로 허용되지 않습니다.
-
이전에 STS(보안 토큰 서비스)가
BehalfOf 토큰에서만
검증되었습니다. 이제ActAs
토큰도 검증합니다. 결과적으로ActAs
토큰에 제공된UsernameToken
에 유효한 사용자 이름 및 암호를 지정해야 합니다. -
이제 SAML Bearer 토큰에 내부 서명이 있어야 합니다.
org.apache.wss4j.dom.validate.SamlAssertionValidator
클래스에 서명 확인을 활성화하거나 비활성화하는setRequireBearerSignature()
메서드가 있습니다.
5.1.4. JBoss 모듈 구조 변경
cxf-api
및 cxf-rt-core
JAR이 하나의 cxf-core
JAR로 병합되었습니다. 그 결과 JBoss EAP의 org.apache.cxf
모듈에 이제 cxf-core
JAR이 포함되어 이전 릴리스보다 더 많은 클래스를 노출합니다.
5.1.5. Bouncy의 요구 사항 및 변경 사항
XML/WS-Security에서 대칭 암호화에 GCM(Galulators/Counter Mode)을 사용하여 AES 암호화를 사용하려면 Bouncy-le Security Provider가 필요합니다.
JBoss EAP 7은 org.bouncycastle
모듈과 함께 제공되고 JBossWS는 이제 클래스 로더를 활용하여 Bouncy-le Security Provider를 가져오고 사용할 수 있게 되었습니다. 따라서 현재 JVM에서 더 이상 Bouncy를 정적으로 설치할 필요가 없습니다. 컨테이너 외부에서 실행되는 애플리케이션의 경우 클래스 경로에 Bouncy-le 라이브러리를 추가하여 보안 공급자를 JBossWS에서 사용할 수 있습니다.
서버의 jaxws -endpoint-config
.
.xml 배포 설명자 파일 또는
속성 값을 클라이언트의 jaxws-client-config.xml 설명자 파일에서 org.jboss.ws
.cxf.noLocalBCtrue
로 설정하여 이 동작을 비활성화할 수 있습니다
JBoss EAP와 함께 제공되는 버전과 다른 버전을 사용하려는 경우 여전히 JVM에 Bouenciesle을 정적으로 설치할 수 있습니다. 이 경우 정적으로 설치된 Bouncy-le Security Provider가 클래스 경로에 있는 공급자를 통해 선택됩니다. 문제를 방지하려면 Bouncyle 1.49, 1.51 이상을 사용해야 합니다.
5.1.6. Apache CXF 버스 선택 전략
컨테이너에서 실행되는 클라이언트에 대한 기본 버스 선택 전략이 THREAD_BUS에서
로 변경되었습니다. 컨테이너 외부를 실행하는 클라이언트의 경우 기본 전략은 여전히 TCCL_BUS
THREAD_BUS
입니다. 다음 방법 중 하나를 사용하여 이전 릴리스의 동작을 복원할 수 있습니다.
-
시스템 속성
org.jboss.ws.cxf.jaxws-client.bus.strategy
값을THREAD_BUS
로 설정하여 JBoss EAP 서버를 부팅합니다. - 클라이언트 코드에서 선택 전략을 명시적으로 설정합니다.
5.1.7. WebServiceRef에 대한 Jakarta XML Web Services 2.2 요구 사항
컨테이너는 웹 서비스 참조에 삽입되는 클라이언트를 구축자에서 WebServiceFeature 클래스를 인수로 포함하는 Jakarta XML Web Services 2.2 스타일 생성자를 사용해야 합니다. JBossWS 4와 함께 제공되는 JBoss EAP 6.4는 해당 요구 사항을 숨깁니다. JBoss EAP 7에는 이 요구 사항을 더 이상 숨기지 않는 JBossWS 5가 포함되어 있습니다. 즉, 컨테이너에서 주입한 사용자 제공 서비스 클래스는 하나 이상의 WebService Feature 인수를 포함하는
Services 2.2 이상을 구현해야 합니다.
javax.xml.ws.Service
생성자를 사용하도록 기존 코드를 업데이트하여 Jakarta XML Web
protected Service(URL wsdlDocumentLocation, QName serviceName, WebServiceFeature... features)
5.1.8. IgnoreHttpsHost CN check change
이전 릴리스에서는 시스템 속성 org.jboss.security.ignoreHttpsHost
를 true
로 설정하여 인증서에 제공된 서비스의 CN(Common Name)에 대해 HTTPS URL 호스트 이름 확인을 비활성화할 수 있습니다. 이 시스템 속성 이름은 cxf.tls-client.disableCNCheck
로 교체되었습니다.
5.1.9. 서버 측 구성 및 클래스 로드
서비스 엔드포인트 및 서비스 클라이언트 핸들러에 주입을 활성화한 결과 더 이상 org.jboss.as.webservices.server.integration
JBoss 모듈에서 핸들러 클래스를 자동으로 로드할 수 없습니다. 애플리케이션이 지정된 사전 정의된 구성에 의존하는 경우 배포에 대한 새 모듈 종속성을 명시적으로 정의해야 할 수 있습니다. 자세한 내용은 Migrate Explicit Module Dependencies에서 참조하십시오.
5.1.10. Java 지원 표준 덮어쓰기 메커니즘 사용 중단
Java 지원 표준 재정의 메커니즘 은 JDK 1.8_40에서 더 이상 사용되지 않으며 JDK 9에서 이를 제거하지 않습니다. 이 메커니즘을 통해 개발자는 JAR을 JRE 내의 추천된 디렉토리에 배치하여 배포된 모든 애플리케이션에서 라이브러리를 사용할 수 있습니다.
애플리케이션이 Apache CXF의 JBossWS 구현을 사용하는 경우 JBoss EAP 7은 필요한 종속성을 올바른 순서로 추가하며 이러한 변경의 영향을 받지 않아야 합니다. 애플리케이션이 Apache CXF에 직접 액세스하는 경우 이제 애플리케이션 배포의 일부로 JBossWS 종속 항목 다음에 Apache CXF 종속성을 제공해야 합니다.
5.1.11. EAR 아카이브의 설명자 사양
JBoss EAP의 이전 릴리스에서는 JAR 아카이브의 META
배포 설명자 파일을 구성할 수 있습니다.
-INF/ 디렉터리에 또는 POJO 웹 서비스 배포를 위한
webservices.xmlWEB-INF/
디렉터리에 대한 jboss-
JBoss EAP 7에서는 EAR 아카이브의 META
배포 설명자 파일을 구성할 수 있습니다. -INF/
디렉터리에 jboss-webservices.xmljboss-webservices.xml
파일이 EAR 아카이브와 JAR 또는 WAR 아카이브에 모두 있는 경우 JAR 또는 WAR에 대한 jboss-webservices.xml
파일의 구성 데이터가 EAR 설명자 파일의 해당 데이터를 재정의합니다.
5.2. 원격 URL 커넥터 및 포트 업데이트
JBoss EAP 7에서 기본 커넥터는 remote
에서 http-remoting으로
변경되었으며 기본 원격 연결 포트가 4447
에서 8080
으로 변경되었습니다. 기본 구성의 JNDI 공급자 URL이 remote://localhost:4447
에서 http-remoting://localhost:8080
으로 변경되었습니다.
JBoss EAP 7 마이그레이션 작업을 사용하여 구성을 업데이트하는 경우 마이그레이션
작업에서 하위 시스템 구성의 JBoss EAP 6 원격 커넥터 및 4447
포트 구성 설정을 유지하므로 원격 커넥터, 원격 포트 또는 JNDI 공급자 URL을 수정할 필요가 없습니다. 마이그레이션
작업에 대한 자세한 내용은 Management CLI Migration Operation 을 참조하십시오.
migrate
작업을 사용하지 않고 새 JBoss EAP 7 기본 구성으로 실행하는 경우, 위에서 설명한 대로 새 설정을 사용하려면 원격 커넥터, 원격 포트 및 JNDI 공급자 URL을 변경해야 합니다.
5.3. 메시징 애플리케이션 변경
5.3.1. Jakarta Messaging 배포 설명자 교체 또는 업데이트
명명 패턴 -jms.xml로 식별된 독점적인 HornetQ 메시징 리소스 배포 설명자 파일은 더 이상 JBoss EAP 7에서 작동하지 않습니다.
다음은 JBoss EAP 6의 Jakarta Messaging 리소스 배포 설명자 파일의 예입니다.
<?xml version="1.0" encoding="UTF-8"?> <messaging-deployment xmlns="urn:jboss:messaging-deployment:1.0"> <hornetq-server> <jms-destinations> <jms-queue name="testQueue"> <entry name="queue/test"/> <entry name="java:jboss/exported/jms/queue/test"/> </jms-queue> <jms-topic name="testTopic"> <entry name="topic/test"/> <entry name="java:jboss/exported/jms/topic/test"/> </jms-topic> </jms-destinations> </hornetq-server> </messaging-deployment>
이전 릴리스에서 애플리케이션에 -jms.xml
Jakarta Messaging 배포 설명자를 사용한 경우 애플리케이션을 변환하여 Jakarta EE 플랫폼의 EE.5.18 섹션에 지정된 표준 배포 설명자를 사용하거나 messaging-activemq-deployment
스키마를 사용하도록 배포 설명자를 업데이트할 수 있습니다. 설명자를 업데이트하도록 선택하는 경우 다음과 같이 수정해야 합니다.
- 네임스페이스를 "urn:jboss:messaging-deployment:1.0"에서 "urn:jboss:messaging-activemq-deployment:1.0"으로 변경합니다.
-
<institutionetq-server>
요소 이름을<server>
로 변경합니다.
수정된 파일은 다음 예와 같이 표시됩니다.
<?xml version="1.0" encoding="UTF-8"?> <messaging-deployment xmlns="urn:jboss:messaging-activemq-deployment:1.0"> <server> <jms-destinations> <jms-queue name="testQueue"> <entry name="queue/test"/> <entry name="java:jboss/exported/jms/queue/test"/> </jms-queue> <jms-topic name="testTopic"> <entry name="topic/test"/> <entry name="java:jboss/exported/jms/topic/test"/> </jms-topic> </jms-destinations> </server> </messaging-deployment>
메시징과 관련된 서버 구성 변경에 대한 자세한 내용은 Messaging Server Configuration Changes 를 참조하십시오.
5.3.2. 외부 자카르타 메시징 클라이언트 업데이트
JBoss EAP 7은 자카르타 메시징 1.1 API를 계속 지원하므로 코드를 수정할 필요가 없습니다.
JBoss EAP 7에서는 기본 원격 커넥터와 포트가 변경되었습니다. 이 변경 사항에 대한 자세한 내용은 원격 URL 커넥터 및 포트 업데이트를 참조하십시오.
마이그레이션 작업을 사용하여 서버 구성을 마이그레이션하는
경우 이전 설정이 유지되며 PROVIDER_URL
을 업데이트할 필요가 없습니다. 그러나 새 JBoss EAP 7 기본 구성으로 실행하는 경우 새 http-remoting://localhost:8080
설정을 사용하도록 클라이언트 코드에서 PROVIDER_URL
을 변경해야 합니다. 자세한 내용은 Migrate Remote Naming Client Code 에서 참조하십시오.
Jakarta Messaging 2.0 API를 사용하도록 코드를 마이그레이션하려면 작동 예제는 helloworld-jms
빠른 시작을 참조하십시오.
5.3.3. HornetQ API 교체
JBoss EAP 6에는 org. ticketsetq
모듈이 포함되어 있어 애플리케이션 소스 코드에서 HornetQ API 를 사용할 수 있었습니다.
Apache ActiveMQ Artemis는 JBoss EAP 7에서 HornetQ를 교체하므로 Apache ActiveMQ Artemis API를 사용하기 위해 HornetQ API를 사용하는 모든 코드를 마이그레이션해야 합니다. 이 API의 라이브러리는 org.apache.activemq.artemis
모듈에 포함되어 있습니다.
ActiveMQ Artemis는 HornetQ의 진화이므로 많은 개념이 계속 적용됩니다.
5.3.4. 더 이상 사용되지 않는 주소 설정 속성 교체
auto-create-jms-queues, auto-delete-jms- queues, auto-create-jms-topics
,auto-delete-jms-topics
및auto-delete-jms-topics
특성을 사용하여 auto-delete-jms-topics
특성이 부분적으로만 구현되고 JBoss EAP 7에서 완전히 구성 가능한 것은 아닙니다. 더 이상 사용되지 않는 이러한 속성은 기술 프리뷰 기능으로 만 제공되었으며 지원되지 않았습니다.
더 이상 사용되지 않는 이러한 속성의 용도를 다음 대체 특성으로 교체해야 합니다.
사용되지 않는 속성은 JBoss EAP 7.4에서 더 이상 이 기능을 구성하지 않으며 적용되지 않습니다. 대체 속성도 지원되지 않습니다. 최상의 노력으로 마이그레이션할 수 있는 방법으로만 제공됩니다.
사용되지 않는 속성 | 교체 속성 |
---|---|
auto-create-jms-queues | auto-create-queues |
auto-delete-jms-queues | auto-delete-queues |
auto-create-jms-topics | auto-create-addresses |
auto-delete-jms-topics | auto-delete-addresses |
JBoss EAP 6에서는 기본 주소 설정 특성이 false
로 설정되었습니다. JBoss EAP 7의 대체 속성은 기본적으로 true입니다
.
JBoss EAP 6 동작을 유지하려면 대체 특성을 false
로 설정해야 합니다.
이러한 교체 속성에 대한 자세한 내용은 Configuring Messaging 에서 Address Setting Attributes 를 참조하십시오.
5.3.5. JBoss EAP 7에 필요한 메시징 애플리케이션 변경 사항
JBoss EAP 7.2부터 클라이언트 애플리케이션이 Artemis 클라이언트 JAR(예: artemis-jms-client, artemis-
commons, artemis-
core-client 또는
)에 직접 의존하는 경우, artemis-
selectorpom.xml
파일에 다음 종속성을 for wildfly-client-properties
에 추가해야 합니다.
<dependency> <groupId>org.jboss.eap</groupId> <artifactId>wildfly-client-properties</artifactId> </dependency>
이는 JBEAP-15889 에 설명된 대로 이전 JBoss EAP 7 클라이언트에서 message.getJMSReplyTo()
를 호출할 때 JMSRuntimeException
을 방지하기 위한 것입니다.
5.4. JAX-RS 및 RESTEasy 애플리케이션 변경
JBoss EAP 6에 JAX-RS 1.x를 구현한 RESTEasy 2가 번들로 포함되었습니다.
JBoss EAP 7.0 및 JBoss EAP 7.1에는 JSR 339에서 정의한 JAX-RS 2.0 구현인 RESTEasy 3.0.x가 포함되어 있습니다. JAX-RS 2.0: RESTful Web Services 사양용 Java API RESTful 웹 서비스용 Java API에 대한 자세한 내용은 JAX-RS 2.0 API 사양을 참조하십시오.
JBoss EAP 7.4에는 Jakarta RESTful Web Services 2.1 의 구현인 RESTEasy 3.9.0이 포함되어 있습니다. 이 릴리스에는 JDK 11에 대한 지원도 추가되었습니다. 일부 RESTEasy 4 주요 기능을 제공하는 동안 이 릴리스는 RESTEasy 3.0을 기반으로 이전 버전과의 호환성을 보장합니다. 따라서 RESTEasy 3.0.x에서 3.9.0으로 마이그레이션할 때 몇 가지 문제가 발생할 수 있습니다. RESTEasy 3.9.0용 Java API에 대한 자세한 내용은 RESTEasy JAX-RS 3.9.0.Final API 를 참조하십시오.
JBoss EAP 6.4에서 마이그레이션하는 경우 JBoss EAP에 포함된 jackson의 버전이 변경되었습니다. JBoss EAP 6.4에는 jackson 1.이 포함되어 있습니다. JBoss EAP 7 이상에는 이제 jackson 2.6.3 이상이 포함됩니다.
이 섹션에서는 이러한 변경 사항이 RESTEasy 또는 JAX-RS를 사용하는 애플리케이션에 미치는 방법에 대해 설명합니다.
5.4.1. RESTEasy 더 이상 사용되지 않는 클래스
인터셉터 및 MessageBody 클래스
JSR 311: JAX-RS: RESTful Web Services 용 Java™ API에 인터셉터 프레임워크가 포함되지 않았으므로 RESTEasy 2에서 인터셉터 프레임워크를 제공했습니다. JSR 339: JAX-RS 2.0: RESTful Web Services 용 Java API는 공식 인터셉터 및 필터 프레임워크를 도입하여 RESTEasy 2에 포함된 인터셉터 프레임워크가 더 이상 사용되지 않으며 RESTEasy 3.x의 JAX-RS 호환 인터셉터 기능으로 대체되었습니다. 관련 인터페이스는 jaxrs-api 모듈의
패키지에 정의되어 있습니다.
javax.ws.rs
.ext
다음 인터셉터 인터페이스는 RESTEasy 3.x에서 더 이상 사용되지 않습니다.
-
org.jboss.resteasy.spi.interception.PreProcessInterceptor
인터페이스는 RESTEasy 3.x의javax.ws.rs.container.ContainerRequestFilter
인터페이스로 교체되었습니다. 다음 인터페이스 및 클래스는 RESTEasy 3.x에서도 더 이상 사용되지 않습니다.
-
org.jboss.resteasy.spi.interception.MessageBodyReaderInterceptor
-
org.jboss.resteasy.spi.interception.MessageBodyWriterInterceptor
-
org.jboss.resteasy.spi.interception.MessageBodyWriterContext
-
org.jboss.resteasy.spi.interception.MessageBodyReaderContext
-
org.jboss.resteasy.core.interception.InterceptorRegistry
-
org.jboss.resteasy.core.interception.InterceptorRegistryListener
-
org.jboss.resteasy.core.interception.ClientExecutionContextImpl
-
-
org.jboss.resteasy.spi.interception.MessageBodyWriterInterceptor
인터페이스가javax.ws.rs.ext.WriterInterceptor
인터페이스로 교체되었습니다. 또한
javax.ws.rs.ext.MessageBodyWriter
인터페이스에 대한 일부 변경 사항은 JAX-RS 1.x와 관련하여 이전 버전과 호환되지 않을 수 있습니다. 애플리케이션이 JAX-RS 1.x를 사용한 경우 애플리케이션 코드를 검토하여 엔드포인트에@Produces 또는 @
Consumes
를 정의했는지 확인합니다. 이렇게 하지 않으면 다음과 유사한 오류가 발생할 수 있습니다.org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: <OBJECT> of media type:
다음은 이 오류를 일으킬 수 있는 REST 엔드포인트의 예입니다.
@Path("dates") public class DateService { @GET @Path("daysuntil/{targetdate}") public long showDaysUntil(@PathParam("targetdate") String targetDate) { DateLogger.LOGGER.logDaysUntilRequest(targetDate); final long days; try { final LocalDate date = LocalDate.parse(targetDate, DateTimeFormatter.ISO_DATE); days = ChronoUnit.DAYS.between(LocalDate.now(), date); } catch (DateTimeParseException ex) { // ** DISCLAIMER **. This example is contrived. throw new WebApplicationException(Response.status(400).entity(ex.getLocalizedMessage()).type(MediaType.TEXT_PLAIN) .build()); } return days; } }
이 문제를 해결하려면
javax.ws.rs.Produces 및
대한 가져오기를 다음과 같이 추가합니다.@Produces
주석에... import javax.ws.rs.Produces; ... @Path("dates") public class DateService { @GET @Path("daysuntil/{targetdate}") @Produces(MediaType.TEXT_PLAIN) public long showDaysUntil(@PathParam("targetdate") String targetDate) { DateLogger.LOGGER.logDaysUntilRequest(targetDate); final long days; try { final LocalDate date = LocalDate.parse(targetDate, DateTimeFormatter.ISO_DATE); days = ChronoUnit.DAYS.between(LocalDate.now(), date); } catch (DateTimeParseException ex) { // ** DISCLAIMER **. This example is contrived. throw new WebApplicationException(Response.status(400).entity(ex.getLocalizedMessage()).type(MediaType.TEXT_PLAIN) .build()); } return days; } }
이전 릴리스의 RESTEasy의 모든 인터셉터는 새로운 JAX-RS 필터 및 인터셉터 인터페이스와 병렬로 실행될 수 있습니다.
인터셉터에 대한 자세한 내용은 JBoss EAP용 웹 서비스 애플리케이션 개발의 RESTEasy 인터셉터 를 참조하십시오.
새로운 교체 API에 대한 자세한 내용은 RESTEasy JAX-RS 3.9.0.Final API 를 참조하십시오.
클라이언트 API
resteasy-jaxrs
의 RESTEasy 클라이언트 프레임워크는 JBoss EAP 7.0에서 JAX-RS 2.0 호환 resteasy-client
모듈로 교체되었습니다. 결과적으로 일부 RESTEasy 클라이언트 API 클래스 및 메서드는 더 이상 사용되지 않습니다.
다음 클래스는 더 이상 사용되지 않습니다.
-
org.jboss.resteasy.client.ClientResponseFailure
예외 및org.jboss.resteasy.client.ClientExecutor
및org.jboss.resteasy.client.EntityTypeFactory
인터페이스도 더 이상 사용되지 않습니다. org.jboss.resteasy.client.ClientRequest 및
org.
jboss.resteasy.client.ClientResponse 클래스를 각각org.
jboss.resteasy.client.jaxrs.ResteasyClient 및javax.ws.rs.core.Response
로 교체해야 합니다.다음은 RESTEasy 2.3.x에서 RESTEasy 클라이언트를 사용하여 링크 헤더를 보내는 방법의 예입니다.
ClientRequest request = new ClientRequest(generateURL("/linkheader/str")); request.addLink("previous chapter", "previous", "http://example.com/TheBook/chapter2", null); ClientResponse response = request.post(); LinkHeader header = response.getLinkHeader();
다음은 RESTEasy 3에서 RESTEasy 클라이언트를 사용하여 동일한 작업을 수행하는 방법의 예입니다.
ResteasyClient client = new ResteasyClientBuilder().build(); Response response = client.target(generateURL("/linkheader/str")).request() .header("Link", "<http://example.com/TheBook/chapter2>; rel=\"previous\"; title=\"previous chapter\"").post(Entity.text(new String())); javax.ws.rs.core.Link link = response.getLink("previous");
JAX
-RS 웹 서비스와 상호 작용하는 외부 JAX-RS RESTEasy 클라이언트의 예는 resteasy-jaxrs-client
빠른 시작을 참조하십시오.-
org.jboss.resteasy.client.cache
패키지의 클래스 및 인터페이스도 더 이상 사용되지 않습니다. 해당 이미지는org.jboss.resteasy.client.jaxrs.cache
패키지의 동등한 클래스 및 인터페이스로 교체됩니다.
org.jboss.resteasy.client.jaxrs
API 클래스에 대한 자세한 내용은 RESTEasy JAX-RS JavaDoc 을 참조하십시오.
StringConverter
RESTEasy 3.x에서는 org.jboss.resteasy.spi.StringConverter
클래스가 더 이상 사용되지 않습니다. 이 기능은 JAX-RS jax.ws.rs.ext.ParamConverterProvider 클래스를 사용하여 교체할 수 있습니다.
5.4.2. 삭제됨 또는 보호된 RESTEasy 클래스
ResteasyProviderFactory Add 방법
대부분의 org.jboss.resteasy.spi.ResteasyProviderFactory
add()
메서드가 제거되었거나 RESTEasy 3.0에서 보호되었습니다. 예를 들어 addBuiltInMessageBodyReader()
및 addBuiltInMessageBodyWriter()
메서드가 제거되고 addMessageBodyReader()
및 addMessageBodyWriter()
메서드가 보호되었습니다.
이제 register Provider() 및
메서드를 사용해야 합니다.
registerProviderInstance()
RESTEasy 3에서 제거된 추가 클래스
서버에 캐시해야 하는 JAX-RS 메서드에 대한 응답을 지정한 @org.jboss.resteasy.annotations.cache.ServerCached
주석은 RESTEasy 3에서 제거되었으며 애플리케이션 코드에서 제거해야 합니다.
5.4.3. 추가 RESTEasy 변경
SignedInput 및 SignedOuput
-
resteasy-crypto
의SignedInput
및 SignedOutputRequest
또는Response
오브젝트에multipart/signed
로 설정되거나@Consumes 또는 @
Produces
주석을 사용하여Content-Type
이 설정되어 있어야 합니다. -
SignedOutput
및SignedInput
을 사용하여@Produces 또는 @
Consumes
주석에 해당 유형을 설정하여애플리케이션/pkcs7-signature
MIME 유형 형식을 바이너리 형식으로 반환할 수 있습니다. -
@Produces
또는@Consumes
가텍스트/일반
MIME 유형인 경우SignedOutput
은 base64로 인코딩되고 문자열로 전송됩니다.
보안 필터
@RolesAllowed, @
PermitAll 및
에 대한 보안 필터는 이제 "401 Unauthorized" 대신 "403 Forbidden"을 반환합니다.
@DenyAll
클라이언트측 필터
RESTEasy 3.0 이전 릴리스에서 RESTEasy 클라이언트 API를 사용할 때 JAX-RS 2.0에서 도입된 클라이언트 측 필터는 바인딩 및 실행되지 않습니다.
비동기 HTTP 지원
JAX-RS 2.0 사양은 @ Suspended 주석
과 AsynResponse
인터페이스를 사용하여 비동기 HTTP 지원을 추가했기 때문에 비동기 HTTP에 대한 RESTEasy 독점 API는 더 이상 사용되지 않으며 향후 RESTEasy 릴리스에서 제거될 수 있습니다. 비동기 Tomcat 및 비동기 JBoss Web 모듈도 서버 설치에서 제거되었습니다. 서블릿 3.0 컨테이너를 사용하지 않는 경우 비동기 HTTP 서버 측 처리가 동일한 요청 스레드에서 동기적으로 시뮬레이션되고 실행됩니다.
서버 측 캐시
서버 측 캐시 설정이 변경되었습니다. 자세한 내용은 RESTEasy 문서를 참조하십시오.
YAML 공급자 설정 변경
JBoss EAP의 이전 릴리스에서는 기본적으로 RESTEasy YAML 프로바이더 설정이 활성화되었습니다. 이는 JBoss EAP 7에서 변경되었습니다. YAML 공급자는 기본적으로 비활성화되어 있습니다. RESTEasy에서 매핑 해제를 위해 사용하는 SnakeYAML
라이브러리의 보안 문제로 인해 해당 사용은 지원되지 않으며 애플리케이션에서 명시적으로 활성화해야 합니다. 애플리케이션에서 YAML 프로바이더를 활성화하고 Maven 종속성을 추가하는 방법에 대한 자세한 내용은 JBoss EAP용 웹 서비스 애플리케이션 개발에서 YAML 공급자를 참조하십시오.
Content-Type 헤더의 기본 Charset UTF-8
JBoss EAP 7.1부터 resteasy.add.charset
매개 변수는 기본적으로 true
로 설정됩니다. RESTEasy가 명시적 문자 집합 없이
을 추가하지 않도록 하려면 text/* 또는
미디어 유형을 반환할 때 반환된 content-type 헤더에 charactersset=UTF-8application/xml*
resteasy.add.charset
매개변수를 false
로 설정할 수 있습니다.
텍스트 미디어 유형 및 문자 세트에 대한 자세한 내용은 JBoss EAP용 웹 서비스 애플리케이션 개발에서 텍스트 미디어 유형 및 문자 집합을 참조하십시오.
SerializableProvider
신뢰할 수 없는 소스에서 Java 오브젝트를 역직렬화하는 것은 안전하지 않습니다. 이러한 이유로 JBoss EAP 7에서 org.jboss.resteasy.plugins.providers.SerializableProvider
클래스는 기본적으로 비활성화되어 있으므로 이 공급업체를 사용하지 않는 것이 좋습니다.
리소스 메서드에 요청 일치
RESTEasy 3에서는 JAX-RS 사양에 정의된 대로 일치 규칙 구현에 개선 및 수정 사항이 적용되었습니다. 특히 하위 리소스 메서드의 모호한 URI와 하위 리소스 검색기를 처리하는 방법에 대한 변경 사항이 발생했습니다.
RESTEasy 2에서는 동일한 URI를 사용하는 다른 하위 리소스가 있는 경우에도 하위 리소스 검색기를 실행할 수 있었습니다. 이 동작은 사양에 따라 올바르지 않았습니다.
RESTEasy 3에서 하위 리소스 및 하위 리소스의 모호한 URI가 있는 경우 하위 리소스를 호출하는 데 성공하지만 하위 리소스 위치를 호출하면 HTTP 상태 405 Method Not Allowed
오류가 발생합니다.
다음 예제에는 하위 리소스 메서드 및 하위 리소스 검색 도구에 모호한 @Path
주석이 포함되어 있습니다. 엔드포인트의 URI, another Resource
Locator 및 anotherResourceLocator
가 모두 동일합니다. 두 엔드포인트의 차이점은 anotherResource
메서드가 REST 동사 POST
와 연결되어 있다는 점입니다. anotherResourceLocator
메서드는 REST 동사와 연결되어 있지 않습니다. 사양에 따라 REST 동사가 있는 엔드포인트(이 경우 anotherResource
메서드)가 항상 선택됩니다.
@Path("myResource") public class ExampleSubResources { @POST @Path("items") @Produces("text/plain") public Response anotherResource(String text) { return Response.ok("ok").build(); } @Path("items") @Produces("text/plain") public SubResource anotherResourceLocator() { return new SubResource(); } }
리소스 방법 알고리즘 스위치
3.0.25.Final 이전의 RESTEasy 3.0.x 버전에서 사용된 리소스 메서드 일치 알고리즘에서 발견된 버그로 인해 요청에 응답할 때 RESTEasy가 너무 많은 리소스 메서드를 반환했습니다.
일치하는 알고리즘에는 세 가지 단계가 있습니다.
- 요청 경로를 사용하여 가능한 리소스 클래스를 선택합니다.
- 요청 경로를 사용하여 가능한 리소스 방법을 선택합니다.
- 들어오는 HTTP 동사 및 미디어 유형을 사용하여 최종 리소스 방법을 선택합니다.
JAX-RS 2.0 사양에 따라 잠재적인 리소스 메서드 집합을 정렬한 후 최대 요소만 3단계로 전달해야 합니다. 그러나 RESTEasy 3.0.x 이전의 RESTEasy 3.0.x 구현은 모든 메서드를 3단계로 전달했습니다. JBoss EAP 7.1.0에 포함된 RESTEasy 3.0.24는 이러한 잘못된 동작을 보여줍니다.
JBoss EAP 7.1.1에 포함된 RESTEasy 3.0.25에서는 JAX-RS 2.0 사양을 준수하도록 3단계로 전달되는 메서드를 제한하는 수정 사항을 제공합니다. 느슨한 동작이 선호될 수 있기 때문에 RESTEasy 3.0.25에는 컨텍스트 매개 변수 옵션
인 resteasy.loose.step2.request.matching
이 도입되어 이전 동작을 활성화하도록 구성할 수 있습니다
.
7.1.0에서 7.1.1으로 JBoss EAP 서버를 업데이트하고 이전 동작을 유지하고 모든 잠재적 리소스 메서드를 3단계로 전달하려면 resteasy.loose.step2.request.matching
옵션을 true
로 설정합니다.
일치하는 모든 리소스 메서드를 단계 3으로 전달하도록 JAX-RS 2.1 사양에서 일치 알고리즘이 변경되었습니다. JBoss EAP 7.4에 포함된 RESTEasy 3.9.0은 JAX-RS 2.0 사양에 정의된 대로 엄격한 동작을 유지하기 위해 jaxrs.2.0.request.matching
옵션을 제공합니다.
애플리케이션을 7.1.0에서 7.2.x로 마이그레이션하는 경우 리소스 메서드 일치 알고리즘의 동작이 변경되지 않아야 합니다. 애플리케이션을 7.1.1에서 7.2.x 이상으로 마이그레이션하고 JAX-RS 2.0 사양에 정의된 대로 엄격한 동작을 유지하려면 jaxrs.2.0.request.matching
옵션을 true
로 설정합니다.
5.4.4. RESTEasy SPI 변경 사항
SPI 예외
모든 SPI 오류 예외는 더 이상 사용되지 않으며 더 이상 내부적으로 사용되지 않습니다. 해당 JAX-RS 예외로 교체되었습니다.
더 이상 사용되지 않는 예외 | jaxrs-api 모듈에서 대체 예외 |
---|---|
org.jboss.resteasy.spi.ForbiddenException | javax.ws.rs.ForbiddenException |
org.jboss.resteasy.spi.MethodNotAllowedException | javax.ws.rs.NotAllowedException |
org.jboss.resteasy.spi.NotAcceptableException | javax.ws.rs.NotAcceptableException |
org.jboss.resteasy.spi.NotFoundException | javax.ws.rs.NotFoundException |
org.jboss.resteasy.spi.UnauthorizedException | javax.ws.rs.NotAuthorizedException |
org.jboss.resteasy.spi.UnsupportedMediaTypeException | javax.ws.rs.NotSupportedException |
InjectorFactory 및 Registry
InjectorFactory
및 레지스트리
SPI가 변경되었습니다. 문서화 및 지원되는 대로 RESTEasy를 사용하는 경우에는 문제가 되지 않아야 합니다.
5.4.5. jackson 공급자 변경
JBoss EAP에 포함된 jackson의 버전이 변경되었습니다. 이전 버전의 JBoss EAP에는 jackson 1.✓이 포함되었습니다. JBoss EAP 7에는 이제 jackson 2.6.3 이상이 포함됩니다. 결과적으로jackson 공급자는 resteasy-jackson-provider에서
로 변경되었습니다.
resteasy-jackson2-provider
resteasy-jackson2-provider
로 업그레이드하려면 패키지를 변경해야 합니다. 예를 들어, jackson 주석 패키지는 org.codehaus.jackson.annotate에서
으로 변경되었습니다.
com.
fasterxml.jackson.annotation
JBoss EAP의 이전 릴리스에 포함된 기본 프로바이더를 사용하도록 애플리케이션을 전환하려면 JBoss EAP용 웹 서비스 애플리케이션 개발에서 기본 jackson 공급자 전환을 참조하십시오.
5.4.6. Spring RESTEasy 통합 변경 사항
Spring 4.0 프레임워크는 Java 8에 대한 지원을 도입했습니다. Spring과의 RESTEasy 3.x 통합을 사용하려는 경우 JBoss EAP 7에서 지원하는 가장 빠른 안정적인 버전이므로 4.2.x를 배포의 최소 Spring 버전으로 지정해야 합니다.
5.4.7. RESTEasy Hawktison JSON 공급자 변경
RESTEasy Hardtison JSON 프로바이더는 JBoss EAP 7에서 더 이상 사용되지 않으며 더 이상 기본적으로 배포에 추가되지 않습니다. 권장되는 RESTEasyjackson 공급업체로 전환하는 것이 좋습니다. rpmtison 공급자를 계속 사용하려면 다음 예에 설명된 대로 jboss-deployment-descriptor.xml
파일에서 명시적 종속성을 정의해야 합니다.
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <exclusions> <module name="org.jboss.resteasy.resteasy-jackson2-provider"/> <module name="org.jboss.resteasy.resteasy-jackson-provider"/> </exclusions> <dependencies> <module name="org.jboss.resteasy.resteasy-jettison-provider" services="import"/> </dependencies> </deployment> </jboss-deployment-structure>
명시적 종속성을 정의하는 방법에 대한 자세한 내용은 JBoss EAP 개발 가이드 의 배포에 명시적 모듈 종속성 추가를 참조하십시오.
5.4.8. MicroProfile Rest 클라이언트 코드에 필요한 변경 사항
JBoss EAP 7.3은 MicroProfile REST 클라이언트의 버전 1.3.x를 지원합니다. 이전 버전의 MicroProfile REST 클라이언트를 사용하는 경우 코드에서 일부 업데이트를 수행해야 합니다.
MicroProfile REST 클라이언트는 기술 프리뷰로만 제공됩니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원하지 않으며, 기능상 완전하지 않을 수 있어 프로덕션에 사용하지 않는 것이 좋습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
기술 프리뷰 기능에 대한 지원 범위에 대한 자세한 내용은 Red Hat 고객 포털의 기술 프리뷰 기능 지원 범위를 참조하십시오.
org.jboss.resteasy.client.microprofile.MicroprofileClientBuilderResolver
클래스는 org.eclipse.microprofile.rest.client.RestClientBuilder
로 교체됩니다. 예를 들면 다음과 같습니다.
@Path("resource") public interface TestResourceIntf { @Path("test") @GET public String test(); } TestResourceIntf service = RestClientBuilder.newBuilder() .baseUrl("http://localhost:8081/") .build(TestResourceIntf.class); String s = service.test();
MicroProfile REST 클라이언트에 대한 자세한 내용은 JBoss EAP Developing Web Services Applications 가이드 의 MicroProfile REST 클라이언트를 참조하십시오.
5.4.9. JBoss EAP의 MicroProfile Config
MicroProfile Config 는 개발자가 해당 앱을 수정하거나 다시 패키징하지 않고도 여러 환경에서 실행하도록 애플리케이션 및 마이크로 서비스를 구성하는 데 사용할 수 있는 사양의 이름입니다. 이전에는 JBoss EAP에서 MicroProfile Config를 기술 프리뷰로 사용할 수 있었지만 이후 제거되었습니다. MicroProfile Config는 이제 JBoss EAP XP에서만 사용할 수 있습니다.
추가 리소스
- JBoss EAP XP의 MicroProfile Config에 대한 자세한 내용은 Understanding MicroProfile Config 를 참조하십시오.
5.5. CDI 애플리케이션 변경
JBoss EAP 7.4에는 CDI 2.0 지원이 포함됩니다. 따라서 CDI 1.0 또는 CDI 1.2를 사용하여 작성된 애플리케이션에서 JBoss EAP 7.4로 마이그레이션할 때 동작이 일부 변경될 수 있습니다. 이 섹션에는 CDI 1.2 및 CDI 2.0의 변경 사항 중 몇 가지만 요약되어 있습니다.
다음 참조에서 Weld 및 CDI 2.0에 대한 자세한 정보를 확인할 수 있습니다.
빈 아카이브
활성화된 빈의 빈 클래스를 CDI에서 스캔하여 빈 클래스를 찾아 처리하도록 빈 아카이브에 배포해야 합니다.
CDI 1.0에서는 META-INF/ 디렉터리에 애플리케이션 클라이언트, EJB 또는 라이브러리 JAR의
디렉터리에 beans.xml
파일이 포함되어 있거나 WAR의 WEB-INF/
beans.xml
파일이 포함된 경우 아카이브를 명시적 빈 아카이브로 정의했습니다.
CDI 1.1에서는 빈 정의 주석이 있는 하나 이상의 빈 클래스 또는 하나 이상의 세션 빈을 포함하는 아카이브인 암시적 빈 아카이브를 도입했습니다. 암시적 빈 아카이브는 CDI에서 스캔하며 유형 검색 중에 빈 정의 주석이 있는 클래스만 검색됩니다. 자세한 내용은 JSR 365, Contexts and Dependency Injection for Java 2.0에서 Type and Bean Discovery 를 참조하십시오. 주석을 정의하는 빈에 해당하는 자카르타는 Jakarta Context Dependency Injection 2.0 사양에 정의되어 있습니다.
빈 아카이브에는 모두
주석이
추가되거나 없는
빈 검색 모드가 있습니다. 버전이 없는 bean.xml
파일이 포함된 빈 아카이브에는 모두
기본 빈 검색 모드가 있습니다. 버전 1.1
이상의 bean.xml
파일이 포함된 빈 아카이브는 bean-discovery-mode
특성을 지정해야 합니다. 속성의 기본값은 주석이
추가됩니다.
아카이브는 다음과 같은 경우 빈 아카이브가 아닙니다.
-
bean
파일이 포함되어 있습니다.-discovery-mode가
.xmlnone
인 bean -
bean.xml
파일이 없는 CDI 확장자가 포함되어 있습니다.
아카이브는 다음 경우 명시적 빈 아카이브입니다.
-
아카이브에는 버전 번호가 1.1 이상이고
bean
파일이 포함되어 있습니다-discovery-mode가 있는 bean
.xml.
-
아카이브에는 버전 번호 없이
beans.xml
파일이 포함되어 있습니다. -
아카이브에는 빈
beans.xml
파일이 포함되어 있습니다.
아카이브는 다음 경우 암시적 빈 아카이브입니다.
-
이 아카이브에는 bean.
xml 파일이 포함되어 있지 않아도 빈이 주석을 정의하는 하나 이상의 빈 클래스 또는 하나 이상의 세션 빈
이 포함되어 있습니다. -
아카이브에는
주석이
있는bean
파일이 포함되어 있습니다.-discovery-mode가 포함된 bean
.xml
CDI 1.2 제한된 빈은 다음에 대한 주석을 정의합니다.
-
@ApplicationScoped
,@SessionScoped
,@ConversationScoped
,@RequestScoped
주석 - 기타 모든 일반 범위 유형
-
@interceptor
및@Decorator
주석 -
@Stereotype
으로 주석이 추가된 주석인 모든 종료 유형 주석 -
@dependent
범위 주석
빈 아카이브에 대한 자세한 내용은 JSR 365의 Bean Archives 를 참조하십시오. Java 2.0에 대한 컨텍스트 및 종속성 주입. 빈 아카이브의 자카르타 등은 Jakarta Context Dependency Injection 2.0 사양에 정의되어 있습니다.
Conversation Resolution 설명
CDI 사양 문제 CDI-411에 설명된 대로 서블릿 사양과의 충돌을 방지하기 위해 CDI 1.2에서 대화 컨텍스트 라이프사이클이 변경되었습니다. 대화 범위는 모든 서블릿 요청 중에 활성화되며 다른 서블릿 또는 서블릿 필터가 요청 본문 또는 문자 인코딩을 설정하지 않도록 해야 합니다. 자세한 내용은 Jakarta EE의 Conversation context lifecycle에서 참조하십시오.
관찰자 분석
이벤트 해결은 CDI 1.2에서 부분적으로 다시 작성되었습니다. CDI 1.0에서 observer 메서드에 모든 이벤트 한정자가 있는 경우 이벤트가 관찰자 메서드로 전달됩니다. CDI 1.2에서는 observer 메서드에 이벤트 한정자가 없거나 이벤트 한정자의 하위 집합이 있는 경우 관찰자 메서드로 이벤트가 전달됩니다. 자세한 내용은 Observer resolution 을 참조하십시오.
5.6. HTTP 세션 ID 변경
HTTP 세션에 할당된 고유 식별자를 가져오기 위해 request.getSession().getId()
호출에서 반환한 문자열이 JBoss EAP 6.4와 JBoss EAP 7 간에 변경되었습니다.
JBoss EAP 6.4에서는 session -id.instance-id 형식으로 세션
ID와 인스턴스 ID를 모두 반환했습니다.
JBoss EAP 7은 세션 ID만 반환합니다.
이러한 변경으로 인해 JBoss EAP 6에서 JBoss EAP 7으로의 일부 업그레이드에 대한 라우팅 없는 쿠키에 문제가 발생할 수 있습니다. 애플리케이션이 이 메서드 호출의 반환 값을 기반으로 JSESSIONID 쿠키를 다시 생성하는 경우 애플리케이션 코드를 업데이트하여 원하는 동작을 제공해야 할 수 있습니다.
5.7. 명시적 모듈 종속성 마이그레이션
이전의 JBoss EAP 릴리스에서 모듈 클래스 로드 시스템 및 JBoss 모듈이 도입되어 애플리케이션에서 사용할 수 있는 클래스를 세부적으로 제어할 수 있었습니다. 이 기능을 사용하면 애플리케이션의 MANIFEST.MF 파일 또는
배포 설명자 파일을 사용하여 명시적 모듈 종속성을 설정할 수 있습니다.
jboss-deployment-structure.
xml
애플리케이션에 명시적 모듈 종속성을 정의한 경우 JBoss EAP 7에서 다음과 같은 변경 사항을 알고 있어야 합니다.
가용성에 대한 종속성 검토
JBoss EAP에 포함된 모듈이 변경되었습니다. 애플리케이션을 JBoss EAP 7로 마이그레이션하는 경우 MANIFEST.MF
및 jboss-deployment-structure.xml
파일 항목을 검토하여 이 제품 릴리스에서 제거된 모듈을 참조하지 않는지 확인하십시오.
주석 스캔이 필요한 종속성
JBoss EAP의 이전 릴리스에서는 EJB 인터셉터를 선언하는 경우와 같이 주석 스캔 중에 처리해야 하는 주석이 종속성에 포함된 경우 새 JAR 파일에 Jandex 인덱스를 생성하고 포함한 다음 MANIFEST.MF 또는
배포 설명자 파일에 플래그를 설정해야 했습니다.
jboss-deployment-structure.
xml
JBoss EAP 7은 이제 정적 모듈에 대한 자동 런타임 생성 주석 인덱스를 제공하므로 더 이상 수동으로 생성할 필요가 없습니다. 그러나 아래에 설명된 대로 애플리케이션의 MANIFEST.MF 파일 또는
배포 설명자 파일에 jboss-deployment-structure.
xml주석
플래그를 추가해야 합니다.
예제: MANIFEST.MF
파일의 주석 플래그
Dependencies: com.company.my-ejb annotations, com.company.other
예제: 주석 jboss-deployment-structure.xml
파일의 플래그
<jboss-deployment-structure> <deployment> <dependencies> <module name="com.company.my-ejb" annotations="true"/> <module name="com.company.other"/> </dependencies> </deployment> </jboss-deployment-structure>
5.8. Hibernate 및 Jakarta Persistence 마이그레이션 변경
5.8.1. Hibernate ORM 3.0
JBoss EAP 6.4에서 Hibernate ORM 3을 더 쉽게 사용할 수 있는 통합 클래스는 JBoss EAP 7에서 제거되었습니다. 애플리케이션에서 여전히 Hibernate ORM 3 라이브러리를 사용하는 경우 Hibernate ORM 5를 사용하도록 애플리케이션을 마이그레이션하는 것이 좋습니다. Hibernate ORM 3은 더 이상 많은 노력 없이 JBoss EAP에서 작동하지 않기 때문입니다. Hibernate ORM 5로 마이그레이션할 수 없는 경우 Hibernate ORM 3 JAR에 대한 맞춤형 JBoss 모듈을 정의하고 애플리케이션에서 Hibernate ORM 5 클래스를 제외해야 합니다.
5.8.2. Hibernate ORM 4.0 - 4.3
애플리케이션에 두 번째 수준의 캐시가 활성화된 경우 Infinispan 8.x가 Hibernate ORM 5.0과 통합되었습니다. 그런 다음 Infinispan을 Hibernate 2 레벨 캐시 공급자로 사용하는 지원이 Hibernate ORM 5.3의 Infinispan 프로젝트로 이동되어 해당 릴리스에서 hibernate-infinispan
모듈이 삭제되었습니다.
Hibernate ORM 4.x로 작성된 애플리케이션은 여전히 Hibernate ORM 4.x를 사용할 수 있습니다. Hibernate ORM 4.x JAR에 대한 맞춤형 JBoss 모듈을 정의하고 애플리케이션에서 Hibernate ORM 5 클래스를 제외해야 합니다. 그러나 Hibernate ORM 5를 사용하도록 애플리케이션 코드를 다시 작성하는 것이 좋습니다. Hibernate ORM 5로의 마이그레이션에 대한 자세한 내용은 Hibernate ORM 5로 마이그레이션을 참조하십시오.
5.8.3. Hibernate ORM 5로 마이그레이션
JBoss EAP 7.0에는 Hibernate ORM 5.0이 포함되어 있습니다. 이 섹션에서는 Hibernate ORM 버전 4.3에서 버전 5로 마이그레이션할 때 필요한 변경 사항을 중점적으로 설명합니다. Hibernate ORM 4와 Hibernate ORM 5 간에 구현된 변경 사항에 대한 자세한 내용은 Hibernate ORM 5.0 마이그레이션 가이드를 참조하십시오.
제거 및 사용되지 않는 클래스
더 이상 사용되지 않는 다음 클래스는 Hibernate ORM 5에서 제거되었습니다.
클래스 및 패키지의 기타 변경 사항
-
부트스트랩 재설계를 위해
org.hibernate.integrator.spi.Integrator
인터페이스가 변경되었습니다. -
새 패키지
org.hibernate.engine.jdbc.env.spi
가 생성되었습니다. 여기에는org.hibernate.engine.jdbc.env.spi.JdbcEnvironment
인터페이스에서 추출된org.hibernate.engine.jdbc.spi.JdbcEnvironment 인터페이스가 포함되어 있습니다
. -
org.hibernate.
id.PersistentIdentifierGenerator 구현에 영향을 주는 새로운 org.hibernate.boot.relational.
ExportableProducer 인터페이스가 도입되었습니다. -
org.hibernate.id.Configurable
의 서명은 org.hibernate.dialect.Dialect가 아닌 org.hibernate.service.
ServiceRegistry 를 수락하도록 변경되었습니다. -
org.hibernate.metamodel.spi.TypeContributor
인터페이스가org.hibernate.boot.model.TypeContributor
로 마이그레이션되었습니다. -
org.hibernate.metamodel.spi.TypeContributions
인터페이스가org.hibernate.boot.model.TypeContributions
로 마이그레이션되었습니다.
유형 처리
-
기본 제공
org.hibernate.type.descriptor.sql.SqlTypeDescriptor
구현은 더 이상org.hibernate.type.descriptor.sql.SqlTypeDescriptorRegistry
로 자동 등록하지 않습니다. 내장된 구현을 확장하고 해당 동작을 사용하는 사용자 지정SqlTypeDescriptor
구현을 사용하는 애플리케이션은SqlTypeDescriptorRegistry.addDescriptor()
를 호출하도록 업데이트해야 합니다. -
생성된 UUID로 정의된 ID의 경우 일부 데이터베이스에서는 비교가 제대로 작동하도록
BINARY(16)
를 생성하려면@Column(length=16)
을 명시적으로 설정해야 합니다. -
javax.persistence.E
매핑의 경우numType
numType.STRING
에 정의된 Ename-mapping
을 원하는 thehbm.xmluseNamed(true)
설정을 사용하거나 VARCHAR 값을12
로 지정하여 이 구성을 명시적으로 지정해야 합니다.
트랜잭션 관리
-
트랜잭션 SPI는 Hibernate ORM 5에서 주요 재설계를 받았습니다. Hibernate ORM 4.3에서는
org.hibernate.Transaction
API를 사용하여 다른 백엔드 트랜잭션 전략에 직접 액세스합니다. Hibernate ORM 5는 간접 수준을 도입했습니다. 백엔드에서org.hibernate.Transaction
구현은 이제 백엔드 전략에 따라 지정된 세션의 트랜잭션 컨텍스트를 나타내는org.hibernate.resource.transaction.TransactionCoordinator
와 통신합니다. 이는 개발자에게 직접적인 영향을 미치지 않지만 부트스트랩 구성에 영향을 줄 수 있습니다. 이전의 애플리케이션에서는 더 이상 사용되지 않는hibernate.transaction.factory_class
속성을 지정하고org.hibernate.engine.transaction.spi.TransactionFactory
FQN(정규화된 이름)을 참조합니다. Hibernate ORM 5를 사용하면hibernate.transaction.coordinator_class
설정을 지정하고org.hibernate.resource.transaction.TransactionCoordinatorBuilder
를 참조합니다. 자세한 내용은org.hibernate.cfg.AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY
를 참조하십시오. 이제 다음과 같은 짧은 이름이 인식됩니다.
-
jdbc: JDBC
java.sql.Connection
을 사용하여 트랜잭션을 관리합니다. 이는Jakarta Persistence가 아닌 트랜잭션의 기본값입니다. jta: 자카르타 트랜잭션을 사용하여 트랜잭션 관리.
중요Jakarta Persistence 애플리케이션에서
hibernate.transaction.coordinator_class
속성에 대한 설정을 제공하지 않으면 Hibernate는 지속성 유닛의 트랜잭션 유형을 기반으로 적절한 트랜잭션 코디네이터를 자동으로 구축합니다.Jakarta Persistence 이외의 애플리케이션에서
hibernate.transaction.coordinator_class
속성에 대한 설정을 제공하지 않으면 Hibernate는 트랜잭션을 관리하기 위해 기본 tojdbc
를 설정합니다. 이 기본값은 애플리케이션이 실제로 자카르타 트랜잭션을 사용하는 경우 문제가 발생합니다. Jakarta Transactions를 사용하는Jakarta Persistence 애플리케이션은hibernate.transaction.coordinator_class
속성 값을jta
로 명시적으로 설정하거나 Jakarta 트랜잭션과 올바르게 조정하는org.hibernate.resource.transaction.TransactionCoordinatorBuilder
사용자 지정org.hibernate.resource.transaction.TransactionCoordinator
를 빌드해야 합니다.
-
jdbc: JDBC
기타 Hibernate ORM 5 변경 사항
-
The
cfg.xml
파일은 다시 완전히 구문 분석되고 이벤트, 보안 및 기타 기능과 통합됩니다. -
EntityManagerFactory
를 사용하여 thecfg.xml
에서 로드된 속성은 이전에hibernate
가 있는 이름을 접두사로 지정하지 않았습니다. 현재는 일관성이 보장되어 있습니다. - 이 구성은 더 이상 직렬화할 수 없습니다.
-
org.hibernate.dialect.Dialect.getQuerySequencesString()
메서드는 이제 카탈로그, 스키마 및 증분 값을 검색합니다. -
AuditConfiguration
수정자가org.hibernate.envers.boot.internal.EnversService
에서 제거되었습니다. -
더 이상 사용되지 않는
Audit
메서드 매개변수가 변경되었습니다.Configuration을 제거하고 새
StrategyEnversService
를 사용하도록 Audit -
org.hibernate.hql.spi
패키지 및 하위 패키지의 다양한 클래스와 인터페이스가 새org.hibernate.hql.spi.id
패키지로 이동되었습니다. 여기에는MultiTableBulkIdStrategy
클래스와AbstractTableBasedBulkIdHandler
,TableBasedDeleteHandlerImpl
,TableBasedUpdateHandlerImpl
인터페이스 및 하위 클래스가 포함됩니다. - 속성 액세스 계약을 완전히 재설계했습니다.
-
유효한
hibernate.cache.default_cache_concurrency_strategy
설정 값은 이제org.hibernate.cache.cache.spi.access.AccessType.getExternalName()
메서드 대신org.hibernate.cache.spi.access.AccessType
enum 상수를 사용하여 정의됩니다. 이는 다른 Hibernate 설정과 더 일치합니다.
5.8.4. Hibernate ORM 5.0에서 Hibernate ORM 5.1로 마이그레이션
JBoss EAP 7.1에는 Hibernate ORM 5.1이 포함되어 있습니다. 이 섹션에서는 Hibernate ORM 버전 5.0에서 버전 5.1로 마이그레이션할 때 필요한 차이점과 변경 사항을 중점적으로 설명합니다.
Hibernate ORM 5.1 기능
이 Hibernate 릴리스에는 JBoss EAP 7.1.0 릴리스 노트 의 Hibernate ORM 5.1 기능에 자세히 설명된 여러 성능 개선 사항 및 버그 수정이 포함되어 있습니다. Hibernate ORM 5.0과 Hibernate ORM 5.1 간에 구현된 변경 사항에 대한 자세한 내용은 Hibernate ORM 5.1 마이그레이션 가이드를 참조하십시오.
스키마 관리 툴링 변경
JBoss EAP 7의 스키마 관리 툴링 변경
Hibernate ORM 5.1의 스키마 관리 툴링 변경은 주로 다음 영역에 중점을 둡니다.
-
hbm2ddl.auto
및 Hibernate의 Jakarta Persistence스키마 생성 지원 처리 통합
. - SPI에서 JDBC 우려 사항을 제거하여 NoSQL 데이터 저장소에 대한 자카르타 지속성 지원을 제공하는 지속성 엔진인 Hibernate Oœ의 진정한 교체를 용이하게 합니다.
스키마 관리 툴링 변경은 다음 클래스 중 하나를 직접 사용하는 애플리케이션의 마이그레이션 문제만 고려해야 합니다.
-
org.hibernate.tool.hbm2ddl.SchemaExport
-
org.hibernate.tool.hbm2ddl.SchemaUpdate
-
org.hibernate.tool.hbm2ddl.SchemaValidator
-
org.hibernate.tool.schema.spi.SchemaManagementTool
또는 모든 대표단
JBoss EAP 7.1의 스키마 관리 툴링 변경
JBoss EAP 7.1에 포함된 Hibernate ORM 5.1.10은 스키마Migrator 및 Schema
Validator
성능을 향상시키는 데이터베이스 테이블을 검색하는 새로운 전략을 도입했습니다. 이 전략은 단일 java.sql.DatabaseMetaData#getTables(String, String, String, String[])
호출을 실행하여 각 javax.persistence.Entity
에 매핑된 데이터베이스 테이블이 있는지 확인합니다. 기본 전략이며 hibernate.hbm2ddl.jdbc_metadata_extraction_strategy=grouped
속성 설정을 사용합니다. 이 전략을 사용하려면 hibernate.default_schema
및/or hibernate.default_catalog
가 제공되어야 할 수 있습니다.
각 javax.persistence.Entity
에 대해 java.sql.DatabaseMetaData#getTables(String, String, String, String[])
호출을 실행하는 이전 전략을 사용하려면 hibernate.hbm2ddl.jdbc_metadata_extraction_strategy=individually
속성 설정을 사용합니다.
5.8.5. Hibernate ORM 5.1에서 Hibernate ORM 5.3으로 마이그레이션
JBoss EAP 7.4에는 Hibernate ORM 5.3이 포함되어 있습니다. 이 섹션에서는 Hibernate ORM 5.1에서 Hibernate ORM 5.3으로 마이그레이션할 때 필요한 일부 변경 사항을 중점적으로 설명합니다.
Hibernate ORM 5.2 기능
Hibernate ORM 5.2는 Java 8 JDK를 사용하여 빌드되며 런타임 시 Java 8 JRE가 필요합니다. 다음은 이 릴리스에서 수행된 몇 가지 변경 사항 목록입니다.
-
hibernate-java8
모듈은hibernate-core
에 병합되어 Java 8 date/time 데이터 유형이 이제 기본적으로 지원됩니다. -
hibernate-entitymanager
모듈은hibernate-core
에 병합되었습니다.HibernateEntityManager
및HibernateEntityManagerFactory
는 더 이상 사용되지 않습니다. -
Session
,StatelessSession
및SessionFactory
클래스 계층 구조가 더 이상 사용되지 않는 클래스를 제거하고 Jakarta Persistence Metamodel API에 더 잘 맞도록 리팩토링되었습니다. -
org.hibernate.persister 및
패키지의 SPI가 변경되었습니다. 이러한 SPI를 사용하는 모든 사용자 정의 클래스는 검토 및 업데이트해야 합니다.org.
hibernate.tuple -
LimitHandler
변경으로 인해 기본적으로false로
설정되어 레거시 Hibernate 4.3 제한 핸들러 동작을 활성화하도록 설계된 새로운hibernate.legacy_limit_handler
설정이 도입되었습니다. 이는 제한된 전화 번호 목록에 영향을 미칩니다. -
스키마Migrator 및 Schema
Validator
성능을 개선하는 데이터베이스 테이블을 검색하는 새로운 전략이 도입되었습니다. -
이번 릴리스에서는 PostgreSQL81Dialect 및 하위 클래스를 사용할 때
@Lob
으로 주석이 추가된문자열
,문자[]
및 문자[]CLOB
값이 처리되는 방식을 변경합니다. -
@TableGenerator
및@SequenceGenerator
이름의 범위가 전역에서 local로 변경되었습니다.
Hibernate 5.2에 구현된 변경 사항 전체 목록은 Hibernate ORM 5.2 마이그레이션 가이드를 참조하십시오.
Hibernate ORM 5.3 기능
Hibernate ORM 5.3은 Jakarta Persistence 2.2 사양에 대한 지원을 추가합니다. 이 릴리스에는 다른 개선 사항과 함께 이 사양을 준수하기 위한 변경 사항이 포함되어 있습니다. 다음은 이러한 변경 사항 중 일부입니다.
위치 쿼리 매개변수 처리 변경으로 인해 다음과 같은 사항이 변경되었습니다.
- HQL/Jakarta Persistence 쿼리 언어 쿼리에서 JDBC 스타일 매개 변수 선언에 대한 지원 제거.
- Jakarta Persistence 위치 매개변수는 명명된 매개 변수처럼 작동합니다.
-
기본 쿼리에서 JDBC 스타일 매개 변수 선언은 제로 기반 매개 변수 바인딩 대신 1개 기반 매개 변수 선언을 사용하여 Jakarta Persistence와 일치합니다.
hibernate.query.sql.jdbc_style_params_base
속성을true
로 설정하여 0 기반 바인딩으로 되돌릴 수 있습니다.
-
Jakarta Persistence 사양을 준수하기 위해
@TableGenerator
저장된 값에 저장된 시퀀스 값은 마지막으로 생성된 값입니다. 이전에는 Hibernate에서 다음 시퀀스 값을 저장했습니다.hibernate.id.generator.stored_last_used
속성을 사용하여 레거시 Hibernate 동작을 활성화할 수 있습니다.@TableGenerator
를 사용하고 Hibernate 5.3으로 마이그레이션하는 기존 애플리케이션은hibernate.id.generator.stored_last_used 구성
속성을false
로 설정해야 합니다. -
org.hibernate.query.QueryParameter
클래스의getType()
메서드의 이름이getHibernateType()
으로 변경되었습니다. - Hibernate의 두 번째 수준 캐시 SPI는 다양한 캐싱 공급자의 요구 사항을 보다 잘 충족하도록 재설계되었습니다. 자세한 내용은 HHH-11356 에서 확인할 수 있습니다.
- 또한 HHH-11356 의 변경 사항은 Hibernate 통계 시스템에 영향을 주는 소비자의 변경이 필요했습니다.
-
일부 메서드는 일시적으로
org.hibernate.Query
클래스에 추가되어 Hibernate ORM 5.1에서 5.3으로 네이티브 애플리케이션을 더 쉽게 마이그레이션하고 Hibernate 5.1 페이지 번호 동작을 유지 관리할 수 있습니다. 이러한 방법은 더 이상 사용되지 않으며 향후 Hibernate 버전에서 이식할 수 있으려면 Jakarta Persistence 메서드를 사용하도록 애플리케이션을 업데이트해야 합니다. -
Infinispan을 Hibernate 2단계 캐시 공급자로 사용하는 지원이 Infinispan 프로젝트로 이동되었습니다. 결과적으로
hibernate-infinispan
모듈이 삭제되었습니다. -
org.hibernate.tool.enhance.EnhancementTask
Ant 작업의 API가 변경되었습니다.addFileset()
메서드가setBase() 및
메서드를 대신하여 삭제되었습니다. 자세한 내용은 HHH-11795 에서 확인할 수 있습니다.setDir()
- Hibernate 4.3에서 도입된 버그로 인해 임베딩 가능한 컬렉션 요소 및 복합 ID에 다대일 연관이 발생했으며, 지연으로 명시적으로 매핑된 경우에도 신속하게 가져옵니다. Hibernate 5.3.2에서는 이 버그가 수정되었습니다. 결과적으로 이러한 연결은 해당 매핑에 지정된 대로 가져옵니다. 자세한 내용은 HHH-12687 에서 확인할 수 있습니다.
-
이 릴리스에서는 Jakarta Persistence와 Hibernate 이벤트 리스너의 기본 구현이 통합되었습니다. 결과적으로
JpaIntegrator
클래스가 더 이상 사용되지 않습니다.org.hibernate.jpa.event.spi.JpaIntegrator
를 확장하는 클래스는org.hibernate.integrator.spi.Integrator
인터페이스를 구현하도록 이러한 클래스를 변경해야 합니다. 자세한 내용은 HHH-11264 에서 확인할 수 있습니다. -
org.hibernate.persister
패키지의 SPI가 변경되었습니다. 이러한 SPI를 사용하는 모든 사용자 정의 클래스는 검토 및 업데이트해야 합니다.
이들 및 Hibernate 5.3에 구현된 기타 변경 사항의 전체 목록은 Hibernate ORM 5.3 마이그레이션 가이드를 참조하십시오.
5.8.5.1. Hibernate 5.1과 Hibernate 5.3 간의 예외 처리 변경
Hibernate 5.2 및 5.3에서 Hibernate의 기본 부트스트랩, 래핑 또는 변환된 SessionFactory
의 예외 처리는 Jakarta Persistence 사양에 따라 HibernateException
을 래핑 또는 변환합니다. 이 동작의 유일한 예외는 작업이 Hibernate에 특정되는 경우입니다(예: Session.save()
또는 Session.saveOrUpdate())
.
Hibernate 5.3.3에서는 hibernate.native_exception_handling_51_compliance
속성이 추가되었습니다. 이 속성은 Hibernate의 기본 부트스트랩을 사용하여 구축된 SessionFactory
의 예외 처리가 Hibernate ORM 5.1에서 기본 예외 처리와 동일하게 동작하는지 여부를 나타냅니다. true
로 설정하면HibernateException
이 자카르타 지속성 사양에 따라 래핑되지 않거나 변환되지 않습니다. 자카르타 지속성 부트 스트랩을 사용하여 빌드된 SessionFactory
에는 이 설정이 무시됩니다.
5.8.5.2. 호환성 변환기
JBoss EAP 7.4에는 더 이상 Hibernate ORM 5.1과 호환되지 않는 Hibernate ORM 5.3 API 메서드를 처리하는 호환성 변환기가 포함되어 있습니다. 변환기는 Hibernate ORM 5.1로 빌드된 애플리케이션에서 JBoss EAP 7.4의 Hibernate 5.3과 동일한 동작을 나타낼 수 있는 임시 조치입니다. 이는 임시 해결책이므로 이러한 메서드 호출을 권장 Jakarta Persistence 메서드 호출로 교체해야 합니다.
다음 방법 중 하나로 변환기를 활성화할 수 있습니다.
-
Hibernate51CompatibilityTransformer
시스템 속성을true
로 설정하여 모든 애플리케이션에 대해 전역적으로 변환기를 활성화할 수 있습니다. jboss-deployment-structure.xml
파일을 사용하여 애플리케이션 수준에서 변환기를 활성화할 수 있습니다.<jboss-deployment-structure> <deployment> <transformers> <transformer class="org.jboss.as.hibernate.Hibernate51CompatibilityTransformer"/> </transformers> </deployment> <sub-deployment name="main.war"> <transformers> <transformer class="org.jboss.as.hibernate.Hibernate51CompatibilityTransformer"/> </transformers> </sub-deployment> </jboss-deployment-structure>
다음 표에는 변환된 Hibernate 5.1 방법과 변환되는 Hibernate 5.3 메서드가 나열되어 있습니다.
Hibernate 5.1 참조 또는 방법 | Hibernate 5.3 참조 또는 방법으로 변환 |
---|---|
5.9. Hibernate 검색 변경
JBoss EAP 7과 함께 제공되는 Hibernate Search의 버전이 변경되었습니다. 이전 JBoss EAP 릴리스는 Hibernate Search 4.6.x와 함께 제공되었습니다. JBoss EAP 7은 Hibernate Search 5.5.x와 함께 제공됩니다.
Hibernate Search 5.5는 Apache Lucene 5.3.1을 기반으로 빌드되었습니다. 네이티브 Lucene API를 사용하는 경우 이 버전에 맞게 조정하십시오. Hibernate Search 5.5 API 는 버전 3과 버전 5 간에 이루어진 많은 Lucene API 변경의 복잡성을 숨기지만 일부 클래스는 더 이상 사용되지 않거나 이름이 변경되거나 다시 패키징됩니다. 이 섹션에서는 이러한 변경 사항이 애플리케이션 코드에 어떤 영향을 줄 수 있는지 설명합니다.
Hibernate 검색 매핑 변경
임베디드 관계의 ID 필드 인덱싱
@IndexedEmbedd 주석을
사용하여 관련 엔터티의 필드를 포함하는 경우 관련 엔터티의 id
가 더 이상 포함되지 않습니다. @IndexedEmbedded 주석
의 includeEmbeddedObjectId
속성을 사용하여 id
의 포함을 활성화할 수 있습니다.
예: @IndexedEmbedded
주석
@IndexedEmbedded(includeEmbeddedObjectId=true)
숫자 및 날짜 인덱스 포멧 변경
숫자와 날짜는 기본적으로 숫자 필드로 인덱싱됩니다. int
,long, floating
,double
및 해당 래퍼 클래스의 속성은 더 이상 문자열로 인덱싱되지 않습니다. 대신 Lucene의 적절한 숫자 인코딩을 사용하여 인덱싱됩니다.
id
필드는 이 규칙의 예외입니다. 숫자 유형으로 표시되는 경우에도 기본적으로 문자열 키워드로 인덱싱됩니다. 숫자 인코딩에 대한 사용자 지정 정확도를 지정하지 않는 한 @NumericField
사용은 더 이상 사용되지 않습니다. 문자열 인코딩 필드 브리지를 명시적으로 지정하여 이전 문자열 기반 인덱스 형식을 유지할 수 있습니다. 정수의 경우 org.hibernate.search.bridge.builtin.IntegerBridge 입니다. 공개적으로 사용 가능한 다른 필드 브리지가 있는지 org.hibernate.search.bridge.builtin 패키지를 확인합니다.
날짜와
일정이 더
이상 문자열로 인덱싱되지 않습니다. 대신, 인스턴스가 1970년 1월 1일 이후부터 밀리초 수를 나타내는 긴 값으로 인코딩됩니다. 새 EncodingType 열거를 사용하여 인덱싱 형식을 전환할 수 있습니다. 예를 들면 다음과 같습니다.
예: @DateBridge
및 @CalendarBridge
주석
@DateBridge(encoding=EncodingType.STRING) @CalendarBridge(encoding=EncodingType.STRING)
숫자 및 날짜의 인코딩 변경은 중요하며 애플리케이션 동작에 큰 영향을 미칠 수 있습니다. 이전에 문자열로 인코딩되었지만 숫자로 인코딩된 필드를 대상으로 하는 쿼리가 있는 경우 쿼리를 업데이트해야 합니다. 숫자 필드는 NumericRangeQuery
를 사용하여 검색해야 합니다. 또한 faceting에서 대상으로 하는 모든 필드가 문자열로 인코딩되었는지 확인해야 합니다. Search 쿼리 DSL을 사용하는 경우 올바른 쿼리가 자동으로 작성되어야 합니다.
기타 Hibernate 검색 변경
-
이제 옵션을 정렬하기 위해 정렬 옵션이 개선되어 필드 인코딩이 잘못 지정되어 이제 런타임 예외가 발생합니다. 정렬에 사용되는 필드가 앞에 알려진 경우 Lucene은 또한 더 성능이 뛰어난 정렬을 제공합니다. Hibernate Search 5.5는 새로운
@SortableField
주석과 다중 값 병행@SortableFields를
제공합니다. 자세한 내용은 Hibernate Search 5.4에서 5.5로의 마이그레이션 가이드를 참조하십시오. Lucene
SortField
API에는 다음과 같은 애플리케이션 코드를 변경해야 합니다.이전 JBoss EAP 릴리스에서는 다음과 같이 쿼리에서 sort 필드의 유형을 설정합니다.
fulltextQuery.setSort(new Sort(new SortField("title", SortField.STRING)));
다음은 JBoss EAP 7에서 설정하는 방법의 예입니다.
fulltextQuery.setSort(new Sort(new SortField("title", SortField.Type.STRING)));
-
SearchFactory
는 ORM 통합에서만 사용해야 하므로hibernate-search-engine 모듈에서 hibernate-
search-orm
모듈로 이동했습니다. 다른 통합업체는 더 이상 사용되지 않는Search
에만 의존해야 합니다.FactoryIntegrator
를 대체하는 SearchIntegrator -
enum 값
SpatialMode.GRID
의 이름이SpatialMode.HASH
로 변경되었습니다. -
Full TextIndexEventListener
가 최종 클래스입니다. 현재 이 클래스를 확장하는 경우 동일한 기능을 수행하는 대체 솔루션을 찾아야 합니다. -
hibernate-search-analyzers
모듈이 제거되었습니다. 권장되는 접근 방식은 적절한 Lucene 아티팩트(예:org.apache.lucene:lucene-analyzers-common
)를 직접 사용하는 것입니다. -
자카르타 메시징 컨트롤러 API가 변경되었습니다. OCI가 아닌 다른 환경에서 사용할 수 있도록 Hibernate ORM에 대한 자카르타 메시징 백엔드 종속성이 제거되었습니다. 그 결과
org.hibernate.search.backend.impl.jms.AbstractJMSHibernateSearchController
의 구현자가 새 서명에 맞게 조정되어야 합니다. 이 클래스는 내부 클래스이므로 확장하는 대신 예제로 사용하는 것이 좋습니다. -
org.hibernate.search.spi.ServiceProvider
SPI가 리팩토링되었습니다. 이전 서비스 계약을 통합한 경우 새 계약에 대한 자세한 내용은ServiceManager, Service
,
Startable
및Stoppable
의 Hibernate Search 5.5 Javadoc 를 참조하십시오. -
Lucene 3.x에서 생성된 인덱스를 유지하고 Hibernate Search 5.0 이상을 사용하여 다시 빌드하지 않은 경우
IndexFormatTooOldException
이 제공됩니다. 대용량 인덱서로 인덱스를 다시 빌드하는 것이 좋습니다. 그렇게 할 수 없는 경우 Lucene의IndexUpgrader
를 사용해 보십시오. 기본 동작이 변경된 경우 Hibernate Search 매핑을 주의 깊게 업데이트해야 합니다. 자세한 내용은 Apache Lucene 마이그레이션 가이드를 참조하십시오. - Apache Lucene이 JBoss EAP 7에서 3.6에서 5.3으로 업그레이드되었습니다. 코드가 Lucene 코드를 직접 가져오는 경우 변경 사항에 대한 자세한 내용은 Apache Lucene 마이그레이션 가이드를 참조하십시오. 추가 정보는 Lucene Change Log 에서도 확인할 수 있습니다.
-
@Field(indexNullAs=)
를 사용하여 인덱스의 null 마커 값을 인코딩하는 경우 마커의 유형은 동일한 필드에 인덱싱된 다른 모든 값과 호환되어야 합니다. 예를 들어, "null" 문자열을 사용하여 숫자 필드의 null 값을 인코딩할 수 있었습니다. 이는 더 이상 허용되지 않습니다. 대신null
값을 나타낼 숫자를 선택해야 합니다(예:-1)
. -
포스팅 엔진에 상당한 개선이 이루어졌습니다. 대부분의 변경 사항은 API에 영향을 미치지 않습니다. 중요한 한 가지 예외는 이제
@Facet 또는
주석을 사용하여 faceting에 사용할 필드에 주석을 추가해야 한다는 것입니다.@Face
ts
Hibernate 검색 이름 변경 및 재패키징된 클래스
다음은 재패키징 또는 이름이 변경된 Hibernate Search 클래스 목록입니다.
이전 패키지 및 클래스 | 새 패키지 및 클래스 |
---|---|
org.hibernate.search.Environment | org.hibernate.search.cfg.Environment |
org.hibernate.search.FullTextFilter | org.hibernate.search.filter.FullTextFilter |
org.hibernate.search.ProjectionConstants | org.hibernate.search.engine.ProjectionConstants |
org.hibernate.search.SearchException | org.hibernate.search.exception.SearchException |
org.hibernate.search.Version | org.hibernate.search.engine.Version |
Lucene: 이름 변경 및 재패키드 클래스
쿼리 구문 분석기가 새 모듈로 이동되어 org .apache.lucene.queryParser.QueryParser에서
로 패키징이 변경되었습니다.
org.
apache.lucene.queryparser.classic.QueryParser
대부분의 Lucene 분석기가 리팩토링되어 패키지 변경이 발생했습니다. 대체 패키지를 찾으려면 Apache Lucene 설명서를 참조하십시오.
TokenizerFactory 또는
와 같은 일부 Apache#16r 유틸리티 클래스가 Apache Lucene으로 이동되었습니다. 애플리케이션에서 이러한 유틸리티 또는 사용자 지정 분석기를 사용하는 경우 Apache Lucene에서 새 패키지 이름을 찾아야 합니다.
TokenFilterFactory
자세한 내용은 Apache Lucene 마이그레이션 가이드를 참조하십시오.
Hibernate 검색 더 이상 사용되지 않는 API
더 이상 사용되지 않는 인터페이스, 클래스, 열거, 주석 유형, 메서드, 생성자 및 열거 상수의 전체 목록은 Hibernate Search 더 이상 사용되지 않는 API 문서를 참조하십시오.
Hibernate 검색 더 이상 사용되지 않는 인터페이스
인터페이스 | 설명 |
---|---|
org.hibernate.search.store.IndexShardingStrategy |
Hibernate Search 4.4에서 더 이상 사용되지 않음. 검색 5에서 제거될 수 있습니다. 대신 |
org.hibernate.search.store.Workspace | 이 인터페이스는 이동되며 비공용 API로 간주되어야 합니다. 자세한 내용은 HSEARCH-1915 를 참조하십시오. |
Hibernate 검색 더 이상 사용되지 않는 클래스
클래스 | 설명 |
---|---|
org.hibernate.search.filter.FilterKey | 사용자 정의 필터 키는 더 이상 사용되지 않으며 Hibernate Search 6에서 제거될 예정입니다. Hibernate Search 5.1부터 Lucene 필터를 캐싱하는 키는 지정된 필터 매개 변수에 따라 자동으로 계산됩니다. |
org.hibernate.search.filter.StandardFilterKey | 사용자 정의 필터 키는 더 이상 사용되지 않으며 Hibernate Search 6에서 제거될 예정입니다. Hibernate Search 5.1부터 Lucene 필터를 캐싱하는 키는 지정된 필터 매개 변수에 따라 자동으로 계산됩니다. |
Hibernate 검색 더 이상 사용되지 않는 열거
enum | 설명 |
---|---|
org.hibernate.search.annotations.FieldCacheType |
더 이상 사용되지 않으므로 |
더 이상 사용되지 않는 Hibernate 주석 검색
주석 | 설명 |
---|---|
org.hibernate.search.annotations.CacheFromIndex | 주석을 제거합니다. 대체할 필요가 없습니다. |
org.hibernate.search.annotations.Key | 사용자 정의 필터 캐시 키는 더 이상 사용되지 않는 기능이며 Hibernate Search 6에서 제거될 예정입니다. Hibernate Search 5.1부터 필터 캐시 키는 필터 매개 변수에 따라 자동으로 결정되므로 더 이상 키 오브젝트를 제공할 필요가 없습니다. |
더 이상 사용되지 않는 Hibernate 검색 방법
방법 | 설명 |
---|---|
org.hibernate.search.FullTextSharedSessionBuilder.autoClose() | 교체 없음 |
org.hibernate.search.FullTextSharedSessionBuilder.autoClose(boolean) | 교체 없음 |
org.hibernate.search.cfg.IndexedMapping.cacheFromIndex(FieldCacheType…) | 이 설정은 대체 없이 제거됩니다. |
org.hibernate.search.cfg.EntityDescriptor.getCacheInMemory() | 이 설정은 대체 없이 제거됩니다. |
org.hibernate.search.cfg.ContainedInMapping.numericField() |
대신 |
org.hibernate.search.cfg.EntityDescriptor.setCacheInMemory(Map<String, Object>) | 이 설정은 대체 없이 제거됩니다. |
org.hibernate.search.MassIndexer.threadsForSubsequentFetching(int) | 이 방법은 제거됩니다. |
org.hibernate.search.query.dsl.FuzzyContext.withThreshold(float) |
Use |
더 이상 사용되지 않는 Hibernate 검색
생성자 | 설명 |
---|---|
org.hibernate.search.cfg.NumericFieldMapping(PropertyDescriptor, EntityDescriptor, SearchMapping) |
대신 |
고급 통합업체에 영향을 미치는 변경 사항
이 섹션에서는 공용 API에 속하지 않는 변경 사항에 대해 설명합니다. 이러한 아티팩트는 Hibernate 검색 프레임워크를 확장하는 통합자만 액세스해야 하므로 평균 개발자에게 영향을 주지 않아야 합니다.
-
IndexWriterSetting.MAX_THREAD_STATES
및IndexWriterSetting.TERM_INDEX_INTERVAL
열거형 상수는 더 이상 사용되지 않습니다. 구성에서 읽는 속성에 영향을 미치므로 누락된 팩트는hibernate.search.Animals.2.indexwriter.term_index_interval = default
와 같은 구성 속성이 무시됨을 의미합니다. 유일한 부작용은 속성이 적용되지 않는다는 것입니다. -
이제
SearchFactoryIntegrator
인터페이스가 더 이상 사용되지 않습니다.SearchIntegrator
를 사용하려면 모든 코드를 즉시 마이그레이션해야 합니다. -
SearchFactoryBuilder
클래스가 더 이상 사용되지 않습니다. 대신SearchIntegrationBuilder
를 사용합니다. -
HSQuery.getExtendedSearchIntegrator()
메서드가 더 이상 사용되지 않습니다.SearchIntegrator
를 사용할 수 있지만 완전히 제거하는 것이 좋습니다. -
DocumentBuilderIndexedEntity.getFieldCacheOption()
메서드는 더 이상 사용되지 않습니다. 대체할 수 없습니다. -
BuildContext.getIndexingStrategy()
메서드는 더 이상 사용되지 않습니다. 대신BuildContext.getIndexingMode()
를 사용합니다. -
DirectoryHelper.getVerifiedIndexDir(String, Properties, boolean)
메서드는 더 이상 사용되지 않습니다. 대신DirectoryHelper.getVerifiedIndexPath(java.lang.String, java.util.Properties, 부울)
를 사용합니다. 다음은 재패키징 또는 이름이 변경된 Hibernate 검색 클래스 목록입니다.
이전 패키지 및 클래스 새 패키지 및 클래스 org.hibernate.search.engine.impl.SearchMappingBuilder
org.hibernate.search.engine.spi.SearchMappingHelper
org.hibernate.search.indexes.impl.DirectoryBasedIndexManager
org.hibernate.search.indexes.spi.DirectoryBasedIndexManager
org.hibernate.search.spi.MassIndexerFactory
org.hibernate.search.batchindexing.spi.MassIndexerFactory
org.hibernate.search.spi.SearchFactoryBuilder
org.hibernate.search.spi.SearchIntegratorBuilder
org.hibernate.search.spi.SearchFactoryIntegrator
org.hibernate.search.spi.SearchIntegrator
5.10. 엔터티 빈을 자카르타 지속성으로 마이그레이션
EJB 엔터티 빈에 대한 지원은 Jakarta EE 8에서 선택 사항이며 JBoss EAP 7에서 지원되지 않습니다.
이전 JBoss EAP 릴리스에서는 javax.ejb.EntityBean
클래스를 확장하고 필수 메서드를 구현하여 엔터티 빈이 애플리케이션 소스 코드에 생성되었습니다. 그런 다음 ejb-jar.xml
파일에서 구성되었습니다. CMP 엔터티 빈은 값이 있는 <
요소를 사용하여 지정되었습니다. vCPU 엔터티 빈은 값이 Bean 인 persistence-type> 하위 요소가 포함된 <entity
><
요소를 사용하여 지정되었습니다.
persistence-type> 하위 요소가 포함된 <entity
>
JBoss EAP 7에서는 코드의 모든 CMP 및¢ 엔터티 빈을 Jakarta Persistence 엔터티로 교체해야 합니다. Jakarta Persistence 엔터티는 javax.persistence.* 클래스를 사용하여 생성되며 persistence.xml
파일에 정의됩니다.
다음은 Jakarta Persistence 엔터티 클래스의 예입니다.
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity // User is a keyword in some SQL dialects! @Table(name = "MyUsers") public class MyUser { @Id @GeneratedValue private Long id; @Column(unique = true) private String username; private String firstName; private String lastName; public Long getId() { return id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; }
다음은 persistence.xml
파일의 예입니다.
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="my-unique-persistence-unit-name"> <properties> // properties... </properties> </persistence-unit> </persistence>
Jakarta Persistence 엔터티의 실제 예는 JBoss EAP 7과 함께 제공되는 bmt
, cmt
및 hibernate5
빠른 시작을 참조하십시오.
5.11. 자카르타 지속성 속성 변경
JBoss EAP 7.0에 도입된 Jakarta Persistence 속성 변경
JBoss EAP의 이전 릴리스에서 지속성 동작과의 호환성을 제공하기 위해 새 지속성 속성 jboss.as.jpa.deferdetach
가 추가되었습니다.
jboss.as.jpa.deferdetach
속성은 Jakarta 트랜잭션이 아닌 트랜잭션 범위 지속성 컨텍스트에서 사용되는 트랜잭션 범위 지속성 컨텍스트에서 각 EntityManager
호출 후 로드된 엔터티를 분리하는지 또는 세션 빈 호출이 종료될 때까지 대기하는지 여부를 제어합니다. 속성 값은 기본값이 false
이므로 EntityManager
호출 후 엔터티를 분리하거나 지웁니다. 이는 Jakarta Persistence 사양에 정의된 올바른 기본 동작입니다. 속성 값을 true
로 설정하면 지속성 컨텍스트가 종료될 때까지 엔터티가 분리되지 않습니다.
JBoss EAP 5에서 지속성은 jboss.as.jpa.deferdetach
속성이 true
로 설정된 것처럼 작동합니다. 다음 예와 같이 JBoss EAP 5에서 JBoss EAP 7로 애플리케이션을 마이그레이션할 때 동일한 동작을 얻으려면 persistence
속성 값을 .xml에서 jboss.as.jpa.
deferdetachtrue
로 설정해야 합니다.
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> <persistence-unit name="EAP5_COMPAT_PU"> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source> <properties> <property name="jboss.as.jpa.deferdetach" value="true" /> </properties> </persistence-unit> </persistence>
JBoss EAP 6에서 지속성은 jboss.as.jpa.deferdetach
속성이 false
로 설정된 것처럼 작동합니다. JBoss EAP 7에 표시된 것과 동일한 동작이므로 애플리케이션을 마이그레이션할 때 변경할 필요가 없습니다.
JBoss EAP 7.1에서 도입한 Jakarta Persistence 속성 변경
JBoss EAP 7.0에서는 동기화되지 않은 지속성 컨텍스트 오류 점검이 다음 영역에 있으므로 엄격하지 않았습니다.
-
동기화된 컨테이너 관리 지속성 컨텍스트를 사용하면 자카르타 트랜잭션과 연결된 동기화되지 않은 확장 지속성 컨텍스트를 사용할 수 있었습니다. 대신 동기화되지 않은 지속성 컨텍스트가 사용되지 않도록
IllegalStateException
을 throw해야 합니다. - 배포 설명자에 지정된 동기화되지 않은 지속성 컨텍스트가 동기화됨으로 처리되었습니다.
또한 JBoss EAP 7.0에서는 @PersistenceContext
의 PersistenceProperty
힌트가 실수로 무시되었습니다.
이러한 문제는 JBoss EAP 7.1 이상에서 해결 및 해결되었습니다. 이러한 업데이트로 인해 애플리케이션 동작이 예기치 않게 변경될 수 있기 때문에 이전 버전과의 호환성을 제공하고 이전 동작을 유지하기 위해 두 개의 새로운 지속성 유닛 속성이 JBoss EAP 7.1에 도입되었습니다.
속성 | 설명 |
---|---|
| 이 속성은 오류 검사 기능을 비활성화합니다. JBoss EAP 7.0에서 작동하고 JBoss EAP 7.1 이상에서 실패하는 경우 이전 버전과의 호환성을 위해 임시 조치로 사용해야 합니다. 이 속성은 향후 릴리스에서 더 이상 사용되지 않을 수 있으므로 이를 수행하는 즉시 애플리케이션 코드를 수정하는 것이 좋습니다. |
|
이 속성은 |
5.12. Jakarta Enterprise Beans 클라이언트 코드 마이그레이션
Enterprise 엔터티 빈은 JBoss EAP 7에서 지원되지 않습니다. 엔터티 빈을 Jakarta Persistence로 마이그레이션하는 방법에 대한 자세한 내용은 Migrate Entity Beans to Jakarta Persistence 를 참조하십시오.
5.12.1. JBoss EAP 7에서 Jakarta Enterprise Beans 클라이언트 변경
JBoss EAP 7에서는 기본 원격 커넥터와 포트가 변경되었습니다. 이 변경 사항에 대한 자세한 내용은 원격 URL 커넥터 및 포트 업데이트를 참조하십시오.
migrate
작업을 사용하여 서버 구성을 마이그레이션한 경우 이전 설정이 유지되며 여기에서 자세히 설명하지 않아도 됩니다. 그러나 새로운 JBoss EAP 7 기본 구성을 사용하는 경우 다음과 같이 변경해야 합니다.
5.12.1.1. 기본 원격 연결 포트 업데이트
jboss-ejb-client.properties
파일에서 원격 연결 포트 값을 4447
에서 8080
으로 변경합니다. 다음은 이전 버전과 현재 릴리스의 jboss-ejb-client.properties
파일의 예입니다.
예제: JBoss EAP 6 jboss-ejb-client.properties
파일
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connections=default remote.connection.default.host=localhost remote.connection.default.port=4447 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
예제: JBoss EAP 7 jboss-ejb-client.properties
파일
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connections=default remote.connection.default.host=localhost remote.connection.default.port=8080 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
5.12.1.2. 기본 커넥터 업데이트
새 JBoss EAP 7 구성을 사용하는 경우 기본 커넥터가 remote
에서 http-remoting
으로 변경되었습니다. 이러한 변경 사항은 한 릴리스의 JBoss EAP 릴리스의 라이브러리를 사용하는 클라이언트에 영향을 미치고 다른 릴리스의 서버에 연결합니다.
-
클라이언트 애플리케이션이 JBoss EAP 6의 Jakarta Enterprise Beans 클라이언트 라이브러리를 사용하고 JBoss EAP 7 서버에 연결하려는 경우
8080
이외의 포트에원격
커넥터를 노출하도록 서버를 구성해야 합니다. 그런 다음 클라이언트는 새로 구성된 커넥터를 사용하여 연결해야 합니다. JBoss EAP 7의 Jakarta Enterprise Beans 클라이언트 라이브러리를 사용하고 JBoss EAP 6 서버에 연결하려는 클라이언트 애플리케이션은 서버 인스턴스가
http-remoting 커넥터를 사용하지 않고
사용함을 알아야 합니다. 이를 위해 새 클라이언트 측 연결 속성을 정의하면 됩니다.원격
커넥터를예:
remote
연결 속성remote.connection.default.protocol=remote
5.12.2. 원격 이름 지정 클라이언트 코드 마이그레이션
새로운 기본 JBoss EAP 7 구성으로 실행 중인 경우 새 기본 원격 포트 및 커넥터를 사용하도록 클라이언트 코드를 수정해야 합니다.
다음은 JBoss EAP 6의 클라이언트 코드에 원격 이름 지정 속성을 지정하는 방법의 예입니다.
java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory java.naming.provider.url=remote://localhost:4447
다음은 JBoss EAP 7의 클라이언트 코드에서 원격 이름 지정 속성을 지정하는 방법의 예입니다.
java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory java.naming.provider.url=http-remoting://localhost:8080
5.12.3. JBoss EAP 7.1에 추가된 JBoss EJB 클라이언트 변경 사항
JBoss EAP 7.0은 JBoss EJB 클라이언트 2.1.4와 함께 제공되지만 JBoss EAP 7.1 이상에서는 API에 대한 여러 변경 사항이 포함된 JBoss EJB 클라이언트 4.0.x와 함께 제공됩니다.
Enterprise 엔터티 빈은 JBoss EAP 7에서 지원되지 않습니다. 엔터티 빈을 Jakarta Persistence로 마이그레이션하는 방법에 대한 자세한 내용은 Migrate Entity Beans to Jakarta Persistence 를 참조하십시오.
org.ejb.client.EJBClientInvocationContext
클래스에 다음과 같은 새로운 메서드가 추가되었습니다.방법 유형 설명 isBlockingCaller()
boolean
이 호출이 현재 호출 스레드를 차단하는지 여부를 확인합니다.
isClientAsync()
boolean
메서드가 client-asynchronous로 표시되었는지 여부를 확인합니다. 즉, 서버 측 메서드가 비동기식인지와 관계없이 호출은 비동기식이어야 합니다.
isIdempotent()
boolean
메서드가 idempotent로 표시되는지 확인합니다. 즉 메서드가 추가 효과 없이 두 번 이상 호출될 수 있는지 확인합니다.
setBlockingCaller(boolean)
void
이 호출이 현재 호출 스레드를 차단하는지 여부를 설정합니다.
setLocator(EJBLocator<T>)
<T> void
호출 대상의 로케이터를 설정합니다.
org.ejb.client.EJBLocator
클래스에 다음과 같은 새로운 메서드가 추가되었습니다.방법 유형 설명 asStateful()
StatefulEJBLocator<T>
이 검색 도구를 상태 저장 검색 도구로 반환합니다(있는 경우).
asStateless()
StatelessEJBLocator<T>
이 검색 도구를 상태 비저장 검색 도구로 반환합니다.
isEntity()
boolean
엔터티 검색 도구인지 확인합니다.
isHome()
boolean
이것이 홈 검색 도구인지 확인합니다.
isStateful()
boolean
상태 저장 검색 도구인지 확인합니다.
isStateless()
boolean
상태 비저장 검색 도구인지 확인합니다.
withNewAffinity(Affinity)
요약 EJBLocator<T>
새로 지정된 선호도를 사용하여 이 검색 도구의 복사본을 만듭니다.
java.security
클래스가 권한 있는 EJB 작업에 대한 액세스를 제어하기 위해 도입되었습니다. 다음과 같은 생성자를 제공합니다..Permission의 하위 클래스인 새 org.ejb.client.EJBClient
Permission-
EJBClientPermission(문자열 이름)
-
EJBClientPermission(문자열 이름, 문자열 작업)
-
다음과 같은 방법을 제공합니다.
방법 유형 설명 equals(EJBClientPermission obj)
boolean
두 개의
EJBClientPermission
오브젝트에 해당하는 오브젝트를 확인합니다.equals(Object obj)
boolean
두 개의
Permission
오브젝트에 대한 동일성을 확인합니다.같음(Permission obj)
boolean
두 개의
Permission
오브젝트에 대한 동일성을 확인합니다.getActions()
문자열
작업을 문자열로 반환합니다.
hashcode()
int
이
Permission
오브젝트의 해시 코드 값을 반환합니다.implies(EJBClientPermission permission)
boolean
이
EJBClientPermission
오브젝트의 작업에 의해 지정된 권한의 작업이 암시 되는지 확인합니다.mean(권한 권한)
boolean
이
Permission
오브젝트의 작업에 의해 지정된 권한의 작업이 암시 되는지 확인합니다.특정 EJB 메서드를 찾기 위해 새로운
org.ejb.client.EJBMethodLocator
클래스가 도입되었습니다. 다음 생성자를 제공합니다.-
EJBMethodLocator(String methodName, String… parameterTypeNames)
-
다음과 같은 방법을 제공합니다.
방법 유형 설명 equals(EJBMethodLocator other)
boolean
이 오브젝트가 다른 오브젝트와 같은지 확인합니다.
Equals(오브젝트 기타)
boolean
이 오브젝트가 다른 오브젝트와 같은지 확인합니다.
forMethod(Method 방법)
static EJBMethodLocator
주어진 그림 방법에 대한 메서드 검색 도구를 가져옵니다.
getMethodName()
문자열
메서드 이름을 가져옵니다.
getParameterCount()
int
매개 변수 수를 가져옵니다.
getParameterTypeName(int index)
문자열
지정된 인덱스에서 매개 변수의 이름을 가져옵니다.
hashCode()
int
해시 코드를 가져옵니다.
실패 사례에 대해 새로운
org.jboss.ejb.client.EJBReceiverInvocationContext.ResultProducer.Failed
클래스가 도입되었습니다. 다음 생성자를 제공합니다.-
실패(예외 원인)
-
다음과 같은 방법을 제공합니다.
방법 유형 설명 discardResult()
void
결과를 취소하여 사용되지 않음을 나타냅니다.
getResult()
개체
결과를 가져옵니다.
즉각적인 결과를 위해 새로운
org.jboss.ejb.client.EJBReceiverInvocationContext.ResultProducer.Immediate
클래스가 도입되었습니다. 다음 생성자를 제공합니다.-
실패(예외 원인)
-
다음과 같은 방법을 제공합니다.
방법 유형 설명 discardResult()
void
결과를 취소하여 사용되지 않음을 나타냅니다.
getResult()
개체
결과를 가져옵니다.
-
org.jboss.ejb.client.URIAffinity
클래스의 하위 클래스인 새org.jboss.ejb.client.Affinity
클래스가 URI 선호도 사양에 대해 도입되었습니다.Affinity.forUri(URI)
를 사용하여 생성됩니다. 다음과 같은 방법을 제공합니다.
방법 유형 설명 등(기타 선호도)
boolean
다른 개체가 이 오브젝트와 같은지 여부를 나타냅니다.
Equals(오브젝트 기타)
boolean
다른 개체가 이 오브젝트와 같은지 여부를 나타냅니다.
등(기타 URIffinity)
boolean
다른 개체가 이 오브젝트와 같은지 여부를 나타냅니다.
getURI()
URI
관련 URI를 가져옵니다.
hashCode()
int
해시 코드를 가져옵니다.
toString()
문자열
오브젝트의 문자열 표시를 반환합니다.
org.jboss.ejb.client.EJBMetaDataImpl
클래스는 다음 메서드를 더 이상 사용되지 않습니다.-
toAbstractEJBMetaData()
-
EJBMetaDataImpl(AbstractEJBMetaData<?,?>)
-
5.12.4. JBoss EAP 7에 필요한 EJB 클라이언트 변경
JBoss EAP 7.2의 2.0.8에서 2.1.1로 org.apache.santuario.xmlsec
모듈의 업그레이드로 인해 PicketLinkSTS
에서 리모팅하는 것과 관련된 회귀 문제가 발생했습니다. 문제는 다음 런타임 예외로 표시됩니다.
java.lang.IllegalArgumentException: ELY05131: Invalid ASCII control "0xA"
이는 어설션에서 생성된 SignatureValue
의 형식 변경으로 인해 발생합니다. 이전 릴리스에서 생성된 값은 다음 예와 유사했습니다.
<dsig:SignatureValue xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">cUNpFJIZlLYrBDZtQSTDrq2K6PbnAHyg2qbx/D5FuB4XMjdQ5oxQjkMejLyelnA7s4GFusoLhahlqlTOT8UrOyxrR4yYAmJ/e5s+f4gys926+tbiraT/3/wG8wM/Lvcjvk5Ap69zODuRYpypsWfA4jrI7TTBXVPGy8g4KUdnFviUiTuFTc2Ghgxp53AmUuLis/THyP28jE7+28//q8bi/bQrFwHC6tWX67+NK1duFCOcQ6IPIKeVrePZz55Ivgl+WWdkF6uYCz5IdMzurhzmeQ3K8DAMIxz/MG67VWJIOnuGNWF7nmdye5zd9AFcRsr1XadvZJCbGNfuc89AL5inCg==</dsig:SignatureValue>
JBoss EAP 7.2에서 생성된 문자열 값에는 이제 잘못된 숨겨진 ASCII 0xD 캐리지 리턴 인스턴스와 0
xA
라인 피드 제어 문자의 인스턴스가 포함됩니다.
<dsig:SignatureValue xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">cUNpFJIZlLYrBDZtQSTDrq2K6PbnAHyg2qbx/D5FuB4XMjdQ5oxQjkMejLyelnA7s4GFusoLhahl qlTOT8UrOyxrR4yYAmJ/e5s+f4gys926+tbiraT/3/wG8wM/Lvcjvk5Ap69zODuRYpypsWfA4jrI 7TTBXVPGy8g4KUdnFviUiTuFTc2Ghgxp53AmUuLis/THyP28jE7+28//q8bi/bQrFwHC6tWX67+N K1duFCOcQ6IPIKeVrePZz55Ivgl+WWdkF6uYCz5IdMzurhzmeQ3K8DAMIxz/MG67VWJIOnuGNWF7 nmdye5zd9AFcRsr1XadvZJCbGNfuc89AL5inCg==</dsig:SignatureValue>
설명된 런타임 예외가 발생하면 반환된 어설션 문자열에서 숨겨진 ASCII 문자 발생을 제거하도록 클라이언트 코드를 업데이트합니다. 예를 들어 현재 코드가 다음 예와 유사하다고 가정합니다.
WSTrustClient client = new WSTrustClient("PicketLinkSTS", "PicketLinkSTSPort", "http://localhost:8080/picketlink-sts/PicketLinkSTS", new WSTrustClient.SecurityInfo(username, password)); Element assertion = client.issueToken(SAMLUtil.SAML2_TOKEN_TYPE); // Return the assertion as a string String assertionString = DocumentUtil.getNodeAsString(assertion); ... properties.put("remote.connection.main.password", assertionString);
잘못된 숨겨진 ASCII 0xD 캐리지 리턴 및 0
xA
줄 피드 문자의 발생을 제거하려면 코드 행을 추가해야 합니다. 예를 들면 다음과 같습니다.
WSTrustClient client = new WSTrustClient("PicketLinkSTS", "PicketLinkSTSPort", "http://localhost:8080/picketlink-sts/PicketLinkSTS", new WSTrustClient.SecurityInfo(username, password)); Element assertion = client.issueToken(SAMLUtil.SAML2_TOKEN_TYPE); // Return the assertion as a string, stripping the invalid hidden ASCII characters String assertionString = DocumentUtil.getNodeAsString(assertion).replace(String.valueOf((char) 0xA), "").replace(String.valueOf((char) 0xD), ""); ... properties.put("remote.connection.main.password", assertionString);
5.13. WildFly 구성 파일을 사용하려면 클라이언트를 마이그레이션합니다.
7.1 이전에는 EJB 및 명명과 같은 JBoss EAP 클라이언트 라이브러리에서 다양한 구성 전략을 사용했습니다. JBoss EAP 7.1은 서버 구성이 처리되는 방식과 유사한 방식으로 모든 클라이언트 구성을 하나의 구성 파일로 통합하는 목적으로 the wildfly-config.xml
파일을 도입했습니다.
예를 들어 JBoss EAP 7.1 이전에는 jboss-ejb-client.properties
파일을 사용하거나 Properties
클래스를 사용하여 속성을 프로그래밍 방식으로 설정하여 EJB 클라이언트에 대한 새 InitialContext
를 만들 수 있습니다.
예: jboss-ejb-client.properties
속성 파일
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connections=one remote.connection.one.port=8080 remote.connection.one.host=127.0.0.1 remote.connection.one.username=quickuser remote.connection.one.password=quick-123
JBoss EAP 7.1 이상에서는 클라이언트 아카이브의 META
파일을 생성합니다. 이는 a -INF/ 디렉터리에 awildfly-
config.xmlwildfly-config.xml
파일을 사용하는 것과 동일한 구성입니다.
예제: the wildfly-config.xml
파일을 사용한 동일한 구성
<configuration> <authentication-client xmlns="urn:elytron:client:1.2"> <authentication-rules> <rule use-configuration="ejb"/> </authentication-rules> <authentication-configurations> <configuration name="ejb"> <set-user-name name="quickuser"/> <credentials> <clear-password password="quick-123"/> </credentials> </configuration> </authentication-configurations> </authentication-client> <jboss-ejb-client xmlns="urn:jboss:wildfly-client-ejb:3.0"> <connections> <connection uri="remote+http://127.0.0.1:8080" /> </connections> </jboss-ejb-client> </configuration>
추가 리소스
-
wildfly-config.xml
파일을 사용하여 Elytron 클라이언트에 대한 클라이언트 인증을 구성하는 방법에 대한 자세한 내용은 JBoss EAP용 ID 관리 구성 방법에서 Elytron Client로 클라이언트 인증 구성을 참조하십시오. -
클라이언트 구성 유형에 대한 자세한 내용은 JBoss EAP 개발 가이드의 the
wildfly-config.xml
wildfly-config.xml
파일을 사용하여 Elytron 클라이언트에 대한 클라이언트 인증을 구성하는 방법에 대한 자세한 내용은 JBoss EAP용 ID 관리 구성 방법에서 Elytron Client로 클라이언트 인증 구성을 참조하십시오.
5.14. 배포 계획 구성 마이그레이션
Java EE 애플리케이션 배포 사양(JSR-88) 은 여러 공급업체의 툴을 사용하여 모든 Java EE 플랫폼 제품에서 애플리케이션을 구성하고 배포할 수 있도록 표준 계약을 정의하기 위한 것입니다. 계약에는 도구 프로바이더가 액세스하는 DeploymentManager
및 기타 javax.enterprise.deploy.spi
인터페이스를 구현하기 위해 Java EE 제품 공급자가 필요했습니다. JBoss EAP 6의 경우 배포 계획은 ZIP 또는 JAR 아카이브에 번들된 deployment-plan.xml
이라는 XML 설명자로 식별됩니다.
이 사양은 대부분의 애플리케이션 서버 제품이 자체적인 "기능이 풍부한" 배포 솔루션을 제공하므로 채택이 거의 이루어지지 않았습니다. 이러한 이유로 JSR-88 지원은 Java EE 7 및 JBoss EAP 7에서 제거되었습니다.
JSR-88을 사용하여 애플리케이션을 배포하는 경우 이제 다른 방법을 사용하여 애플리케이션을 배포해야 합니다. JBoss EAP 관리 CLI 배포
명령은 독립 실행형 서버 또는 관리형 도메인의 서버 그룹에 아카이브를 배포하는 표준 방법을 제공합니다. 관리 CLI에 대한 자세한 내용은 관리 CLI 가이드를 참조하십시오.
5.15. 사용자 지정 애플리케이션 마이그레이션
jboss-web.xml
XML 파일에 정의된 사용자 지정 센서 또는 모든 센서를 수동으로 마이그레이션해야 합니다. 여기에는 org.apache.catalina.valves.ValveBase
클래스를 확장하여 생성되고 jboss-web.xml
설명자 파일의 <valve>
요소에 구성된 센서가 포함됩니다.
jboss-web.xml
파일에 정의된 사용자 지정 센서 및 센서는 해당 Undertow 기본 제공 핸들러로 다시 작성하거나 교체해야 합니다. 센서를 Undertow handlers에 매핑하는 방법에 대한 자세한 내용은 Migrate JBoss Web¢s를 참조하십시오.
Undertow 기본 제공 인증 메커니즘을 사용하여 인증 센서를 수동으로 교체해야 합니다.
배포에 구성된 마이그레이션
JBoss EAP 6에서는 jboss-web.xml
웹 애플리케이션 설명자 파일에서 구성하여 애플리케이션 수준에서 사용자 지정 센서를 정의할 수 있습니다. JBoss EAP 7에서는 Undertow 핸들러에서도 이 작업을 수행할 수 있습니다.
다음은 JBoss EAP 6의 jboss-web.xml
파일에 구성된 값의 예입니다.
<jboss-web> <valve> <class-name>org.jboss.examples.MyValve</class-name> <param> <param-name>myParam</param-name> <param-value>foobar</param-value> </param> </valve> </jboss-web>
JBoss EAP에서 사용자 지정 핸들러를 생성하고 구성하는 방법에 대한 자세한 내용은 JBoss EAP 개발 가이드에서 사용자 지정 핸들러 생성을 참조하십시오.
사용자 지정 인증업체 마이그레이션
인증 센서 마이그레이션 방법에 대한 자세한 내용은 이 가이드의 Migrate Authenticator 를 참조하십시오.
5.16. 보안 애플리케이션 변경
Undertow로 JBoss Web을 교체하려면 JBoss EAP 7의 보안 구성을 변경해야 합니다.
5.16.1. 인증자 마이그레이션
JBoss EAP 6.4에서 AuthenticatorBase
를 확장한 사용자 지정 인증 노드를 생성한 경우 JBoss EAP 7에서 사용자 지정 HTTP 인증 구현으로 수동으로 교체해야 합니다. HTTP 인증 메커니즘은 elytron
하위 시스템에서 생성된 다음 undertow
하위 시스템에 등록됩니다. 사용자 지정 HTTP 인증 메커니즘을 구현하는 방법에 대한 자세한 내용은 JBoss EAP 의 개발 가이드에서 사용자 지정 HTTP 메커니즘 개발을 참조하십시오.
5.16.2. PicketLink 변경
SAML v2 구성을 사용한 SSO에 필요한 변경 사항에 대한 자세한 내용은 JBoss EAP에 대한 SAML v2로 SSO를 설정하는 방법의 변경 사항을 참조하십시오.
5.16.3. 기타 보안 애플리케이션 변경
Kerberos를 사용한 SSO 구성 차이점에 대한 자세한 내용은 JBoss EAP용 Kerberos로 SSO를 설정하는 방법에서 이전 버전 구성의 차이점을 참조하십시오.
5.17. JBoss 로깅 변경
애플리케이션에서 JBoss Logging을 사용하는 경우 이제 org.jboss.logging
패키지의 주석이 JBoss EAP 7에서 더 이상 사용되지 않습니다. 해당 패키지는 org.jboss.logging.annotations
패키지로 이동되었으므로 새 패키지를 가져오려면 소스 코드를 업데이트해야 합니다.
또한 주석은 별도의 Maven groupId:artifactId:version
(GAV) ID로 이동되었으므로 프로젝트 pom.xml
파일에 org.jboss.logging:jboss-logging-annotations
에 대한 새 프로젝트 종속성을 추가해야 합니다.
로깅 주석만 이동했습니다. org.jboss.logging.BasicLogger
및 org.jboss.logging.Logger
는 여전히 org.jboss.logging
패키지에 있습니다.
다음 표에는 더 이상 사용되지 않는 주석 클래스와 해당 교체 항목이 나열되어 있습니다.
표 5.1. 더 이상 사용되지 않는 로깅 주석 교체
사용되지 않는 클래스 | 교체 클래스 |
---|---|
org.jboss.logging.Cause | org.jboss.logging.annotations.Cause |
org.jboss.logging.Field | org.jboss.logging.annotations.Field |
org.jboss.logging.FormatWith | org.jboss.logging.annotations.FormatWith |
org.jboss.logging.LoggingClass | org.jboss.logging.annotations.LoggingClass |
org.jboss.logging.LogMessage | org.jboss.logging.annotations.LogMessage |
org.jboss.logging.Message | org.jboss.logging.annotations.Message |
org.jboss.logging.MessageBundle | org.jboss.logging.annotations.MessageBundle |
org.jboss.logging.MessageLogger | org.jboss.logging.annotations.MessageLogger |
org.jboss.logging.Param | org.jboss.logging.annotations.Param |
org.jboss.logging.Property | org.jboss.logging.annotations.Property |
5.18. Jakarta Server Faces 코드 변경
Jakarta Server Faces 1.2에 대한 지원 중단
Jakarta Server Faces는 JavaServer Faces의 새 이름입니다.
JBoss EAP 6.4에서는 jboss-deployment-structure.xml
파일을 생성하여 애플리케이션 배포와 함께 Jakarta Server Faces 1.2를 계속 사용할 수 있습니다. JBoss EAP 7.4에는 Jakarta Server Faces 2.3이 포함되어 더 이상 Jakarta Server Faces 1.2 API를 지원하지 않습니다. 애플리케이션이 Jakarta Server Faces 1.2를 사용하는 경우 Jakarta Server Faces 2.3을 사용하도록 다시 작성해야 합니다.
5.19. 모듈 클래스 로드 변경
JBoss EAP 7에서는 여러 모듈에 동일한 클래스 또는 패키지가 포함된 경우 클래스 로드 동작이 변경되었습니다.
서로 종속되고 동일한 패키지 중 일부가 포함된 두 개의 모듈인
가 있다고 가정합니다. JBoss EAP 6에서는 종속성에서 로드된 클래스 또는 패키지가 MODULE_A
와 MODULE_Bmodule.xml
파일의 resource-root
에 지정된 것보다 우선합니다. MODULE_A
는 MODULE_ B 및 MODULE_B
의 패키지가
패키지를 확인했음을 의미합니다. 이 동작은 혼란스럽고 충돌이 발생할 수 있습니다. 이 동작은 JBoss EAP 7에서 변경되었습니다. 이제 MODULE_A
의module.xml
파일의 resource-root
에서 지정한 클래스 또는 패키지가 종속성으로 지정된 항목보다 우선합니다. 즉, MODULE_A
는 MODULE_A 및
의 패키지가 MODULE_
BMODULE_B
에 대한 패키지를 확인합니다. 이렇게 하면 충돌이 방지되고 더 적절한 동작을 제공합니다.
모듈 종속성에서 중복된 클래스를 포함하는 resource-root
라이브러리 또는 패키지가 포함된 사용자 지정 모듈을 정의한 경우, JBoss EAP 7로 마이그레이션할 때 ClassœException
, LinkageError
, 클래스 로드 오류 또는 동작의 기타 변경 사항이 표시될 수 있습니다. 이러한 문제를 해결하려면 하나의 클래스 버전만 사용하도록 module.xml
파일을 구성해야 합니다. 다음 방법 중 하나를 사용하여 이 작업을 수행할 수 있습니다.
-
모듈 종속성에서 클래스를 복제하는
resource-root
를 지정하지 않도록 할 수 있습니다. 가져오기
및내보내기
요소의include
및exclude
하위 인수를 사용하여module.xml
파일에서 클래스 로드를 제어할 수 있습니다. 다음은 클래스를 제외하는 내보내기 요소입니다. 지정된 패키지에 있습니다.<exports> <exclude path="com/mycompany/duplicateclassespath/"/> </exports>
기존 동작을 유지하려면 필터 요소를 사용하여 module.xml
파일의 종속 resource-root
에서 종속성 패키지를 필터링
해야 합니다. 이렇게 하면 JBoss EAP 6에 표시되는 홀 루프 없이 기존 동작을 유지할 수 있습니다. 다음은 지정된 패키지의 클래스를 필터링하는 root-resource
의 예입니다.
<resource-root path="mycompany.jar"> <filter> <exclude path="com/mycompany/duplicateclassespath"/> </filter> </resource-root>
모듈 및 클래스 로드에 대한 자세한 내용은 JBoss EAP 개발 가이드의 클래스 로드 및 모듈을 참조하십시오.
5.20. 애플리케이션 클러스터링 변경 사항
5.20.1. 새 클러스터링 기능 개요
다음 목록에서는 애플리케이션을 JBoss EAP 6에서 JBoss EAP 7로 마이그레이션할 때 인식할 새 클러스터링 기능 일부를 설명합니다.
- JBoss EAP 7은 Singleton 서비스 구축을 위한 새로운 공용 API를 도입하여 프로세스를 대폭 단순화합니다. Singleton 서비스에 대한 자세한 내용은 JBoss EAP 개발 가이드의 HA Singleton Service 를 참조하십시오.
- 한 번에 클러스터의 단일 노드에서만 배포 및 시작하도록 Singleton 배포를 구성할 수 있습니다. 자세한 내용은 JBoss EAP 개발 가이드의 HA Singleton Deployments 를 참조하십시오.
- 이제 클러스터된 Singleton MDB를 정의할 수 있습니다. 자세한 내용은 JBoss EAP용 Jakarta Enterprise Beans 애플리케이션 개발의 Clustered Singleton MDB 를 참조하십시오.
- JBoss EAP 7에는 Undertow mod_cluster 구현이 포함되어 있습니다. 이는 httpd 웹 서버가 필요하지 않은 순수 Java 로드 밸런싱 솔루션을 제공합니다. 자세한 내용은 JBoss EAP 구성 가이드에서 JBoss EAP를 프런트엔드 로드 밸런서 장치로 구성을 참조하십시오.
이 섹션의 나머지 부분에서는 클러스터링 변경 사항이 애플리케이션을 JBoss EAP 7로 마이그레이션하는 데 어떤 영향을 줄 수 있는지 설명합니다.
5.20.2. 웹 세션 클러스터링 변경 사항
JBoss EAP 7에는 새 웹 세션 클러스터링 구현이 도입되었습니다. 기존 JBoss Web 하위 시스템 소스 코드와 긴밀하게 연결된 이전 구현을 대체합니다.
새 웹 세션 클러스터링 구현은 jboss-web.xml
JBoss EAP 독점 웹 애플리케이션 XML 설명자 파일에서 애플리케이션을 구성하는 방식에 영향을 미칩니다. 다음은 이 파일에 남아 있는 클러스터링 구성 요소뿐입니다.
<jboss-web> ... <max-active-sessions>...</max-active-sessions> ... <replication-config> <replication-granularity>...</replication-granularity> <cache-name>...</cache-name> </replication-config> ... </jboss-web>
distributable-web
하위 시스템은 jboss-web.xml
의 <replication-config>
요소를 사용하지 않습니다. 애드혹 배포 가능한 웹 세션 프로필을 생성하여 <replication-config>
의 사용을 향상시킵니다.
이름별로 세션 관리 프로필을 참조하거나 배포별 세션 관리 구성을 제공하여 기본 배포 가능한 세션 관리 동작을 재정의할 수 있습니다. 자세한 내용은 Overide Default Distributable Session Management Behavior 를 참조하십시오.
다음 표는 더 이상 사용되지 않는 jboss-web.xml
파일의 요소에 대해 유사한 동작을 수행하는 방법을 설명합니다.
구성 요소 | 변경 설명 |
---|---|
<max-active-sessions/> |
이전에는 활성 세션 수가
새 구현에서 |
<passivation-config/> | 이 구성 요소와 하위 항목은 JBoss EAP 7에서 더 이상 사용되지 않습니다. |
<use-session-passivation/> | 이전에는 이 특성을 사용하여 비활성화가 활성화되었습니다.
새 구현에서는 |
<passivation-min-idle-time/> | 이전에는 세션이 비활성화 후보가 되기 전에 최소 시간 동안 활성화되어야 했습니다. 이로 인해 비활성화가 활성화된 경우에도 세션 생성에 실패할 수 있습니다. 새로운 구현은 이 논리를 지원하지 않으므로 이 DoS(서비스 거부) 취약점을 방지합니다. |
<passivation-max-idle-time/> | 이전에는 특정 시간 동안 유휴 상태인 후 세션이 비활성화되었습니다.
새로운 구현은 지연 패시베이션만 지원합니다. 즉시 활성화를 지원하지 않습니다. 세션은 |
<replication-config/> |
|
<replication-trigger/> | 이전에는 이 요소가 세션 복제가 트리거된 시기를 결정하는 데 사용되었습니다. 새 구현에서는 이 구성 옵션을 하나의 강력한 전략으로 대체합니다. 자세한 내용은 JBoss EAP 개발 가이드의 Immutable Session Attributes 를 참조하십시오. |
<use-jk/> |
이전 버전에서는 지정된 요청을 처리하는 노드의
새 구현에서 정의된 경우 |
<max-unreplicated-interval/> | 이전에는 세션 특성이 변경되지 않은 경우 세션의 타임스탬프 복제를 방지하기 위해 이 구성 옵션이 최적화되도록 설계되었습니다. 세션 액세스에는 세션 특성 변경 여부와 관계없이 캐시 트랜잭션 RPC가 필요하므로 실제로는 RPC를 방지하지 않습니다. 새 구현에서는 세션의 타임스탬프가 모든 요청에 복제됩니다. 이렇게 하면 장애 조치(failover)에 따라 오래된 세션 메타데이터가 방지됩니다. |
<snapshot-mode/> |
이전에는 |
<snapshot-interval/> |
이는 |
<session-notification-policy/> | 이전에는 이 특성에서 지정한 값으로 세션 이벤트를 트리거하는 정책을 정의했습니다. 새로운 구현에서 이 동작은 사양 중심이며 구성 불가능합니다. |
또한 이 새로운 구현에서는 동시 쓰기 캐시 저장소와 패시베이션 전용 캐시 저장소를 지원합니다. 일반적으로 동시 쓰기 캐시 저장소는 무효화 캐시와 함께 사용됩니다. 무효화 캐시와 함께 사용할 때 JBoss EAP 6의 웹 세션 클러스터링 구현이 제대로 작동하지 않았습니다.
5.20.3. 기본 배포 가능한 세션 관리 동작 덮어쓰기
다음 방법 중 하나로 배포 가능한 기본 세션 관리 동작을 재정의할 수 있습니다.
- 이름으로 세션 관리 프로파일 참조
- 배포별 세션 관리 구성 제공
기존 세션 관리 프로파일 참조
-
기존 분산 세션 관리 프로필을 사용하려면 애플리케이션의
/WEB
배포 설명자를 포함합니다. 예를 들면 다음과 같습니다.-INF
디렉터리에 있는 distributable-web.xml
/WEB-INF/distributable-web.xml
<?xml version="1.0" encoding="UTF-8"?> <distributable-web xmlns="urn:jboss:distributable-web:1.0"> <session-management name="foo"/> </distributable-web>
-
또는 기존
jboss-all.xml 배포 설명자 내에서 대상 분산 세션 관리 프로파일을 정의합니다.
/META-INF/jboss-all.xml
<?xml version="1.0" encoding="UTF-8"?> <jboss xmlns="urn:jboss:1.0"> <distributable-web xmlns="urn:jboss:distributable-web:1.0"> <session-management name="foo"/> </distributable-web> </jboss>
배포별 세션 관리 프로필 사용
단일 웹 애플리케이션만 사용자 지정 세션 관리 구성을 사용하는 경우 배포 설명자 자체 내에서 구성을 정의할 수 있습니다. 애드혹 구성은 distributable-web
하위 시스템에서 사용하는 구성과 동일합니다.
배포 설명자 내에서 사용자 지정 세션 관리 구성을 정의합니다. 예를 들면 다음과 같습니다.
/WEB-INF/distributable-web.xml
<?xml version="1.0" encoding="UTF-8"?> <distributable-web xmlns="urn:jboss:distributable-web:1.0"> <infinispan-session-management cache-container="foo" cache="bar" granularity="SESSION"> <primary-owner-affinity/> </infinispan-session-management> </distributable-web>
-
또는 기존
jboss-all.xml 배포 설명자 내에서 세션 관리 구성을 정의합니다.
/META-INF/jboss-all.xml
<?xml version="1.0" encoding="UTF-8"?> <jboss xmlns="urn:jboss:1.0"> <distributable-web xmlns="urn:jboss:distributable-web:1.0"> <infinispan-session-management cache-container="foo" cache="bar" granularity="ATTRIBUTE"> <local-affinity/> </infinispan-session-management> </distributable-web> </jboss>
5.20.4. 상태 저장 세션 EJB 클러스터링 변경
JBoss EAP 6에서는 다음 방법 중 하나로 상태 저장 세션 빈(SFSB)에 대한 클러스터링 동작을 활성화해야 했습니다.
세션 빈에
org.jboss.ejb3.annotation.Clustered
주석을 추가할 수 있습니다.@Stateful @Clustered public class MyBean implements MySessionInt { public void myMethod() { // } }
<clustered>
요소를jboss-ejb3.xml
파일에 추가할 수 있습니다.<c:clustering> <ejb-name>DDBasedClusteredSFSB</ejb-name> <c:clustered>true</c:clustered> </c:clustering>
JBoss EAP 7에서는 더 이상 클러스터링 동작을 활성화할 필요가 없습니다. 기본적으로 서버가 HA 프로필을 사용하여 시작된 경우 SFSB의 상태가 자동으로 복제됩니다. 다음 방법 중 하나로 이 기본 동작을 비활성화할 수 있습니다.
-
EJB 3.2 사양을 처음 사용하는
@Stateful(passivationCapable=false)
를 사용하여 단일 상태 저장 세션 빈에 대한 기본 동작을 비활성화할 수 있습니다. -
서버 구성에서
ejb3
하위 시스템의 구성에서 이 동작을 전역적으로 비활성화할 수 있습니다.
애플리케이션에서 @Clustered
주석을 제거하지 않으면 단순히 무시되며 애플리케이션의 배포에 영향을 주지 않습니다.
5.20.5. 서비스 변경 사항 클러스터링
JBoss EAP 6에서는 클러스터링 서비스의 API가 프라이빗 모듈에 있었지만 지원되지 않았습니다.
JBoss EAP 7은 애플리케이션에서 사용할 공용 클러스터링 서비스 API를 도입했습니다. 새 서비스는 가볍고 주입이 용이하도록 설계되었으며 외부 종속성이 필요하지 않습니다.
-
새
org.wildfly.clustering.group.Group
인터페이스는 현재 클러스터 상태에 대한 액세스를 제공하며 클러스터 멤버십 변경 사항을 수신 대기할 수 있습니다. -
새로운
org.wildfly.clustering.dispatcher.CommandDispatcher
인터페이스를 사용하면 전체 또는 선택한 노드 서브 세트에서 클러스터에서 코드를 실행할 수 있습니다.
이러한 서비스는 JBoss EAP 5의 HAPartition
및 GroupCommunicationService
, GroupMembershipNotifier 및 JBoss EAP 6의 Group
RpcDispatcher
라는 이전 릴리스에서 사용 가능한 유사한 API를 대체합니다.
자세한 내용은 JBoss EAP 개발 가이드 의 클러스터링 서비스를 위한 공용 API 를 참조하십시오.
5.20.6. 클러스터링 HA Singleton 마이그레이션
JBoss EAP 6에서는 클러스터 전체 HA Singleton 서비스에 사용할 수 있는 공용 API가 없었습니다. 비공개 org.jboss.as.clustering.singleton.*
클래스를 사용한 경우 애플리케이션을 JBoss EAP 7로 마이그레이션할 때 새 공용 org.wildfly.clustering.singleton.*
패키지를 사용하도록 코드를 변경해야 합니다.
HA Singleton 서비스에 대한 자세한 내용은 JBoss EAP 의 개발 가이드에서 HA Singleton 서비스를 참조하십시오. HA Singleton 배포에 대한 자세한 내용은 JBoss EAP의 개발 가이드에서 HA Singleton 배포를 참조하십시오.
6장. 기타 변경 사항
6.1. JBoss EAP 네이티브 및 Apache HTTP 서버의 제공 변경 사항
JBoss EAP 7 네이티브는 이 릴리스와 달리 이전 버전과 다르게 제공됩니다. 일부는 이제 많은 Red Hat JBoss 미들웨어 제품에 공통적인 보조 소프트웨어 집합인 새로운 Red Hat JBoss Core Services 제품을 제공합니다. 이 신제품을 통해 보다 신속하게 업데이트를 배포하고 보다 일관된 업데이트 환경을 제공할 수 있습니다. JBoss Core Services 제품은 Red Hat 고객 포털의 다른 위치에서 다운로드할 수 있습니다.
다음 표에는 릴리스 간 제공 방법의 차이점이 나열되어 있습니다.
패키지 JBoss EAP 6 JBoss EAP 7 메시징을 위한 AIO 네이티브
별도의 "기본 유틸리티" 다운로드에서 제품과 함께 제공
JBoss EAP 배포 내에 포함되어 있습니다. 추가 다운로드는 필요하지 않습니다.
Apache HTTP Server
별도의 "Apache HTTP Server" 다운로드에서 제품과 함께 제공
새로운 JBoss Core Services 제품을 통해 제공됨
mod_cluster, mod_jk, isapi 및 nsapi 커넥터
별도의 "Webserver Connector Natives" 다운로드에서 제품과 함께 제공
새로운 JBoss Core Services 제품을 통해 제공됨
JSVC
별도의 "기본 유틸리티" 다운로드에서 제품과 함께 제공
새로운 JBoss Core Services 제품을 통해 제공됨
OpenSSL
별도의 "기본 유틸리티" 다운로드에서 제품과 함께 제공
새로운 JBoss Core Services 제품을 통해 제공됨
tcnatives
별도의 "기본 구성 요소" 다운로드에서 제품과 함께 제공
이는 JBoss EAP 7에서 삭제되었습니다.
또한 다음과 같은 변경 사항에 유의해야 합니다.
Red Hat Enterprise Linux RPM 채널의 Apache HTTP 서버와 함께 사용된 mod_cluster 및 mod_jk 커넥터에 대한 지원이 중단되었습니다. Red Hat Enterprise Linux RPM 채널에서 Apache HTTP Server를 실행하고 JBoss EAP 7 서버에 대한 로드 밸런싱을 구성해야 하는 경우 다음 중 하나를 수행할 수 있습니다.
- JBoss Core Services에서 제공하는 Apache HTTP Server 사용.
- 프런트 엔드 로드 밸런서 장치 역할을 하도록 JBoss EAP 7을 구성할 수 있습니다. 자세한 내용은 JBoss EAP 구성 가이드에서 JBoss EAP를 프런트엔드 로드 밸런서 장치로 구성을 참조하십시오.
- 지원 및 인증된 머신에 Apache HTTP Server를 배포한 다음 해당 시스템에서 로드 밸런서를 실행할 수 있습니다. 지원되는 구성 목록은 JBoss EAP 7 구성 가이드 의 HTTP 커넥터 개요 를 참조하십시오.
- JBoss Core Services 에 대한 자세한 내용은 Apache HTTP 서버 설치 가이드에서 확인할 수 있습니다.
6.2. Amazon EC2의 배포 변경 사항
JBoss EAP 7의 AMI(Amazon Machine Images)에는 여러 가지 사항이 변경되었습니다. 이 섹션에서는 이러한 변경 사항 중 일부를 간략하게 요약합니다.
- Amazon EC2에서 비클러스터형 JBoss EAP 인스턴스 및 도메인을 시작하는 방법이 크게 변경되었습니다.
-
JBoss EAP 6는 JBoss EAP 구성에
사용자 데이터:
필드를 사용했습니다.User Data:
필드에서 구성을 구문 분석하고 인스턴스를 시작할 때 서버를 자동으로 시작하는 AMI 스크립트가 JBoss EAP 7에서 제거되었습니다. - Red Hat JBoss Operations Network 에이전트는 이전 JBoss EAP 릴리스에서 설치되었습니다. JBoss EAP 7에서는 별도로 설치해야 합니다.
Amazon EC2에 JBoss EAP 7을 배포하는 방법에 대한 자세한 내용은 Amazon Web Services에 JBoss EAP 배포를 참조하십시오.
6.3. 공유 모듈이 포함된 애플리케이션 배포 취소
JBoss EAP 7.1 서버와 Maven 플러그인의 변경으로 인해 애플리케이션 배포를 취소하려고 할 때 다음과 같은 오류가 발생할 수 있습니다. 이 오류는 애플리케이션에 상호 작용하거나 서로 의존하는 모듈이 포함된 경우 발생할 수 있습니다.
WFLYCTL0184: New missing/unsatisfied dependencies
예를 들어 데이터 공유
모듈에서 관리하는 데이터를 공유하는 두 개의 Maven WAR 프로젝트 모듈인
가 포함된 애플리케이션이 있다고 가정합니다.
application-A
및 application-B
이 애플리케이션을 배포할 때 먼저 공유 데이터 공유
모듈을 배포한 다음 종속된 모듈을 배포해야 합니다. 배포 순서는 상위 pom.xml
파일의 <modules>
요소에 지정됩니다. 이는 JBoss EAP 6.4에서 JBoss EAP 7.4를 통해 적용됩니다.
JBoss EAP 7.1 이전 릴리스에서는 다음 명령을 사용하여 상위 프로젝트의 루트에서 이 애플리케이션의 모든 아카이브 배포를 취소할 수 있었습니다.
$ mvn wildfly:undeploy
JBoss EAP 7.1 이상에서는 먼저 공유 모듈을 사용하는 아카이브 배포를 취소한 다음 공유 모듈 배포를 취소해야 합니다. 프로젝트 pom.xml
파일에 배포 취소 순서를 지정할 방법이 없으므로 수동으로 모듈을 배포 취소해야 합니다. 상위 디렉터리의 루트에서 다음 명령을 실행하여 이 작업을 수행할 수 있습니다.
$ mvn wildfly:undeploy -pl application-A,application-B $ mvn wildfly:undeploy -pl data-shared
이 새로운 배포 취소 동작은 더 올바르며 안정적이지 않은 배포 상태로 종료되지 않습니다.
6.4. JBoss EAP 스크립트 변경
암호 정책 변경으로 인해 JBoss EAP 7에서 add-user
스크립트 동작이 변경되었습니다. JBoss EAP 6에는 엄격한 암호 정책이 있습니다. 그 결과 add-user
스크립트에서 최소 요구 사항을 충족하지 못하는 취약한 암호를 거부했습니다. JBoss EAP 7에서는 취약한 암호가 허용되고 경고가 발행됩니다. 자세한 내용은 JBoss EAP 구성 가이드에서 추가 사용자 유틸리티 암호 제한 설정을 참조하십시오.
6.5. OSGi 지원 제거
JBoss EAP 6.0 GA가 처음 출시되었을 때 OSGi 사양 구현인 JBoss OSGi가 기술 프리뷰 기능으로 포함되었습니다. JBoss EAP 6.1.0이 릴리스되면서 JBoss OSGi는 기술 프리뷰에서 지원되지 않는 상태로 강등되었습니다.
JBoss EAP 6.1.0에서는 독립 실행형 서버에 대한 configadmin
및 osgi
확장 모듈과 하위 시스템 구성이 별도의 EAP_HOME/standalone/configuration/standalone-osgi.xml
구성 파일로 이동되었습니다. 이 지원되지 않는 구성 파일을 마이그레이션해서는 안 되므로 JBoss OSGi 지원을 제거해도 독립 실행형 서버 구성 마이그레이션에 영향을 주지 않아야 합니다. osgi
또는 configadmin
을 구성하기 위해 기타 독립 실행형 구성 파일을 수정한 경우 해당 구성을 제거해야 합니다.
관리형 도메인의 경우 osgi
확장 및 하위 시스템 구성이 JBoss EAP 6.1.0 릴리스의 EAP_HOME/domain/configuration/domain.xml
파일에서 제거되었습니다. 그러나 configadmin
모듈 확장 및 하위 시스템 구성은 EAP_HOME/domain/configuration/domain.xml
파일에 남아 있습니다. 이 구성은 더 이상 JBoss EAP 7에서 지원되지 않으므로 제거해야 합니다.
6.6. Java Platform 모듈 시스템 이름 변경
JPMS 아키텍처를 사용하는 독립 실행형 Java 애플리케이션에는 JBoss EAP 7.3의 JMS(Java Platform Module System) 이름 변경으로 인해 코드 업데이트가 필요합니다.
독립 실행형 애플리케이션 코드를 새 JPMS 모듈 이름으로 업데이트하여 JBoss EAP 7.3에서 제대로 작동합니다. JPMS 모듈 이름의 변경은 독립 실행형 애플리케이션에만 영향을 미치므로 서버에 배포된 JBoss EAP 애플리케이션에 코드 업데이트가 필요하지 않습니다.
표 6.1. JPMS 이름 변경
GroupID | JBoss EAP 7.2 | JBoss EAP 7.3 |
---|---|---|
|
|
|
|
|
|
|
|
|
6.7. Java용 Attachments API를 사용한 SOAP 변경
JBoss EAP 7.3으로 마이그레이션할 때 SAAJ 1.4 사양을 준수하도록 사용자 정의 SOAP 핸들러를 업데이트합니다.
JBoss EAP 7.3에는 SAAJ 1.4가 제공되므로 SAAJ 1.3과 함께 제공되는 이전 버전의 JBoss EAP에 대해 작성된 SOAP 핸들러가 SAAJ 1.4 및 1.3 사양의 차이로 인해 제대로 작동하지 않을 수 있습니다. SAAJ 1.4에 대한 자세한 내용은 SOAP with Attachments를 참조하십시오.
SOAP 핸들러를 업데이트하는 동안 시스템 속성 -Djboss.saaj.api.version=1.3
을 설정하여 JBoss EAP 7.3에서 SAAJ 1.3을 사용할 수 있습니다. SOAP 핸들러가 업데이트되면 시스템 속성을 제거하여 기본 기능을 복원합니다.
6.8. Jakarta EE의 Maven Artifact 변경 사항
일부 javax
Maven 아티팩트는 JBoss EAP 7.3용 jakarta
Maven 아티팩트로 교체되었습니다.
JBoss EAP 7.3용 프로젝트를 빌드할 때 new jakarta
Maven 아티팩트로 프로젝트 종속성을 업데이트해야 합니다. 프로젝트 종속성을 업데이트하지 않으면 JBoss EAP 7.3에 대한 프로젝트를 빌드할 때 빌드 오류가 발생합니다. 프로젝트 종속성 관리에 대한 자세한 내용은 개발 가이드 의 프로젝트 종속성 관리를 참조하십시오.
다음 표에는 JBoss EAP 7.3에서 대체한 javax
아티팩트 및 the jakarta
아티팩트가 나와 있습니다.
표 6.2. javax
아티팩트 및 jakarta
아티팩트 교체
javax 아티팩트 | 자카르타 아티팩트 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
com.sun.mail:jakarta.mail
은 자카르타 메일 1.6.4 라이브러리로 제공됩니다. Jakarta Mail 호환성에 대한 자세한 내용은 Eclipse에서 유지 관리하는 호환성 정보를 참조하십시오.
7장. Elytron으로 마이그레이션
7.1. Elytron 개요
JBoss EAP 7.1은 독립 실행형 서버와 관리형 도메인 모두에 대한 액세스를 관리하고 구성할 수 있는 단일 통합 프레임워크를 제공하는 Elytron을 도입했습니다. 또한 JBoss EAP 서버에 배포된 애플리케이션에 대한 보안 액세스를 구성하는 데 사용할 수 있습니다.
PicketBox를 기반으로 하는 Elytron의 아키텍처와 레거시 보안 하위 시스템은 매우 다릅니다. Elytron을 사용하면 현재 운영 중인 동일한 보안 환경에서 운영할 수 있는 솔루션을 만들려는 시도가 이루어졌습니다. 그러나 모든 PicketBox 구성 옵션이 Elytron에서 동등한 구성 옵션을 갖는 것은 아닙니다.
레거시 보안 구현을 사용할 때 보유하고 있는 Elytron을 사용하여 유사한 기능을 달성할 수 있도록 문서에서 정보를 찾을 수 없는 경우 다음 방법 중 하나로 도움을 얻을 수 있습니다.
- Red Hat 개발 서브스크립션이 있는 경우 Red Hat 고객 포털의 지원 사례,솔루션 및 기술 문서에 액세스할 수 있습니다. 또한 기술 지원 케이스를 열고 아래 설명된 대로 WildFly 커뮤니티의 도움을 받을 수 있습니다.
- Red Hat 개발 서브스크립션이 없는 경우에도 Red Hat 고객 포털의 기술 문서에 계속 액세스할 수 있습니다. 사용자 포럼 및 라이브 채팅에 참여하여 WildFly 커뮤니티의 질문을 할 수도 있습니다. WildFly 커뮤니티는 Elytron 엔지니어링 팀이 적극적으로 모니터링합니다.
PicketBox를 기반으로 하는 레거시 보안
하위 시스템을 사용하는 JBoss EAP 7.0 서버 구성 및 배포는 JBoss EAP 7.1 이상에서 변경 없이 실행해야 합니다. Picketbox는 애플리케이션이 기존 로그인 모듈을 계속 사용할 수 있도록 보안 도메인을 계속 지원합니다. 보안에 관리 계층에서 사용하는 보안 영역도 Elytron에서 전달하고 에뮬레이션합니다. 이를 통해 elytron
및 레거시 보안
하위 시스템에서 인증을 정의하고 동시에 사용할 수 있습니다. Elytron 및 레거시 보안을 사용하도록 애플리케이션을 구성하는 방법에 대한 자세한 내용은 JBoss EAP용 ID 관리 구성 방법에서 Elytron 또는 Legacy Security for Authentication을 사용하도록 웹 애플리케이션 구성을 참조하십시오.
PicketBox 인증은 계속 지원되지만 애플리케이션을 마이그레이션할 준비가 되면 Elytron으로 전환하는 것이 좋습니다. Elytron 보안을 사용할 경우의 이점 중 하나는 서버 및 애플리케이션 전체에 일관된 보안 솔루션을 제공한다는 것입니다. Elytron을 사용하도록 PicketBox 인증 및 권한 부여를 마이그레이션하는 방법에 대한 자세한 내용은 이 가이드의 Migrate Authentication Configuration 을 참조하십시오.
elytron
하위 시스템에서 사용할 수 있는 새 리소스에 대한 개요는 JBoss EAP 보안 아키텍처 가이드 의 Elytron 하위 시스템의 리소스를 참조하십시오.
배포에서 레거시 보안
하위 시스템과 Elytron을 모두 사용하도록 선택하는 경우 다른 보안 아키텍처를 사용하는 배포 간 호출은 지원되지 않습니다.
이러한 하위 시스템을 병렬로 사용하는 방법에 대한 자세한 내용은 JBoss EAP용 ID 관리 구성 방법 의 병렬에서 Elytron 및 Legacy Security subsystemss 사용을 참조하십시오.
7.2. 보안 Vault 및 속성 마이그레이션
7.2.1. Vault를 보안 인증 정보 스토리지로 마이그레이션
JBoss EAP 7.0의 레거시 보안
하위 시스템에서 일반 텍스트 문자열 암호화를 저장하는 데 사용된 자격 증명 모음은 새로 설계된 자격 증명 저장소를 사용하여 문자열을 저장하는 JBoss EAP 7.1 이상에서 Elytron과 호환되지 않습니다. 자격 증명은 JBoss EAP 구성 파일 외부의 스토리지 파일에 자격 증명을 안전하게 암호화합니다. Elytron에서 제공하는 구현을 사용하거나 인증 정보 저장소 API 및 SPI를 사용하여 구성을 사용자 지정할 수 있습니다. 각 JBoss EAP 서버에는 여러 자격 증명 저장소가 포함될 수 있습니다.
이전에 vault 표현식을 사용하여 중요하지 않은 데이터를 매개 변수화한 경우 데이터를 Elytron 보안 속성으로 교체하는 것이 좋습니다.
레거시 보안
하위 시스템을 계속 사용하는 경우 자격 증명 모음 데이터를 수정하거나 업데이트할 필요가 없습니다. 그러나 Elytron을 사용하도록 애플리케이션을 마이그레이션하려면 기존 자격 증명 저장소를 자격 증명 저장소로 변환하여 elytron
하위 시스템에서 처리할 수 있어야 합니다. 자격 증명 저장소에 대한 자세한 내용은 JBoss EAP용 서버 보안 구성 방법의 자격 증명 저장소 를 참조하십시오.
WildFly Elytron 도구를 사용하여 Vault 데이터 마이그레이션
WildFly Elytron 툴은 자격 증명 저장소로 자격 증명 모음
콘텐츠를 마이그레이션하는 데 도움이 되는 자격 증명 모음 명령을 제공합니다. EAP_HOME/bin
디렉터리에 있는 elytron-tool
스크립트를 실행하여 툴을 실행합니다.
$ EAP_HOME/bin/elytron-tool.sh vault VAULT_ARGUMENTS
원하는 경우 java -jar
명령을 실행하여 툴을 실행할 수 있습니다.
$ java -jar EAP_HOME/bin/wildfly-elytron-tool.jar vault VAULT_ARGUMENTS
다음 명령을 사용하여 사용 가능한 모든 인수에 대한 설명을 얻을 수 있습니다.
$ EAP_HOME/bin/elytron-tool.sh vault --help
- WildFly Elytron 툴은 첫 번째 버전의 보안 자격 증명 모음 데이터 파일을 처리할 수 없습니다.
-
아래 예에 표시된 대로
--keystore-password
인수를 마스크된 형식으로 입력하여 단일 자격 증명 모음 또는 일반 텍스트로 마이그레이션할 수 있습니다. -
마스크된 암호를 해독하거나 출력에 마스크된 암호를 생성하는 정보를 제공하려면
--salt
및 --iteration--salt
및--iteration
인수를 생략하면 기본값이 사용됩니다. -
summary 인수는
변환된
자격 증명 저장소를 JBoss EAP 구성에 추가하는 데 사용할 수 있는 포맷된 관리 CLI 명령을 생성합니다. 일반 텍스트 암호는 요약 출력에 마스킹됩니다.
자격 증명 저장소는 암호 보안에만 사용할 수 있습니다. 관리 모델 어디에서나 사용할 수 있는 자격 증명 모음 표현식 기능을 지원하지 않습니다.
다음 마이그레이션 옵션 중 하나를 선택합니다.
단일 보안 Vault를 자격 증명 저장소로 마이그레이션
다음은 단일 보안 자격 증명 모음을 자격 증명 저장소로 변환하는 데 사용되는 명령의 예입니다.
$ EAP_HOME/bin/elytron-tool.sh vault --enc-dir vault_data/ --keystore vault-jceks.keystore --keystore-password MASK-2hKo56F1a3jYGnJwhPmiF5 --iteration 34 --salt 12345678 --alias test --location cs-v1.store --summary
이 명령은 보안 자격 증명 저장소로 변환하고, 출력에서 변환하는 데 사용된 관리 CLI 명령 요약을 출력합니다.
Vault (enc-dir="vault_data/";keystore="vault-jceks.keystore") converted to credential store "cs-v1.store" Vault Conversion summary: -------------------------------------- Vault Conversion Successful CLI command to add new credential store: /subsystem=elytron/credential-store=test:add(relative-to=jboss.server.data.dir,create=true,modifiable=true,location="cs-v1.store",implementation-properties={"keyStoreType"=>"JCEKS"},credential-reference={clear-text="MASK-2hKo56F1a3jYGnJwhPmiF5;12345678;34"})
여러 보안 Vault를 대량의 자격 증명 저장소로 마이그레이션
--bulk-convert
인수를 사용하여 자격 증명 저장소로 여러 개의 자격 증명 저장소를 변환하고 대규모 변환 설명자 파일을 가리킬 수 있습니다.
이 섹션의 예제에서는 다음 대규모 변환 설명자 파일을 사용합니다.
예: bulk-vault-conversion-descriptor.txt
파일
keystore:vault-v1/vault-jceks.keystore keystore-password:MASK-2hKo56F1a3jYGnJwhPmiF5 enc-dir:vault-v1/vault_data/ salt:12345678 iteration:34 location:v1-cs-1.store alias:test keystore:vault-v1/vault-jceks.keystore keystore-password:secretsecret enc-dir:vault-v1/vault_data/ location:v1-cs-2.store alias:test # different vault vault-v1-more keystore:vault-v1-more/vault-jceks.keystore keystore-password:MASK-2hKo56F1a3jYGnJwhPmiF5 enc-dir:vault-v1-more/vault_data/ salt:12345678 iteration:34 location:v1-cs-more.store alias:test
새 키 저장소:
행이 발생할 때마다 새 변환이 시작됩니다. salt
,반복
및 속성을
제외하고 모든 옵션이 필수입니다.
대규모 변환을 수행하고 관리 CLI 명령을 포맷하는 출력을 생성하려면 다음 명령을 실행합니다.
$ EAP_HOME/bin/elytron-tool.sh vault --bulk-convert path/to/bulk-vault-conversion-descriptor.txt --summary
이 명령은 파일에 지정된 모든 보안 자격 증명 모음을 자격 증명 저장소로 변환하고 출력에서 이를 변환하는 데 사용된 관리 CLI 명령 요약을 출력합니다.
Vault (enc-dir="vault-v1/vault_data/";keystore="vault-v1/vault-jceks.keystore") converted to credential store "v1-cs-1.store" Vault Conversion summary: -------------------------------------- Vault Conversion Successful CLI command to add new credential store: /subsystem=elytron/credential-store=test:add(relative-to=jboss.server.data.dir,create=true,modifiable=true,location="v1-cs-1.store",implementation-properties={"keyStoreType"=>"JCEKS"},credential-reference={clear-text="MASK-2hKo56F1a3jYGnJwhPmiF5;12345678;34"}) -------------------------------------- Vault (enc-dir="vault-v1/vault_data/";keystore="vault-v1/vault-jceks.keystore") converted to credential store "v1-cs-2.store" Vault Conversion summary: -------------------------------------- Vault Conversion Successful CLI command to add new credential store: /subsystem=elytron/credential-store=test:add(relative-to=jboss.server.data.dir,create=true,modifiable=true,location="v1-cs-2.store",implementation-properties={"keyStoreType"=>"JCEKS"},credential-reference={clear-text="secretsecret"}) -------------------------------------- Vault (enc-dir="vault-v1-more/vault_data/";keystore="vault-v1-more/vault-jceks.keystore") converted to credential store "v1-cs-more.store" Vault Conversion summary: -------------------------------------- Vault Conversion Successful CLI command to add new credential store: /subsystem=elytron/credential-store=test:add(relative-to=jboss.server.data.dir,create=true,modifiable=true,location="v1-cs-more.store",implementation-properties={"keyStoreType"=>"JCEKS"},credential-reference={clear-text="MASK-2hKo56F1a3jYGnJwhPmiF5;12345678;34"}) --------------------------------------
7.2.2. Elytron으로 보안 속성 마이그레이션
이 섹션의 예제에서는 다음과 같이 레거시 보안 하위 시스템에서
group
보안 속성이 .name
및 encoding.algorithmsecurity-properties
로 정의되었다고 가정합니다.
예제: 보안 하위 시스템에 정의된 보안
속성
<subsystem xmlns="urn:jboss:domain:security:2.0"> ... <security-properties> <property name="group.name" value="engineering-group" /> <property name="encoding.algorithm" value="BASE64" /> </security-properties> </subsystem>
elytron
하위 시스템에서 동일한 보안 속성을 정의하려면 다음 관리 CLI 명령을 사용하여 elytron
하위 시스템의 security-properties
특성을 설정합니다.
/subsystem=elytron:write-attribute(name=security-properties, value={ group.name = "engineering-group", encoding.algorithm = "BASE64" })
이렇게 하면 서버 구성 파일의 elytron
하위 시스템에서 다음 security-properties
가 구성됩니다.
<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto"> <security-properties> <security-property name="group.name" value="engineering-group"/> <security-property name="encoding.algorithm" value="BASE64"/> </security-properties> ... </subsystem>
이전 명령에서 사용된 write-attribute
작업은 기존 속성을 덮어씁니다. 다른 보안 속성에 영향을 주지 않고 보안 속성을 추가하거나 변경하려면 관리 CLI 명령에서 map
작업을 사용합니다.
/subsystem=elytron:map-put(name=security-properties, key=group.name, value=technical-support)
마찬가지로 map-remove
작업을 사용하여 특정 보안 속성을 제거할 수 있습니다.
/subsystem=elytron:map-remove(name=security-properties, key=group.name)
7.3. 인증 구성 마이그레이션
7.3.1. 속성 기반 인증 및 권한 부여를 Elytron으로 마이그레이션
7.3.1.1. PicketBox 속성 기반 구성을 Elytron으로 마이그레이션
이 섹션에서는 PicketBox 속성 기반 인증을 Elytron으로 마이그레이션하는 방법에 대해 설명합니다. PicketBox 보안 도메인을 Elytron으로 노출하는 것만으로 속성 기반 인증을 부분적으로 마이그레이션하거나 Elytron을 사용하도록 속성 기반 인증 구성을 완전히 마이그레이션 할 수 있습니다.
다음 절차에서는 마이그레이션할 배포된 웹 애플리케이션이 양식 기반 인증을 요구하도록 구성되어 있다고 가정합니다. 애플리케이션은 PicketBox 보안 도메인을 참조하며 UsersRolesLoginModule
을 사용하여 example-users.properties 및
파일에서 사용자 정보를 로드합니다. 또한 보안 도메인은 다음 관리 CLI 명령을 사용하여 레거시 example-roles.properties
보안
하위 시스템에 정의되어 있다고 가정합니다.
예제: Picketbox 속성 기반 구성 명령
/subsystem=security/security-domain=application-security:add /subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[{code=UsersRoles, flag=Required, module-options={usersProperties=file://${jboss.server.config.dir}/example-users.properties, rolesProperties=file://${jboss.server.config.dir}/example-roles.properties}}])
이렇게 하면 다음과 같은 서버 구성이 생성됩니다.
예제: Picketbox 속성 기반 보안 도메인 구성
<security-domain name="application-security"> <authentication> <login-module code="UsersRoles" flag="required"> <module-option name="usersProperties" value="file://${jboss.server.config.dir}/example-users.properties"/> <module-option name="rolesProperties" value="file://${jboss.server.config.dir}/example-roles.properties"/> </login-module> </authentication> </security-domain>
다음 마이그레이션 옵션 중 하나를 선택합니다.
Elytron으로 PicketBox 보안 도메인을 노출하여 부분적으로 마이그레이션
PicketBox 보안 도메인을 Elytron 보안 영역으로 노출하여 Elytron 구성에 연결할 수 있지만, 이렇게 하면 레거시 보안
하위 시스템에 종속됩니다. 속성 기반 인증만 마이그레이션하는 경우 레거시 보안
하위 시스템에 불필요한 종속성 을 피하기 위해 애플리케이션을 Elytron으로 완전히 마이그레이션하는 것이 좋습니다. 그러나 Elytron을 사용하도록 애플리케이션을 완전히 마이그레이션할 수 없는 경우 부분적인 마이그레이션이 중간 솔루션일 수 있습니다.
기존 PicketBox 보안 영역 구성을 Elytron 보안 영역으로 추가하려면 다음 절차를 따르십시오.
레거시 보안
하위 시스템에서
Elytron 보안 영역에 매핑을 추가합니다./subsystem=security/elytron-realm=application-security:add(legacy-jaas-config=application-security)
이렇게 하면 서버 구성 파일의 보안 하위 시스템에서 다음 Elytron
보안
영역이 구성됩니다.<subsystem xmlns="urn:jboss:domain:security:2.0"> ... <elytron-integration> <security-realms> <elytron-realm name="application-security" legacy-jaas-config="application-security"/> </security-realms> </elytron-integration> ... </subsystem>
내보낸 보안 영역을 참조하는
elytron
하위 시스템에서 보안 도메인을 정의합니다./subsystem=elytron/security-domain=application-security:add(realms=[{realm=application-security}], default-realm=application-security, permission-mapper=default-permission-mapper)
이렇게 하면 서버 구성 파일에 다음과 같은
elytron
하위 시스템 구성이 생성됩니다.<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto"> ... <security-domains> ... <security-domain name="application-security" default-realm="application-security" permission-mapper="default-permission-mapper"> <realm name="application-security"/> </security-domain> </security-domains> ... </subsystem>
undertow 하위 시스템에서
배포에서 참조하는 애플리케이션 보안 도메인을 새로 정의된 보안 도메인에 매핑합니다./subsystem=undertow/application-security-domain=application-security:add(security-domain=application-security)
이렇게 하면 서버 구성 파일에서 다음
undertow
하위 시스템 구성이 생성됩니다.<subsystem xmlns="urn:wildfly:elytron:4.0"> ... <application-security-domains> <application-security-domain name="application-security" security-domain="application-security"/> </application-security-domains> ... </subsystem>
참고- 이 구성 전에 애플리케이션이 이미 배포된 경우 서버를 다시 로드하거나 새 애플리케이션 보안 도메인 매핑을 위해 애플리케이션을 다시 배포해야 합니다.
- 현재 웹 서비스-Elytron 통합에서 웹 서비스 엔드포인트와 Elytron 보안 도메인 이름을 보호하기 위해 지정된 보안 도메인의 이름은 동일해야 합니다.
다음 관리 CLI 명령을 사용하여 매핑이 배포에 적용되었는지 확인합니다. 이 예에서 사용된 배포는
HelloWorld.war
입니다. 이 명령의 출력은 이 배포가 Elytron 매핑을 참조함을 보여줍니다./subsystem=undertow/application-security-domain=application-security:read-resource(include-runtime=true) { "outcome" => "success", "result" => { "enable-jacc" => false, "http-authentication-factory" => undefined, "override-deployment-config" => false, "referencing-deployments" => ["HelloWorld.war"], "security-domain" => "application-security", "setting" => undefined } }
이 단계에서 이전에 정의한 보안 도메인은 LoginModule
구성에 사용되지만 인증을 대신하는 Elytron 구성 요소로 래핑됩니다.
Elytron으로 속성 기반 인증 완전히 마이그레이션
PicketBox 속성 기반 인증을 Elytron으로 완전히 마이그레이션하려면 다음 단계를 따르십시오. 이 절차에서는 이 섹션 소개에 설명된 레거시 구성을 시작하고 부분적으로 마이그레이션된 솔루션으로 마이그레이션 하지 않은 것으로 가정합니다. 이 프로세스를 완료하면 레거시 보안 하위 시스템에 존재하는 모든 보안
도메인 정의는 Elytron 구성과 완전히 독립적입니다.
PicketBox 속성 파일을 참조하는
elytron
하위 시스템에서 새 보안 영역을 정의합니다./subsystem=elytron/properties-realm=application-properties:add(users-properties={path=example-users.properties, relative-to=jboss.server.config.dir, plain-text=true, digest-realm-name="Application Security"}, groups-properties={path=example-roles.properties, relative-to=jboss.server.config.dir}, groups-attribute=Roles)
elytron
하위 시스템에서 보안 도메인 하위 시스템을 정의합니다./subsystem=elytron/security-domain=application-security:add(realms=[{realm=application-properties}], default-realm=application-properties, permission-mapper=default-permission-mapper)
이렇게 하면 서버 구성 파일에 다음과 같은
elytron
하위 시스템 구성이 생성됩니다.<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto"> ... <security-domains> ... <security-domain name="application-security" default-realm="application-properties" permission-mapper="default-permission-mapper"> <realm name="application-properties"/> </security-domain> </security-domains> <security-realms> ... <properties-realm name="application-properties" groups-attribute="Roles"> <users-properties path="example-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="Application Security" plain-text="true"/> <groups-properties path="example-roles.properties" relative-to="jboss.server.config.dir"/> </properties-realm> </security-realms> ... </subsystem>
배포에서 참조하는 애플리케이션 보안 도메인을
undertow
하위 시스템의 새로 정의된 HTTP 인증 팩토리에 매핑합니다./subsystem=undertow/application-security-domain=application-security:add(security-domain=application-security)
이렇게 하면 서버 구성 파일에서 다음
undertow
하위 시스템 구성이 생성됩니다.<subsystem xmlns="urn:jboss:domain:undertow:10.0"> ... <application-security-domains> <application-security-domain name="application-security" security-domain="application-security"/> </application-security-domains> ... </subsystem>
참고현재 웹 서비스-Elytron 통합에서 웹 서비스 엔드포인트와 Elytron 보안 도메인 이름을 보호하기 위해 지정된 보안 도메인의 이름은 동일해야 합니다.
- 서버를 다시 로드하거나 새 애플리케이션 보안 도메인 매핑을 적용하려면 애플리케이션을 다시 배포해야 합니다.
인증은 이제 PicketBox 구성과 동일하게 구성되지만 이제 Elytron 구성 요소는 인증에만 사용됩니다.
7.3.1.2. 레거시 속성 기반 구성을 Elytron으로 마이그레이션
이 섹션에서는 사용자, 암호 및 그룹 정보를 속성 파일에서 Elytron으로 로드하는 레거시 보안 영역을 마이그레이션하는 방법에 대해 설명합니다. 이러한 유형의 레거시 보안 영역은 일반적으로 관리 인터페이스를 보안하거나 커넥터를 제거하는 데 사용됩니다.
이 예제에서는 레거시 보안 도메인을 다음 관리 CLI 명령을 사용하여 정의한다고 가정합니다.
예제: 레거시 보안 영역 명령
/core-service=management/security-realm=ApplicationSecurity:add /core-service=management/security-realm=ApplicationSecurity/authentication=properties:add(relative-to=jboss.server.config.dir, path=example-users.properties, plain-text=true) /core-service=management/security-realm=ApplicationSecurity/authorization=properties:add(relative-to=jboss.server.config.dir, path=example-roles.properties)
이렇게 하면 다음과 같은 서버 구성이 생성됩니다.
예제: 레거시 보안 영역 구성
<security-realm name="ApplicationSecurity"> <authentication> <properties path="example-users.properties" relative-to="jboss.server.config.dir" plain-text="true"/> </authentication> <authorization> <properties path="example-roles.properties" relative-to="jboss.server.config.dir"/> </authorization> </security-realm>
Elytron 보안을 애플리케이션 서버에 추가하려는 동기 중 하나는 서버 전반에서 일관된 보안 솔루션을 사용하는 것입니다. 속성 기반 레거시 보안 영역을 Elytron으로 마이그레이션하는 초기 단계는 PicketBox 속성 기반 인증을 Elytron으로 마이그레이션하는 데 사용되는 것과 유사합니다. 속성 기반 레거시 보안 영역을 Elytron으로 마이그레이션하려면 다음 단계를 따르십시오.
속성 파일을 참조하는
elytron
하위 시스템에서 새 보안 영역을 정의합니다./subsystem=elytron/properties-realm=application-properties:add(users-properties={path=example-users.properties, relative-to=jboss.server.config.dir, plain-text=true, digest-realm-name="Application Security"}, groups-properties={path=example-roles.properties, relative-to=jboss.server.config.dir}, groups-attribute=Roles)
elytron
하위 시스템에서 보안 도메인 하위 시스템을 정의합니다./subsystem=elytron/security-domain=application-security:add(realms=[{realm=application-properties}], default-realm=application-properties, permission-mapper=default-permission-mapper)
그러면 다음과 같은 Elytron 구성이 생성됩니다.
<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto"> ... <security-domains> ... <security-domain name="application-security" default-realm="application-properties" permission-mapper="default-permission-mapper"> <realm name="application-properties"/> </security-domain> </security-domains> <security-realms> ... <properties-realm name="application-properties" groups-attribute="Roles"> <users-properties path="example-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="Application Security" plain-text="true"/> <groups-properties path="example-roles.properties" relative-to="jboss.server.config.dir"/> </properties-realm> </security-realms> ... </subsystem>
레거시 보안 영역을 SASL(Simple Authentication Security Layer) 인증에도 사용할 수 있도록 a
sasl-authentication-factory
를 정의합니다./subsystem=elytron/sasl-authentication-factory=application-security-sasl:add(sasl-server-factory=elytron, security-domain=application-security, mechanism-configurations=[{mechanism-name=PLAIN}])
그러면 다음과 같은 Elytron 구성이 생성됩니다.
<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto"> ... <sasl> ... <sasl-authentication-factory name="application-security-sasl" sasl-server-factory="elytron" security-domain="application-security"> <mechanism-configuration> <mechanism mechanism-name="PLAIN"/> </mechanism-configuration> </sasl-authentication-factory> ... </sasl> </subsystem>
SASL 인증에 사용할 원격 커넥터를 구성하고 레거시 보안 영역과의 연결을 제거합니다.
/subsystem=remoting/http-connector=http-remoting-connector:write-attribute(name=sasl-authentication-factory, value=application-security-sasl) /subsystem=remoting/http-connector=http-remoting-connector:undefine-attribute(name=security-realm)
그러면 서버 구성 파일의
리모팅
하위 시스템에서 다음 구성이 생성됩니다.<subsystem xmlns="urn:jboss:domain:remoting:4.0"> ... <http-connector name="http-remoting-connector" connector-ref="default" sasl-authentication-factory="application-security-sasl"/> </subsystem>
두 개의 인증 팩토리를 추가하고 레거시 보안 영역 참조를 제거하여 Elytron으로
http-interface
를 보호합니다./core-service=management/management-interface=http-interface:write-attribute(name=http-authentication-factory, value=application-security-http) /core-service=management/management-interface=http-interface:write-attribute(name=http-upgrade.sasl-authentication-factory, value=application-security-sasl) /core-service=management/management-interface=http-interface:undefine-attribute(name=security-realm)
이렇게 하면 다음 구성이 생성됩니다.
<management-interfaces> <http-interface http-authentication-factory="application-security-http"> <http-upgrade enabled="true" sasl-authentication-factory="application-security-sasl"/> <socket-binding http="management-http"/> </http-interface> </management-interfaces>
참고관리 인터페이스를 보호할 때 이러한 예에서 사용되는 이름보다 더 적합한 이름을 선택해야 합니다.
레거시 속성 기반 구성을 Elytron으로 마이그레이션하는 작업이 이제 완료되었습니다.
7.3.2. filesystem-realm 명령을 사용하여 파일 시스템 기반 보안 영역으로 마이그레이션
이 섹션에서는 elytron.sh
툴의 filesystem-realm
명령을 사용하여 레거시 속성 기반 보안 영역을 Elytron의 파일 시스템 기반 영역으로 마이그레이션하는 방법에 대해 설명합니다.
파일 시스템 기반 영역은 Elytron에서 사용자 ID를 저장하는 데 사용하는 파일 시스템 기반 ID 저장소입니다. filesystem-realm
명령은 properties-realm
파일을 filesystem-realm
으로 변환합니다. 또한 이 영역과 보안 도메인을 elytron
하위 시스템에 추가하는 명령을 생성합니다.
속성 기반 인증을 파일 시스템 기반 인증으로 마이그레이션하는 단계는 다음과 같습니다.
속성 파일을 마이그레이션합니다.
한 번에 단일 사용자 속성 파일을 마이그레이션하거나 속성 파일을 대량으로 마이그레이션할 수 있습니다. 다음 예제에서는 두 유형의 마이그레이션 모두에 대한 절차를 보여줍니다.
단일 속성 파일 마이그레이션.
다음 예제에서는 관련 roles-properties 파일이 있는 단일 users-properties 파일을
filesystem-realm
으로 변환합니다. 이 예제에서는 레거시 보안 도메인에 다음과 같은 사용자 속성 및 역할 속성 파일이 있다고 가정합니다.example-users.properties example-roles.properties
예제: 단일 사용자 속성 파일 마이그레이션
$./bin/elytron-tool.sh filesystem-realm --users-file example-users.properties --roles-file example-roles.properties --output-location realms/example
이렇게 하면 filesystem-realm 파일과 관리 CLI 명령이 포함된 스크립트가 생성됩니다. 스크립트는 realms/example 디렉터리에 저장됩니다.
여러 속성 파일 마이그레이션.
다음 예제에서는 대량으로 관련 roles-properties 파일이 있는 users-properties 파일을
filesystem-realm
으로 변환합니다. 이 예제에서는 레거시 보안 도메인에 다음과 같은 속성 파일이 있다고 가정합니다.users-1.properties users-2.properties roles-1.properties roles-2.properties
user-roles 파일을 대규모로 변환하려면
filesystem-realm
명령과 함께 사용할 설명자 파일을 만들어야 합니다. 이 예에서는/bin
디렉터리에 있는 설명자 파일example-descriptor-file
이 다음 콘텐츠를 사용하여 생성됩니다.예: 설명자 파일
users-file:/full/path/to/users-1.properties roles-file:/full/path/to/roles-1.properties output-location:./realms/bulk-1-example filesystem-realm-name:exampleFileSystemRealm1 security-domain-name:exampleSecurityDomain1 users-file:/full/path/to/users-2.properties roles-file:/full/path/to/roles-2.properties output-location:./realms/bulk-2-example filesystem-realm-name:exampleFileSystemRealm2 security-domain-name:exampleSecurityDomain2
설명자 파일의 빈 줄은 각 users-properties 파일의 작업을 구분하는 데 사용됩니다.
다음 예제에서는 설명자 파일을 사용하여 관련 roles-properties 파일이 있는 두 개의 사용자 속성 파일을
filesystem-realm
으로 변환합니다.예제: 대규모 마이그레이션
$./bin/elytron-tool.sh filesystem-realm --bulk-convert example-descriptor-file
이렇게 하면 관리 CLI 명령이 포함된
filesystem-realm
파일 및 스크립트가 생성됩니다. 스크립트는 설명자 파일의output-location
특성에 지정된 디렉터리에 저장됩니다.
파일 시스템 보안 영역을 Elytron에 추가합니다.
파일을 마이그레이션한 후 Elytron 툴에서 생성한 CLI 명령을 사용하여 새 보안 영역 및 보안 도메인을
elytron
하위 시스템에 추가합니다.예제: filesystem-realm 추가
/subsystem=elytron/filesystem-realm=converted-properties-filesystem-realm:add(path=/full/path/to/realms/example) /subsystem=elytron/security-domain=converted-properties-security-domain:add(realms=[{realm=converted-properties-filesystem-realm}],default-realm=converted-properties-filesystem-realm,permission-mapper=default-permission-mapper)
7.3.3. Elytron으로 LDAP 인증 구성 마이그레이션
이 섹션에서는 정보를 ID 속성으로 관리할 수 있도록 레거시 LDAP 인증을 Elytron으로 마이그레이션하는 방법에 대해 설명합니다. Migrate Properties-based Authentication and Authorization to Elytron(속성 기반 인증 및 권한 부여 ) 섹션에 제공된 대부분의 정보는 특히 보안 도메인 및 인증 팩토리를 정의하는 방법과 인증에 사용할 매핑 방법에 대해 여기에 적용됩니다. 이 섹션에서는 해당 지침을 반복하지 않으므로 계속하기 전에 해당 섹션을 읽어 보십시오.
다음 예제에서는 그룹 또는 역할 정보가 LDAP에서 직접 로드되고 레거시 LDAP 인증이 다음과 같이 구성되어 있다고 가정합니다.
LDAP 서버에는 다음 사용자 및 그룹 항목이 포함되어 있습니다.
예제: LDAP 서버 사용자 항목
dn: uid=TestUserOne,ou=users,dc=group-to-principal,dc=wildfly,dc=org objectClass: top objectClass: inetOrgPerson objectClass: uidObject objectClass: person objectClass: organizationalPerson cn: Test User One sn: Test User One uid: TestUserOne userPassword: {SSHA}UG8ov2rnrnBKakcARVvraZHqTa7mFWJZlWt2HA==
예제: LDAP 서버 그룹 항목
dn: uid=GroupOne,ou=groups,dc=group-to-principal,dc=wildfly,dc=org objectClass: top objectClass: groupOfUniqueNames objectClass: uidObject cn: Group One uid: GroupOne uniqueMember: uid=TestUserOne,ou=users,dc=group-to-principal,dc=wildfly,dc=org
인증을 위해 사용자 이름은
uid
속성과 일치하며 결과 그룹 이름은 그룹 항목의uid
속성에서 가져옵니다.LDAP 서버 및 관련 보안 영역에 대한 연결은 다음 관리 CLI 명령을 사용하여 정의합니다.
예제: LDAP 보안 영역 구성 명령
batch /core-service=management/ldap-connection=MyLdapConnection:add(url="ldap://localhost:10389", search-dn="uid=admin,ou=system", search-credential="secret") /core-service=management/security-realm=LDAPRealm:add /core-service=management/security-realm=LDAPRealm/authentication=ldap:add(connection="MyLdapConnection", username-attribute=uid, base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org") /core-service=management/security-realm=LDAPRealm/authorization=ldap:add(connection=MyLdapConnection) /core-service=management/security-realm=LDAPRealm/authorization=ldap/username-to-dn=username-filter:add(attribute=uid, base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org") /core-service=management/security-realm=LDAPRealm/authorization=ldap/group-search=group-to-principal:add(base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org", iterative=true, prefer-original-connection=true, principal-attribute=uniqueMember, search-by=DISTINGUISHED_NAME, group-name=SIMPLE, group-name-attribute=uid) run-batch
이렇게 하면 다음과 같은 서버 구성이 생성됩니다.
예제: LDAP 보안 영역 설정
<management> <security-realms> ... <security-realm name="LDAPRealm"> <authentication> <ldap connection="MyLdapConnection" base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org"> <username-filter attribute="uid"/> </ldap> </authentication> <authorization> <ldap connection="MyLdapConnection"> <username-to-dn> <username-filter base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org" attribute="uid"/> </username-to-dn> <group-search group-name="SIMPLE" iterative="true" group-name-attribute="uid"> <group-to-principal search-by="DISTINGUISHED_NAME" base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org" prefer-original-connection="true"> <membership-filter principal-attribute="uniqueMember"/> </group-to-principal> </group-search> </ldap> </authorization> </security-realm> </security-realms> <outbound-connections> <ldap name="MyLdapConnection" url="ldap://localhost:10389" search-dn="uid=admin,ou=system" search-credential="secret"/> </outbound-connections> ... </management>
다음 관리 CLI 명령은
LdapExtLoginModule
을 사용하여 사용자 이름과 암호를 확인하는 PicketBox 보안 도메인을 구성하는 데 사용됩니다.예제: 보안 도메인 구성 명령
/subsystem=security/security-domain=application-security:add /subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[{code=LdapExtended, flag=Required, module-options={ java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.provider.url=ldap://localhost:10389, java.naming.security.authentication=simple, bindDN="uid=admin,ou=system", bindCredential=secret, baseCtxDN="ou=users,dc=group-to-principal,dc=wildfly,dc=org", baseFilter="(uid={0})", rolesCtxDN="ou=groups,dc=group-to-principal,dc=wildfly,dc=org", roleFilter="(uniqueMember={1})", roleAttributeID="uid" }}])
이렇게 하면 다음과 같은 서버 구성이 생성됩니다.
예제: 보안 도메인 구성
<subsystem xmlns="urn:jboss:domain:security:2.0"> ... <security-domains> ... <security-domain name="application-security"> <authentication> <login-module code="LdapExtended" flag="required"> <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/> <module-option name="java.naming.provider.url" value="ldap://localhost:10389"/> <module-option name="java.naming.security.authentication" value="simple"/> <module-option name="bindDN" value="uid=admin,ou=system"/> <module-option name="bindCredential" value="secret"/> <module-option name="baseCtxDN" value="ou=users,dc=group-to-principal,dc=wildfly,dc=org"/> <module-option name="baseFilter" value="(uid={0})"/> <module-option name="rolesCtxDN" value="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/> <module-option name="roleFilter" value="(uniqueMember={1})"/> <module-option name="roleAttributeID" value="uid"/> </login-module> </authentication> </security-domain> </security-domains> </subsystem>
7.3.3.1. 레거시 LDAP 인증을 Elytron으로 마이그레이션
다음 단계에 따라 이전 LDAP 인증 예제 구성을 Elytron으로 마이그레이션합니다. 이 섹션은 레거시 보안 LDAP 영역과 PicketBox LDAP 보안 도메인 의 마이그레이션에 적용됩니다.
elytron
하위 시스템에서 LDAP에 대한 연결을 정의합니다./subsystem=elytron/dir-context=ldap-connection:add(url=ldap://localhost:10389, principal="uid=admin, ou=system", credential-reference={clear-text=secret})
보안 영역을 생성하여 LDAP를 검색하고 제공된 암호를 확인합니다.
/subsystem=elytron/ldap-realm=ldap-realm:add(dir-context=ldap-connection, direct-verification=true, identity-mapping={search-base-dn="ou=users, dc=group-to-principal, dc=wildfly, dc=org", rdn-identifier="uid", attribute-mapping=[{filter-base-dn="ou=groups, dc=group-to-principal, dc=wildfly, dc=org", filter="(uniqueMember={1})", from="uid", to="Roles"}]})
이러한 단계를 수행하면 서버 구성 파일에서 다음과 같은 elytron
하위 시스템 구성이 생성됩니다.
<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto"> ... <security-realms> ... <ldap-realm name="ldap-realm" dir-context="ldap-connection" direct-verification="true"> <identity-mapping rdn-identifier="uid" search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org"> <attribute-mapping> <attribute from="uid" to="Roles" filter="(uniqueMember={1})" filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/> </attribute-mapping> </identity-mapping> </ldap-realm> </security-realms> ... <dir-contexts> <dir-context name="ldap-connection" url="ldap://localhost:10389" principal="uid=admin,ou=system"> <credential-reference clear-text="secret"/> </dir-context> </dir-contexts> </subsystem>
기본적으로 제공된 security
가 정의되지 않은 경우 "Roles" ID 특성은 ID 역할에 매핑됩니다.
-domain
에 대해 role-decoder
이제 LDAP에서 로드된 정보를 속성으로 ID와 연결할 수 있습니다. 이러한 속성은 역할에 매핑할 수 있지만, 다른 용도로 로드하고 사용할 수도 있습니다. 새로 생성된 보안 영역은 이 가이드의 Elytron 섹션에 속성 기반 인증 및 권한 부여 섹션에 설명된 것과 동일한 방식으로 보안 도메인에서 사용할 수 있습니다.
7.3.4. 데이터베이스 인증 구성을 Elytron으로 마이그레이션
이 섹션에서는 JDBC 데이터 소스 기반 PicketBox 인증을 Elytron으로 마이그레이션하는 방법에 대해 설명합니다. Migrate Properties-based Authentication and Authorization to Elytron(속성 기반 인증 및 권한 부여 ) 섹션에 제공된 대부분의 정보는 특히 보안 도메인 및 인증 팩토리를 정의하는 방법과 인증에 사용할 매핑 방법에 대해 여기에 적용됩니다. 이 섹션에서는 해당 지침을 반복하지 않으므로 계속하기 전에 해당 섹션을 읽어 보십시오.
다음 예제에서는 사용자 인증 데이터가 다음 예제와 유사한 구문을 사용하여 생성된 데이터베이스 테이블에 저장되어 있다고 가정합니다.
예제: 데이터베이스 사용자 테이블을 생성하는 구문
CREATE TABLE User ( id BIGINT NOT NULL, username VARCHAR(255), password VARCHAR(255), role ENUM('admin', 'manager', 'user'), PRIMARY KEY (id), UNIQUE (username) )
인증을 위해 사용자 이름은 사용자 이름
열에 저장된 데이터와 일치하며 암호는 password 열에 16진수로 인코딩된 MD5 해시로 저장되고 권한 부여 목적으로 사용자
역할은 역할
열에 저장됩니다.
PicketBox 보안 도메인은 JBDC 데이터 소스를 사용하여 데이터베이스 테이블에서 데이터를 검색한 다음, 사용자 이름과 암호를 확인하고 역할을 할당하도록 구성됩니다. PicketBox 보안 도메인이 다음 관리 CLI 명령을 사용하여 구성되었다고 가정합니다.
예제: Picketbox 데이터베이스 LoginModule 구성 명령
/subsystem=security/security-domain=application-security:add /subsystem=security/security-domain=application-security/authentication=classic:add( login-modules=[ { code=Database, flag=Required, module-options={ dsJndiName="java:jboss/datasources/ExampleDS", principalsQuery="SELECT password FROM User WHERE username = ?", rolesQuery="SELECT role, 'Roles' FROM User WHERE username = ?", hashAlgorithm=MD5, hashEncoding=base64 } } ] )
그러면 레거시 보안
하위 시스템에서 다음과 같은 로그인 모듈
구성이 생성됩니다.
예제: Picketbox LoginModule 구성
<subsystem xmlns="urn:jboss:domain:security:2.0"> <security-domains> ... <security-domain name="application-security"> <authentication> <login-module code="Database" flag="required"> <module-option name="dsJndiName" value="java:jboss/datasources/ExampleDS"/> <module-option name="principalsQuery" value="SELECT password FROM User WHERE username = ?"/> <module-option name="rolesQuery" value="SELECT role, 'Roles' FROM User WHERE username = ?"/> <module-option name="hashAlgorithm" value="MD5"/> <module-option name="hashEncoding" value="base64"/> </login-module> </authentication> </security-domain> </security-domains> </subsystem>
7.3.4.1. 레거시 데이터베이스 인증에서 Elytron으로 마이그레이션
이전 데이터베이스 인증 예제 구성을 Elytron으로 마이그레이션하려면 Elytron에서 JDBC 데이터 소스 액세스를 활성화하도록 JDBC 영역을 정의해야 합니다.
다음 관리 명령을 사용하여 the jdbc-realm
을 정의합니다.
/subsystem=elytron/jdbc-realm=jdbc-realm:add(principal-query=[ { data-source=ExampleDS, sql="SELECT role, password FROM User WHERE username = ?", attribute-mapping=[{index=1, to=Roles } ] simple-digest-mapper={algorithm=simple-digest-md5, password-index=2} } ] )
그러면 서버 구성 파일의 elytron
하위 시스템에서 다음 jdbc-realm
구성이 생성됩니다.
<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto"> ... <security-realms> ... <jdbc-realm name="jdbc-realm"> <principal-query sql="SELECT role, password FROM User WHERE username = ?" data-source="ExampleDS"> <attribute-mapping> <attribute to="Roles" index="1"/> </attribute-mapping> <simple-digest-mapper password-index="2"/> </principal-query> </jdbc-realm> ... </security-realms> ... </subsystem>
Elytron은 이제 JDBC 영역 구성을 사용하여 데이터베이스 인증을 관리합니다. Elytron은 하나의 SQL 쿼리를 사용하여 모든 사용자 속성과 자격 증명을 획득한 다음 SQL 결과에서 데이터를 추출하고 인증에 사용할 속성의 매핑을 생성하기 때문에 PicketBox보다 효율적입니다.
7.3.5. Elytron으로 Kerberos 인증 마이그레이션
Kerberos 구성으로 작업하는 경우 JBoss EAP 서버는 환경의 구성 정보를 사용하거나 시스템 속성을 사용하여 키 구성을 지정할 수 있습니다. 이 섹션에서는 Kerberos HTTP 및 Kerberos SASL 인증을 마이그레이션하는 방법에 대해 설명합니다.
다음 예제에서는 다음 시스템 속성을 사용하여 Kerberos가 구성되어 있다고 가정합니다. 이러한 시스템 속성은 레거시 구성과 마이그레이션된 Elytron 구성에 모두 적용할 수 있습니다.
예제: Kerberos 시스템 속성 관리 CLI 명령
# Enable debugging /system-property=sun.security.krb5.debug:add(value=true) # Identify the Kerberos realm to use /system-property=java.security.krb5.realm:add(value=ELYTRON.ORG) # Identify the address of the KDC /system-property=java.security.krb5.kdc:add(value=kdc.elytron.org)
예제: Kerberos 시스템 속성 서버 구성
<system-properties> <property name="sun.security.krb5.debug" value="true"/> <property name="java.security.krb5.realm" value="ELYTRON.ORG"/> <property name="java.security.krb5.kdc" value="kdc.elytron.org"/> </system-properties>
다음 마이그레이션 옵션 중 하나를 선택합니다.
- Kerberos HTTP 인증 마이그레이션.
- Kerberos 원격 SASL 인증 마이그레이션.
Kerberos HTTP 인증 마이그레이션
레거시 보안 구성에서는 다음과 같이 HTTP 관리 인터페이스에 대해 SPNEGO 인증을 활성화하도록 보안 영역을 정의할 수 있습니다.
예제: HTTP 관리 인터페이스에 대해 SPNEGO 인증 활성화
/core-service=management/security-realm=Kerberos:add
/core-service=management/security-realm=Kerberos/server-identity=kerberos:add
/core-service=management/security-realm=Kerberos/server-identity=kerberos/keytab=HTTP\/test-server.elytron.org@ELYTRON.ORG:add(path=/path/to/test-server.keytab, debug=true)
/core-service=management/security-realm=Kerberos/authentication=kerberos:add(remove-realm=true)
예제: Kerberos 보안 영역 설정
<security-realms>
...
<security-realm name="Kerberos">
<server-identities>
<kerberos>
<keytab principal="HTTP/test-server.elytron.org@ELYTRON.ORG" path="/path/to/test-server.keytab" debug="true"/>
</kerberos>
</server-identities>
<authentication>
<kerberos remove-realm="true"/>
</authentication>
</security-realm>
</security-realms>
애플리케이션이 Kerberos HTTP 인증을 사용할 수 있도록 레거시 보안 도메인 쌍을 정의할 수도 있습니다.
예제: 여러 보안 도메인 정의
# Define the first security domain /subsystem=security/security-domain=host:add /subsystem=security/security-domain=host/authentication=classic:add /subsystem=security/security-domain=host/authentication=classic/login-module=1:add(code=Kerberos, flag=Required, module-options={storeKey=true, useKeyTab=true, principal=HTTP/test-server.elytron.org@ELYTRON.ORG, keyTab=path/to/test-server.keytab, debug=true} # Define the second SPNEGO security domain /subsystem=security/security-domain=SPNEGO:add /subsystem=security/security-domain=SPNEGO/authentication=classic:add /subsystem=security/security-domain=SPNEGO/authentication=classic/login-module=1:add(code=SPNEGO, flag=requisite, module-options={password-stacking=useFirstPass, serverSecurityDomain=host}) /subsystem=security/security-domain=SPNEGO/authentication=classic/login-module=1:write-attribute(name=module, value=org.jboss.security.negotiation) /subsystem=security/security-domain=SPNEGO/authentication=classic/login-module=2:add(code=UsersRoles, flag=required, module-options={password-stacking=useFirstPass, usersProperties= /path/to/kerberos/spnego-users.properties, rolesProperties= /path/to/kerberos/spnego-roles.properties, defaultUsersProperties= /path/to/kerberos/spnego-users.properties, defaultRolesProperties= /path/to/kerberos/spnego-roles.properties})
예제: 보안 도메인 쌍을 사용한 구성
<subsystem xmlns="urn:jboss:domain:security:2.0"> <security-domains> ... <security-domain name="host"> <authentication> <login-module name="1" code="Kerberos" flag="required"> <module-option name="storeKey" value="true"/> <module-option name="useKeyTab" value="true"/> <module-option name="principal" value="HTTP/test-server.elytron.org@ELYTRON.ORG"/> <module-option name="keyTab" value="/path/to/test-server.keytab"/> <module-option name="debug" value="true"/> </login-module> </authentication> </security-domain> <security-domain name="SPNEGO"> <authentication> <login-module name="1" code="SPNEGO" flag="requisite" module="org.jboss.security.negotiation"> <module-option name="password-stacking" value="useFirstPass"/> <module-option name="serverSecurityDomain" value="host"/> </login-module> <login-module name="2" code="UsersRoles" flag="required"> <module-option name="password-stacking" value="useFirstPass"/> <module-option name="usersProperties" value="path/to/kerberos/spnego-users.properties"/> <module-option name="rolesProperties" value=" /path/to/kerberos/spnego-roles.properties"/> <module-option name="defaultUsersProperties" value=" /path/to/kerberos/spnego-users.properties"/> <module-option name="defaultRolesProperties" value=" /path/to/kerberos/spnego-roles.properties"/> </login-module> </authentication> </security-domain> </security-domains> </subsystem>
그런 다음 레거시 애플리케이션은 SPNEGO 보안 도메인을 참조하고 SPNEGO 메커니즘으로 보호됩니다.
Kerberos HTTP 인증을 Elytron으로 마이그레이션
보안 영역과 Kerberos 보안 팩토리를 사용하여 관리 인터페이스와 애플리케이션 모두를 Elytron에서 보호할 수 있습니다.
ID 정보를 로드하는 데 사용할 보안 영역을 정의합니다.
/subsystem=elytron/properties-realm=spnego-properties:add(users-properties={path=path/to/spnego-users.properties, plain-text=true, digest-realm-name=ELYTRON.ORG}, groups-properties={path=path/to/spnego-roles.properties})
서버가 자체 Kerberos ID를 로드할 수 있는 Kerberos 보안 팩토리를 정의합니다.
/subsystem=elytron/kerberos-security-factory=test-server:add(path=path/to/test-server.keytab, principal=HTTP/test-server.elytron.org@ELYTRON.ORG, debug=true)
보안 도메인을 정의하여 정책과 인증 정책에 대한 HTTP 인증 팩토리를 함께 가져옵니다.
/subsystem=elytron/security-domain=SPNEGODomain:add(default-realm=spnego-properties, realms=[{realm=spnego-properties, role-decoder=groups-to-roles}], permission-mapper=default-permission-mapper) /subsystem=elytron/http-authentication-factory=spnego-http-authentication:add(security-domain=SPNEGODomain, http-server-mechanism-factory=global,mechanism-configurations=[{mechanism-name=SPNEGO, credential-security-factory=test-server}])
이렇게 하면 서버 구성 파일의
elytron
하위 시스템에서 다음 구성이 생성됩니다.예제: 마이그레이션된 Elytron 구성
<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto"> ... <security-domains> ... <security-domain name="SPNEGODomain" default-realm="spnego-properties" permission-mapper="default-permission-mapper"> <realm name="spnego-properties" role-decoder="groups-to-roles"/> </security-domain> </security-domains> <security-realms> ... <properties-realm name="spnego-properties"> <users-properties path="path/to/spnego-users.properties" digest-realm-name="ELYTRON.ORG" plain-text="true"/> <groups-properties path="path/to/spnego-roles.properties"/> </properties-realm> </security-realms> <credential-security-factories> <kerberos-security-factory name="test-server" principal="HTTP/test-server.elytron.org@ELYTRON.ORG" path="path/to/test-server.keytab" debug="true"/> </credential-security-factories> ... <http> ... <http-authentication-factory name="spnego-http-authentication" http-server-mechanism-factory="global" security-domain="SPNEGODomain"> <mechanism-configuration> <mechanism mechanism-name="SPNEGO" credential-security-factory="test-server"/> </mechanism-configuration> </http-authentication-factory> ... </http> ... </subsystem>
-
애플리케이션을 보호하려면
undertow 하위 시스템에서
애플리케이션 보안 도메인을 정의하여 보안 도메인을 이http-authentication-factory
에 매핑합니다. HTTP 관리 인터페이스는 이 구성에 정의된http-authentication-factory
를 참조하도록 업데이트할 수 있습니다. 이 프로세스는 이 가이드의 Elytron으로의 속성 기반 인증 및 권한 부여 섹션에 설명되어 있습니다.
Kerberos Remoting SASL 인증 마이그레이션
Kerberos/GSSAPI SASL 인증에 대한 레거시 보안 영역을 기본 관리 인터페이스와 같은 인증 원격에 정의할 수 있습니다.
예제: 관리 CLI 명령 삭제를 위한 Kerberos 인증
/core-service=management/security-realm=Kerberos:add
/core-service=management/security-realm=Kerberos/server-identity=kerberos:add
/core-service=management/security-realm=Kerberos/server-identity=kerberos/keytab=remote\/test-server.elytron.org@ELYTRON.ORG:add(path=path/to/remote-test-server.keytab, debug=true)
/core-service=management/security-realm=Kerberos/authentication=kerberos:add(remove-realm=true)
예제: Kerberos 원격 설정
<management>
<security-realms>
...
<security-realm name="Kerberos">
<server-identities>
<kerberos>
<keytab principal="remote/test-server.elytron.org@ELYTRON.ORG" path="path/to/remote-test-server.keytab" debug="true"/>
</kerberos>
</server-identities>
<authentication>
<kerberos remove-realm="true"/>
</authentication>
</security-realm>
</security-realms>
...
</management>
Kerberos Remoting SASL 인증에서 Elytron으로 마이그레이션
동등한 Elytron 구성을 정의하는 단계는 Kerberos HTTP 인증 마이그레이션에 설명된 것과 매우 유사합니다.
ID 정보를 로드하는 데 사용할 보안 영역을 정의합니다.
/path=kerberos:add(relative-to=user.home, path=src/kerberos) /subsystem=elytron/properties-realm=kerberos-properties:add(users-properties={path=kerberos-users.properties, relative-to=kerberos, digest-realm-name=ELYTRON.ORG}, groups-properties={path=kerberos-groups.properties, relative-to=kerberos})
서버 ID에 대한 Kerberos 보안 팩토리를 정의합니다.
/subsystem=elytron/kerberos-security-factory=test-server:add(relative-to=kerberos, path=remote-test-server.keytab, principal=remote/test-server.elytron.org@ELYTRON.ORG)
보안 도메인 및 SASL 인증 팩토리를 정의합니다.
/subsystem=elytron/security-domain=KerberosDomain:add(default-realm=kerberos-properties, realms=[{realm=kerberos-properties, role-decoder=groups-to-roles}], permission-mapper=default-permission-mapper) /subsystem=elytron/sasl-authentication-factory=gssapi-authentication-factory:add(security-domain=KerberosDomain, sasl-server-factory=elytron, mechanism-configurations=[{mechanism-name=GSSAPI, credential-security-factory=test-server}])
이렇게 하면 서버 구성 파일의 elytron
하위 시스템에서 다음 구성이 생성됩니다.
<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto"> ... <security-domains> ... <security-domain name="KerberosDomain" default-realm="kerberos-properties" permission-mapper="default-permission-mapper"> <realm name="kerberos-properties" role-decoder="groups-to-roles"/> </security-domain> </security-domains> <security-realms> ... <properties-realm name="kerberos-properties"> <users-properties path="kerberos-users.properties" relative-to="kerberos" digest-realm-name="ELYTRON.ORG"/> <groups-properties path="kerberos-groups.properties" relative-to="kerberos"/> </properties-realm> </security-realms> <credential-security-factories> <kerberos-security-factory name="test-server" principal="remote/test-server.elytron.org@ELYTRON.ORG" path="remote-test-server.keytab" relative-to="kerberos"/> </credential-security-factories> ... <sasl> ... <sasl-authentication-factory name="gssapi-authentication-factory" sasl-server-factory="elytron" security-domain="KerberosDomain"> <mechanism-configuration> <mechanism mechanism-name="GSSAPI" credential-security-factory="test-server"/> </mechanism-configuration> </sasl-authentication-factory> ... </sasl> </subsystem>
이제 관리 인터페이스 또는 원격 커넥터를 SASL 인증 팩토리를 참조하도록 업데이트할 수 있습니다.
여기에 정의된 두 개의 Elytron 예제를 결합하여 공유 보안 도메인과 보안 영역을 사용할 수 있으며 프로토콜별 인증 팩토리를 사용하면 각각 자체 Kerberos 보안 팩토리를 참조할 수 있습니다.
7.3.6. 복합 매장에서 Elytron으로 마이그레이션
이 섹션에서는 여러 ID 저장소를 Elytron 에 사용하는 PicketBox 또는 레거시 보안 영역 구성을 마이그레이션하는 방법에 대해 설명합니다. PicketBox 또는 레거시 보안 영역을 사용하는 경우 권한 부여에 사용되는 정보가 다른 저장소에서 로드되는 동안 인증이 하나의 ID 저장소에 대해 수행되는 구성을 정의할 수 있습니다. Elytron으로 마이그레이션하는 경우 집계 보안 영역을 사용하여 이 목표를 달성할 수 있습니다.
다음 예제에서는 example-users.properties
속성 파일을 사용하여 사용자 인증을 수행한 다음 LDAP를 쿼리하여 그룹 및 역할 정보를 로드합니다.
표시된 구성은 추가 배경 정보를 제공하는 다음 섹션의 예제를 기반으로 합니다.
Picketbox Composite 저장소 구성
이 시나리오의 PicketBox 보안 도메인은 다음 관리 CLI 명령을 사용하여 구성됩니다.
예제: Picketbox 설정 명령
/subsystem=security/security-domain=application-security:add /subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[ {code=UsersRoles, flag=Required, module-options={ password-stacking=useFirstPass, usersProperties=file://${jboss.server.config.dir}/example-users.properties}} {code=LdapExtended, flag=Required, module-options={ password-stacking=useFirstPass, java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.provider.url=ldap://localhost:10389, java.naming.security.authentication=simple, bindDN="uid=admin,ou=system", bindCredential=secret, baseCtxDN="ou=users,dc=group-to-principal,dc=wildfly,dc=org", baseFilter="(uid={0})", rolesCtxDN="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",roleFilter="(uniqueMember={1})", roleAttributeID="uid" }}])
이렇게 하면 다음과 같은 서버 구성이 생성됩니다.
예제: Picketbox 보안 도메인 구성
<security-domain name="application-security"> <authentication> <login-module code="UsersRoles" flag="required"> <module-option name="password-stacking" value="useFirstPass"/> <module-option name="usersProperties" value="file://${jboss.server.config.dir}/example-users.properties"/> </login-module> <login-module code="LdapExtended" flag="required"> <module-option name="password-stacking" value="useFirstPass"/> <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/> <module-option name="java.naming.provider.url" value="ldap://localhost:10389"/> <module-option name="java.naming.security.authentication" value="simple"/> <module-option name="bindDN" value="uid=admin,ou=system"/> <module-option name="bindCredential" value="secret"/> <module-option name="baseCtxDN" value="ou=users,dc=group-to-principal,dc=wildfly,dc=org"/> <module-option name="baseFilter" value="(uid={0})"/> <module-option name="rolesCtxDN" value="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/> <module-option name="roleFilter" value="(uniqueMember={1})"/> <module-option name="roleAttributeID" value="uid"/> </login-module> </authentication> </security-domain>
이를 수행하기 위해 ely tron 하위 시스템에서 집계 보안 영역을 구성하는 방법은 Elytron Aggregate Security Realm Configuration
을 참조하십시오.
레거시 보안 Realm Composite 저장소 구성
이 시나리오의 레거시 보안 영역 구성은 다음 관리 CLI 명령을 사용하여 구성됩니다.
예제: 레거시 보안 영역 구성 명령
/core-service=management/ldap-connection=MyLdapConnection:add(url="ldap://localhost:10389", search-dn="uid=admin,ou=system", search-credential="secret") /core-service=management/security-realm=ApplicationSecurity:add /core-service=management/security-realm=ApplicationSecurity/authentication=properties:add(path=example-users.properties, relative-to=jboss.server.config.dir, plain-text=true) batch /core-service=management/security-realm=ApplicationSecurity/authorization=ldap:add(connection=MyLdapConnection) /core-service=management/security-realm=ApplicationSecurity/authorization=ldap/username-to-dn=username-filter:add(attribute=uid, base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org") /core-service=management/security-realm=ApplicationSecurity/authorization=ldap/group-search=group-to-principal:add(base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org", iterative=true, prefer-original-connection=true, principal-attribute=uniqueMember, search-by=DISTINGUISHED_NAME, group-name=SIMPLE, group-name-attribute=uid) run-batch
이렇게 하면 다음과 같은 서버 구성이 생성됩니다.
예제: 레거시 보안 영역 구성
<security-realms> ... <security-realm name="ApplicationSecurity"> <authentication> <properties path="example-users.properties" relative-to="jboss.server.config.dir" plain-text="true"/> </authentication> <authorization> <ldap connection="MyLdapConnection"> <username-to-dn> <username-filter base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org" attribute="uid"/> </username-to-dn> <group-search group-name="SIMPLE" iterative="true" group-name-attribute="uid"> <group-to-principal search-by="DISTINGUISHED_NAME" base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org" prefer-original-connection="true"> <membership-filter principal-attribute="uniqueMember"/> </group-to-principal> </group-search> </ldap> </authorization> </security-realm> </security-realms> <outbound-connections> <ldap name="MyLdapConnection" url="ldap://localhost:10389" search-dn="uid=admin,ou=system" search-credential="secret"/> </outbound-connections>
이를 수행하기 위해 ely tron 하위 시스템에서 집계 보안 영역을 구성하는 방법은 Elytron Aggregate Security Realm Configuration
을 참조하십시오.
Elytron Aggregate 보안 영역 구성
이 시나리오에 상응하는 Elytron 구성은 다음 관리 CLI 명령을 사용하여 구성됩니다.
예제: Elytron 설정 명령
/subsystem=elytron/dir-context=ldap-connection:add(url=ldap://localhost:10389, principal="uid=admin,ou=system", credential-reference={clear-text=secret}) /subsystem=elytron/ldap-realm=ldap-realm:add(dir-context=ldap-connection, direct-verification=true, identity-mapping={search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org", rdn-identifier="uid", attribute-mapping=[{filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",filter="(uniqueMember={1})",from="uid",to="Roles"}]}) /subsystem=elytron/properties-realm=application-properties:add(users-properties={path=example-users.properties, relative-to=jboss.server.config.dir, plain-text=true, digest-realm-name="Application Security"}) /subsystem=elytron/aggregate-realm=combined-realm:add(authentication-realm=application-properties, authorization-realm=ldap-realm) /subsystem=elytron/security-domain=application-security:add(realms=[{realm=combined-realm}], default-realm=combined-realm, permission-mapper=default-permission-mapper) /subsystem=elytron/http-authentication-factory=application-security-http:add(http-server-mechanism-factory=global, security-domain=application-security, mechanism-configurations=[{mechanism-name=BASIC}])
이렇게 하면 다음과 같은 서버 구성이 생성됩니다.
예제: Elytron 설정
<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto"> ... <security-domains> ... <security-domain name="application-security" default-realm="combined-realm" permission-mapper="default-permission-mapper"> <realm name="combined-realm"/> </security-domain> </security-domains> <security-realms> <aggregate-realm name="combined-realm" authentication-realm="application-properties" authorization-realm="ldap-realm"/> ... <properties-realm name="application-properties"> <users-properties path="example-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="Application Security" plain-text="true"/> </properties-realm> <ldap-realm name="ldap-realm" dir-context="ldap-connection" direct-verification="true"> <identity-mapping rdn-identifier="uid" search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org"> <attribute-mapping> <attribute from="uid" to="Roles" filter="(uniqueMember={1})" filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/> </attribute-mapping> </identity-mapping> </ldap-realm> </security-realms> ... <http> ... <http-authentication-factory name="application-security-http" http-server-mechanism-factory="global" security-domain="application-security"> <mechanism-configuration> <mechanism mechanism-name="BASIC"/> </mechanism-configuration> </http-authentication-factory> ... </http> ... <dir-contexts> <dir-context name="ldap-connection" url="ldap://localhost:10389" principal="uid=admin,ou=system"> <credential-reference clear-text="secret"/> </dir-context> </dir-contexts> </subsystem>
elytron
하위 시스템에서는 인증에 사용할 보안 영역과 권한 부여 결정에 사용할 을 지정하는 aggregate-realm
이 정의되었습니다.
7.3.7. 캐싱을 사용하는 보안 도메인 마이그레이션
PicketBox를 사용하는 경우 보안 도메인을 정의하고 액세스를 위한 인메모리 캐싱을 활성화할 수 있습니다. 이를 통해 메모리의 ID 데이터에 액세스하고 ID 저장소에 대한 추가 직접 액세스를 방지할 수 있습니다. Elytron과 유사한 구성을 달성할 수 있습니다. 이 섹션에서는 Elytron을 사용할 때 보안 도메인 캐싱을 구성하는 방법에 대해 설명합니다.
Picketbox 캐시된 보안 도메인 구성
다음 명령은 캐싱을 활성화하는 PicketBox 보안 도메인을 구성하는 방법을 보여줍니다.
예제: Picketbox 캐시된 보안 도메인 명령
/subsystem=security/security-domain=application-security:add(cache-type=default) /subsystem=security/security-domain=application-security/authentication=classic:add(login-modules=[{code=LdapExtended, flag=Required, module-options={ java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.provider.url=ldap://localhost:10389, java.naming.security.authentication=simple, bindDN="uid=admin,ou=system", bindCredential=secret, baseCtxDN="ou=users,dc=group-to-principal,dc=wildfly,dc=org", baseFilter="(uid={0})", rolesCtxDN="ou=groups,dc=group-to-principal,dc=wildfly,dc=org", roleFilter="(uniqueMember={1})", roleAttributeID="uid" }}])
이렇게 하면 다음과 같은 서버 구성이 생성됩니다.
예제: Picketbox 캐시된 보안 도메인 구성
<subsystem xmlns="urn:jboss:domain:security:2.0"> <security-domains> ... <security-domain name="application-security" cache-type="default"> <authentication> <login-module code="LdapExtended" flag="required"> <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/> <module-option name="java.naming.provider.url" value="ldap://localhost:10389"/> <module-option name="java.naming.security.authentication" value="simple"/> <module-option name="bindDN" value="uid=admin,ou=system"/> <module-option name="bindCredential" value="secret"/> <module-option name="baseCtxDN" value="ou=users,dc=group-to-principal,dc=wildfly,dc=org"/> <module-option name="baseFilter" value="(uid={0})"/> <module-option name="rolesCtxDN" value="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/> <module-option name="roleFilter" value="(uniqueMember={1})"/> <module-option name="roleAttributeID" value="uid"/> </login-module> </authentication> </security-domain> </security-domains> </subsystem>
이 명령 및 결과 구성은 LDAP 인증 구성을 Elytron으로 마이그레이션하는 데 표시된 예와 비슷하지만 여기서 cache-type
특성은 default
값으로 정의됩니다. 기본
캐시 유형은 메모리 내 캐시입니다. PicketBox를 사용할 때 infinispan
의 캐시
유형을 지정할 수도 있지만 이 유형은 Elytron에서 지원되지 않습니다.
Elytron 캐시된 보안 도메인 구성
Elytron을 사용할 때 보안 도메인을 캐시하는 유사한 구성을 생성하려면 아래 단계를 수행하십시오.
보안 영역을 정의하고 캐싱 영역에서 보안 영역을 래핑합니다. 그런 다음 캐싱 영역을 보안 도메인 및 인증 팩토리에서 사용할 수 있습니다.
예제: Elytron 보안 영역 구성 명령
/subsystem=elytron/dir-context=ldap-connection:add(url=ldap://localhost:10389, principal="uid=admin,ou=system", credential-reference={clear-text=secret}) /subsystem=elytron/ldap-realm=ldap-realm:add(dir-context=ldap-connection, direct-verification=true, identity-mapping={search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org", rdn-identifier="uid", attribute-mapping=[{filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org",filter="(uniqueMember={1})",from="uid",to="Roles"}]}) /subsystem=elytron/caching-realm=cached-ldap:add(realm=ldap-realm)
이전 단계에서 정의한
cached-ldap
영역을 사용하는 보안 도메인 및 HTTP 인증 팩토리를 정의합니다.예제: Elytron 보안 도메인 및 인증 팩토리 구성 명령
/subsystem=elytron/security-domain=application-security:add(realms=[{realm=cached-ldap}], default-realm=cached-ldap, permission-mapper=default-permission-mapper) /subsystem=elytron/http-authentication-factory=application-security-http:add(http-server-mechanism-factory=global, security-domain=application-security, mechanism-configurations=[{mechanism-name=BASIC}])
참고이 단계에서는 원래
영역 대신 caching-realm
을 참조하는 것이 중요합니다. 그렇지 않으면 캐싱이 무시됩니다.
이러한 명령을 실행하면 다음과 같은 서버 구성이 추가됩니다.
예제: Elytron 캐시된 보안 도메인 구성
<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto"> ... <security-domains> ... <security-domain name="application-security" default-realm="cached-ldap" permission-mapper="default-permission-mapper"> <realm name="cached-ldap"/> </security-domain> </security-domains> ... <security-realms> .... <ldap-realm name="ldap-realm" dir-context="ldap-connection" direct-verification="true"> <identity-mapping rdn-identifier="uid" search-base-dn="ou=users,dc=group-to-principal,dc=wildfly,dc=org"> <attribute-mapping> <attribute from="uid" to="Roles" filter="(uniqueMember={1})" filter-base-dn="ou=groups,dc=group-to-principal,dc=wildfly,dc=org"/> </attribute-mapping> </identity-mapping> </ldap-realm> <caching-realm name="cached-ldap" realm="ldap-realm"/> </security-realms> ... <http> ... <http-authentication-factory name="application-security-http" http-server-mechanism-factory="global" security-domain="application-security"> <mechanism-configuration> <mechanism mechanism-name="BASIC"/> </mechanism-configuration> </http-authentication-factory> ... </http> ... <dir-contexts> <dir-context name="ldap-connection" url="ldap://localhost:10389" principal="uid=admin,ou=system"> <credential-reference clear-text="secret"/> </dir-context> </dir-contexts> ...
7.3.8. Jakarta Authorization Security를 Elytron으로 마이그레이션
기본적으로 JBoss EAP는 레거시 보안
하위 시스템을 사용하여 Jakarta Authorization 정책 프로바이더 및 팩토리를 구성합니다. 기본 구성은 PicketBox의 구현으로 매핑됩니다.
elytron
하위 시스템은 Jakarta Authorization 사양에 따라 기본 제공 정책 프로바이더를 제공합니다. Elytron이 Jakarta Authorization 구성 및 기타 정책을 관리하도록 서버를 구성하기 전에 먼저 다음 관리 CLI 명령을 사용하여 레거시 보안
하위 시스템에서 Jakarta Authorization을 비활성화해야 합니다.
/subsystem=security:write-attribute(name=initialize-jacc, value=false)
이렇게 하지 않으면 서버 로그에 다음과 같은 오류가 발생할 수 있습니다. MSC000004: org.wildfly.security.policy 서비스 중지 중에 오류가 발생했습니다: java.lang.StackOverflowError
.
Jakarta Authorization을 활성화하고 elytron
하위 시스템에서 Jakarta Authorization 정책 공급자를 정의하는 방법에 대한 자세한 내용은 JBoss EAP의 개발 가이드에서 elytron
하위 시스템을 사용하여 Jakarta Authorization 활성화 를 참조하십시오.
7.4. 애플리케이션 클라이언트 마이그레이션
7.4.1. 네이밍 클라이언트 구성을 Elytron으로 마이그레이션
이 섹션에서는 org.jboss.naming.remote.client.InitialContext 클래스에서 지원하는 org.jboss.naming.remote.client.InitialContext
클래스에서 Elytron으로 지원하는 org.jboss.naming.client.InitialContextFactory
클래스에서 지원하는 클라이언트 애플리케이션을 마이그레이션하는 방법을 설명합니다.
다음 예제에서는 InitialContextFactory
클래스가 사용자 자격 증명의 속성을 지정하고 해당 ID가 연결되는 이름 지정 프로바이더의 URL에 대해 생성한다고 가정합니다.
예제: 이전 릴리스에서 사용된 InitialContext
코드
Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); properties.put(Context.PROVIDER_URL,"http-remoting://127.0.0.1:8080"); properties.put(Context.SECURITY_PRINCIPAL, "bob"); properties.put(Context.SECURITY_CREDENTIALS, "secret"); InitialContext context = new InitialContext(properties); Bar bar = (Bar) context.lookup("foo/bar"); ...
다음 마이그레이션 방법 중 하나를 선택할 수 있습니다.
7.4.1.1. 구성 파일 접근 방식을 사용하여 네이밍 클라이언트 마이그레이션
구성 방법을 사용하여 이름 지정 클라이언트를 Elytron으로 마이그레이션하려면 다음 단계를 따르십시오.
클라이언트 애플리케이션
META
파일을 생성합니다. 파일에는 이름 공급업체에 대한 연결을 설정할 때 사용할 사용자 자격 증명이 포함되어야 합니다.-INF/ 디렉터리에 awildfly-
config.xml예:
wildfly-config.xml
파일<configuration> <authentication-client xmlns="urn:elytron:client:1.2"> <authentication-rules> <rule use-configuration="namingConfig"> <match-host name="127.0.0.1"/> </rule> </authentication-rules> <authentication-configurations> <configuration name="namingConfig"> <set-user-name name="bob"/> <credentials> <clear-password password="secret"/> </credentials> </configuration> </authentication-configurations> </authentication-client> </configuration>
다음 예와 같이
InitialContext
를 생성합니다.InitialContext
는org.wildfly.naming.client.WildFlyInitialContextFactory
클래스에서 지원합니다.예제:
InitialContext
CodeProperties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.wildfly.naming.client.WildFlyInitialContextFactory"); properties.put(Context.PROVIDER_URL,"remote+http://127.0.0.1:8080"); InitialContext context = new InitialContext(properties); Bar bar = (Bar) context.lookup("foo/bar"); ...
7.4.1.2. 프로그래밍 방식을 사용하여 네이밍 클라이언트 마이그레이션
이 방법을 사용하면 애플리케이션 코드에서 직접 이름 지정 프로바이더에 대한 연결을 설정하는 데 사용되는 사용자 자격 증명을 제공합니다.
예제: 프로그래밍 접근 방식을 사용한 코드
// Create the authentication configuration AuthenticationConfiguration namingConfig = AuthenticationConfiguration.empty().useName("bob").usePassword("secret"); // Create the authentication context AuthenticationContext context = AuthenticationContext.empty().with(MatchRule.ALL.matchHost("127.0.0.1"), namingConfig); // Create a callable that creates and uses an InitialContext Callable<Void> callable = () -> { Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.wildfly.naming.client.WildFlyInitialContextFactory"); properties.put(Context.PROVIDER_URL,"remote+http://127.0.0.1:8080"); InitialContext context = new InitialContext(properties); Bar bar = (Bar) context.lookup("foo/bar"); ... return null; }; // Use the authentication context to run the callable context.runCallable(callable);
7.4.2. 자카르타 엔터프라이즈 빈 클라이언트를 Elytron으로 마이그레이션
이 마이그레이션 예제에서는 클라이언트 애플리케이션이 jboss-ejb-client.properties
파일을 사용하여 원격 서버에 배포된 Jakarta Enterprise Beans를 호출하도록 구성되어 있다고 가정합니다. 클라이언트 애플리케이션 META-INF/
디렉터리에 있는 이 파일에는 원격 서버에 연결하는 데 필요한 다음 정보가 포함되어 있습니다.
예: jboss-ejb-client.properties
파일
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connections=default remote.connection.default.host=127.0.0.1 remote.connection.default.port = 8080 remote.connection.default.username=bob remote.connection.default.password=secret
클라이언트는 Jakarta Enterprise Beans를 조회하고 다음 예제와 유사한 코드를 사용하여 해당 방법 중 하나를 호출합니다.
예제: 원격 자카르타 엔터프라이즈 빈을 호출하는 클라이언트 코드
// Create an InitialContext Properties properties = new Properties(); properties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); InitialContext context = new InitialContext(properties); // Look up the {JEB} and invoke one of its methods RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup( "ejb:/ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName()); int sum = statelessRemoteCalculator.add(101, 202);
다음 마이그레이션 방법 중 하나를 선택할 수 있습니다.
7.4.2.1. 구성 파일을 사용하여 Jakarta Enterprise Beans 클라이언트 마이그레이션
구성 방법을 사용하여 이름 지정 클라이언트를 Elytron으로 마이그레이션하려면 다음 단계를 따르십시오.
클라이언트 애플리케이션
META
파일을 구성합니다. 파일에는 이름 공급업체에 대한 연결을 설정할 때 사용할 사용자 자격 증명이 포함되어야 합니다.-INF/ 디렉터리에 awildfly-
config.xml예:
wildfly-config.xml
파일<configuration> <authentication-client xmlns="urn:elytron:client:1.2"> <authentication-rules> <rule use-configuration="ejbConfig"> <match-host name="127.0.0.1"/> </rule> </authentication-rules> <authentication-configurations> <configuration name="ejbConfig"> <set-user-name name="bob"/> <credentials> <clear-password password="secret"/> </credentials> </configuration> </authentication-configurations> </authentication-client> <jboss-ejb-client xmlns="urn:jboss:wildfly-client-ejb:3.0"> <connections> <connection uri="remote+http://127.0.0.1:8080" /> </connections> </jboss-ejb-client> </configuration>
다음 예와 같이
InitialContext
를 생성합니다.InitialContext
는org.wildfly.naming.client.WildFlyInitialContextFactory
클래스에서 지원합니다.예제:
InitialContext
코드// Create an InitialContext Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.wildfly.naming.client.WildFlyInitialContextFactory"); InitialContext context = new InitialContext(properties); // Look up an {JEB} and invoke one of its methods // Note that this code is the same as before RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup( "ejb:/ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName()); int sum = statelessRemoteCalculator.add(101, 202);----
-
이제 파일이 더 이상 필요하지 않으므로 사용되지 않는
jboss-ejb-client.properties
파일을 삭제할 수 있습니다.
7.4.2.2. 프로그래밍 방식으로 Jakarta Enterprise Bean 클라이언트 마이그레이션
이 접근 방식을 사용하면 애플리케이션 코드에서 직접 원격 서버에 연결하는 데 필요한 정보를 제공합니다.
예제: 프로그래밍 방식을 사용한 코드
// Create the authentication configuration AuthenticationConfiguration ejbConfig = AuthenticationConfiguration.empty().useName("bob").usePassword("secret"); // Create the authentication context AuthenticationContext context = AuthenticationContext.empty().with(MatchRule.ALL.matchHost("127.0.0.1"), ejbConfig); // Create a callable that invokes the {JEB} Callable<Void> callable = () -> { // Create an InitialContext Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory"); properties.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080"); InitialContext context = new InitialContext(properties); // Look up the {JEB} and invoke one of its methods // Note that this code is the same as before RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup( "ejb:/ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName()); int sum = statelessRemoteCalculator.add(101, 202); ... return null; }; // Use the authentication context to run the callable context.runCallable(callable);
이제 파일이 더 이상 필요하지 않으므로 사용되지 않는 jboss-ejb-client.properties
파일을 삭제할 수 있습니다.
7.5. SSL 구성 마이그레이션
7.5.1. 간단한 SSL 구성을 Elytron으로 마이그레이션
보안 영역을 사용하여 JBoss EAP 서버에 대한 HTTP 연결을 보호한 경우 이 섹션에 제공된 정보를 사용하여 해당 구성을 Elytron으로 마이그레이션할 수 있습니다.
다음 예제에서는 security-realm
에 구성된 다음 키 저장소가
있다고 가정합니다.
예제: 보안 영역 키 저장소를 사용하는 SSL 설정
<security-realm name="ApplicationRealm"> <server-identities> <ssl> <keystore path="server.keystore" relative-to="jboss.server.config.dir" keystore-password="keystore_password" alias="server" key-password="key_password" /> </ssl> </server-identities> </security-realm>
Elytron을 사용하여 동일한 구성을 수행하려면 아래 단계를 따르십시오.
키 저장소
의 위치와 암호화되는 암호를 지정하는elytron
하위 시스템에서 키 저장소를 생성합니다. 이 명령은 keytool 명령을 사용하여 키 저장소가 생성되었으며 해당 유형이JKS
라고 가정합니다./subsystem=elytron/key-store=LocalhostKeyStore:add(path=server.keystore,relative-to=jboss.server.config.dir,credential-reference={clear-text="keystore_password"},type=JKS)
이전 단계에서 정의한
키
를 생성합니다.저장소, 별칭 및 키 암호를 지정하는
managerelytron
하위 시스템에서 key-/subsystem=elytron/key-manager=LocalhostKeyManager:add(key-store=LocalhostKeyStore,alias-filter=server,credential-reference={clear-text="key_password"})
이전 단계에서 정의한
key
를 만듭니다.-manager를 참조하는
ssl-contextelytron
하위 시스템에서 server-/subsystem=elytron/server-ssl-context=LocalhostSslContext:add(key-manager=LocalhostKeyManager)
https-listener
를 레거시security-realm
에서 새로 만든 Elytronssl-context
로 전환합니다.batch /subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm) /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=LocalhostSslContext) run-batch
서버를 다시 로드합니다.
reload
이렇게 하면 서버 구성 파일에 다음과 같은 elytron
하위 시스템 구성이 생성됩니다.
<subsystem xmlns="urn:wildfly:elytron:4.0" ...> ... <tls> <key-stores> <key-store name="LocalhostKeyStore"> <credential-reference clear-text="keystore_password"/> <implementation type="JKS"/> <file path="server.keystore" relative-to="jboss.server.config.dir"/> </key-store> </key-stores> <key-managers> <key-manager name="LocalhostKeyManager" key-store="LocalhostKeyStore" alias-filter="server"> <credential-reference clear-text="key_password"/> </key-manager> </key-managers> <server-ssl-contexts> <server-ssl-context name="LocalhostSslContext" key-manager="LocalhostKeyManager"/> </server-ssl-contexts> </tls> </subsystem>
이렇게 하면 서버 구성 파일에서 다음 undertow
하위 시스템 구성이 생성됩니다.
<https-listener name="https" socket-binding="https" ssl-context="LocalhostSslContext" enable-http2="true"/>
자세한 내용은 Elytron Subsystem 및 JBoss EAP용 서버 보안 구성 방법에서 관리 인터페이스 보안 설정 방법을 참조하십시오.
7.5.2. CLIENT-CERT SSL 인증에서 Elytron으로 마이그레이션
CLIENT-CERT
SSL 인증을 활성화하려면 인증 요소에 truststore
요소를
추가합니다.
<security-realm name="ManagementRealm"> <server-identities> <ssl> <keystore path="server.keystore" relative-to="jboss.server.config.dir" keystore-password="KEYSTORE_PASSWORD" alias="server" key-password="key_password" /> </ssl> </server-identities> <authentication> <truststore path="server.truststore" relative-to="jboss.server.config.dir" keystore-password="TRUSTSTORE_PASSWORD" /> <local default-user="$local"/> <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/> </authentication> </security-realm>
이 구성을 사용하면 CLIENT-CERT
인증이 수행되지 않으면 클라이언트가 로컬 메커니즘 또는 사용자 이름/암호
인증 메커니즘을 사용하도록 대체할 수 있습니다. CLIENT-CERT
기반 인증을 필수로 만들려면 local
및 properties
요소를 제거합니다.
레거시 신뢰 저장소
는 다음 두 가지 방법으로 사용할 수 있습니다.
CA만 포함하는 기존 신뢰 저장소
다음 단계에 따라 유효한 인증서 및 개인 키가 없는 사용자가 Elytron을 사용하여 서버에 액세스하지 못하도록 서버를 구성합니다.
키 저장소
의 위치와 암호화되는 암호를 지정하는elytron
하위 시스템에서 키 저장소를 생성합니다. 이 명령은 keytool 명령을 사용하여 키 저장소가 생성되었으며 해당 유형이JKS
라고 가정합니다./subsystem=elytron/key-store=LocalhostKeyStore:add(path=server.keystore,relative-to=jboss.server.config.dir,credential-reference={clear-text="keystore_password"},type=JKS)
신뢰
저장소의 위치와 암호화되는 암호를 지정하는
저장소를 생성합니다. 이 명령은 keytool 명령을 사용하여 키 저장소가 생성되었으며 해당 유형이elytron
하위 시스템에서 키JKS
라고 가정합니다./subsystem=elytron/key-store=TrustStore:add(path=server.truststore,relative-to=jboss.server.config.dir,credential-reference={clear-text="truststore_password"},type=JKS)
이전에 정의한
LocalhostKeyStore
키 저장소, 별칭 및 키 암호를 지정하는
를 생성합니다.elytron
하위 시스템에서 key-manager/subsystem=elytron/key-manager=LocalhostKeyManager:add(key-store=LocalhostKeyStore,alias-filter=server,credential-reference={clear-text="key_password"})
이전에 생성한
trust
를 생성합니다.store의 키 저장소를 지정하는
managerelytron
하위 시스템에서 trust-/subsystem=elytron/trust-manager=TrustManager:add(key-store=TrustStore)
이전에 정의한
key
를 만듭니다.-manager를 참조하고
ssl-contexttrust-manager
특성을 설정하고, 클라이언트 인증을 활성화하는elytron
하위 시스템에 server-/subsystem=elytron/server-ssl-context=LocalhostSslContext:add(key-manager=LocalhostKeyManager,trust-manager=TrustManager,need-client-auth=true)
https-listener
를 레거시security-realm
에서 새로 만든 Elytronssl-context
로 전환합니다.batch /subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm) /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=LocalhostSslContext) run-batch
서버를 다시 로드합니다.
reload
이렇게 하면 서버 구성 파일에 다음과 같은 elytron
하위 시스템 구성이 생성됩니다.
<subsystem xmlns="urn:wildfly:elytron:4.0"...> ... <tls> <key-stores> <key-store name="LocalhostKeyStore"> <credential-reference clear-text="keystore_password"/> <implementation type="JKS"/> <file path="server.keystore" relative-to="jboss.server.config.dir"/> </key-store> <key-store name="TrustStore"> <credential-reference clear-text="truststore_password"/> <implementation type="JKS"/> <file path="server.truststore" relative-to="jboss.server.config.dir"/> </key-store> </key-stores> <key-managers> <key-manager name="LocalhostKeyManager" key-store="LocalhostKeyStore" alias-filter="server"> <credential-reference clear-text="key_password"/> </key-manager> </key-managers> <trust-managers> <trust-manager name="TrustManager" key-store="TrustStore"/> </trust-managers> <server-ssl-contexts> <server-ssl-context name="LocalhostSslContext" need-client-auth="true" key-manager="LocalhostKeyManager" trust-manager="TrustManager"/> </server-ssl-contexts> </tls> </subsystem>
이렇게 하면 서버 구성 파일에서 다음 undertow
하위 시스템 구성이 생성됩니다.
<subsystem xmlns="urn:jboss:domain:undertow:10.0"> ... <https-listener name="https" socket-binding="https" ssl-context="LocalhostSslContext" enable-http2="true"/> ... </subsystem>
영역 및 도메인
사전 정의된 Elytron ManagementDomain
보안 도메인 및 ManagementRealm
보안 영역을 사용할 수 있도록 사용자는 표준 속성 파일에 저장됩니다.
<security-domains> <security-domain name="ManagementDomain" default-realm="ManagementRealm" permission-mapper="default-permission-mapper"> <realm name="ManagementRealm" role-decoder="groups-to-roles"/> <realm name="local"/> </security-domain> </security-domains> <security-realms> <properties-realm name="ManagementRealm"> <users-properties path="mgmt-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ManagementRealm"/> <groups-properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/> </properties-realm> </security-realms>
보안 영역은 다음 두 가지 상황에서 사용됩니다.
- 인증서 인증에 실패하면 암호 대체 사례에서 보안 영역이 사용됩니다.
- 암호 및 인증서에 대해 권한 부여를 수행하면 영역은 개별 사용자의 역할을 제공합니다.
따라서 모든 클라이언트 인증서의 경우 사용자가 보안 영역에 있어야 합니다.
Princder
인증서 인증을 사용하고 보안 영역에서 ID를 확인하기 위해 사용자 이름을 허용하는 경우 클라이언트 인증서에서 사용자
이름을 가져올 수 있는 정의된 방법이 있어야 합니다.
이 경우 인증서 제목에서 CN
속성이 사용됩니다.
/subsystem=elytron/x500-attribute-principal-decoder=x500-decoder:add(attribute-name=CN)
HTTP 인증 팩토리
HTTP 연결의 경우 이전에 정의된 리소스를 사용하여 HTTP 인증 팩토리가 정의됩니다. CLIENT_CERT
및 DIGEST
인증을 지원하도록 구성됩니다.
properties 영역에서 암호만 확인하고 클라이언트 인증서를 확인할 수 없으므로 먼저 구성 메커니즘 팩토리를 추가해야 합니다. 그러면 보안 영역에 대한 인증서 확인을 비활성화합니다.
/subsystem=elytron/configurable-http-server-mechanism-factory=configured-cert:add(http-server-mechanism-factory=global, properties={org.wildfly.security.http.skip-certificate-verification=true})
HTTP 인증은 다음과 같이 생성할 수 있습니다.
./subsystem=elytron/http-authentication-factory=client-cert-digest:add(http-server-mechanism-factory=configured-cert,security-domain=ManagementDomain,mechanism-configurations=[{mechanism-name=CLIENT_CERT,pre-realm-principal-transformer=x500-decoder},{mechanism-name=DIGEST, mechanism-realm-configurations=[{realm-name=ManagementRealm}]}])
위의 명령은 다음과 같습니다.
<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto"> ... <http> ... <http-authentication-factory name="client-cert-digest" http-server-mechanism-factory="configured-cert" security-domain="ManagementDomain"> <mechanism-configuration> <mechanism mechanism-name="CLIENT_CERT" pre-realm-principal-transformer="x500-decoder"/> <mechanism mechanism-name="DIGEST"> <mechanism-realm realm-name="ManagementRealm"/> </mechanism> </mechanism-configuration> </http-authentication-factory> ... <configurable-http-server-mechanism-factory name="configured-cert" http-server-mechanism-factory="configured-cert"> <properties> <property name="org.wildfly.security.http.skip-certificate-verification" value="true"/> </properties> </configurable-http-server-mechanism-factory> ... </http> ... </subsystem>
8장. JBoss EAP 이전 릴리스에서 마이그레이션
8.1. JBoss EAP 5에서 JBoss EAP 7으로 마이그레이션
이 가이드에서는 JBoss EAP 7에서 JBoss EAP 6 애플리케이션을 성공적으로 실행하고 배포하는 데 필요한 변경 사항을 중점적으로 다룹니다. JBoss EAP 5에서 JBoss EAP 7으로 직접 애플리케이션을 마이그레이션하려는 경우 마이그레이션을 계획하고 실행하는 데 도움이 되는 다양한 리소스가 있습니다. 다음 접근 방식을 사용하는 것이 좋습니다.
- 각 JBoss EAP 릴리스에 대한 변경 사항에 대한 간략한 개요는 이 가이드의 각 릴리스에 대한 변경 요약 을 참조하십시오.
- JBoss EAP 6 마이그레이션 가이드와 이 가이드를 읽어 보고 각 항목의 내용을 숙지하십시오.
- JBoss EAP 5 구성 요소 업그레이드 참조를 특정 구성 요소 및 기능에 대한 마이그레이션 정보에 대한 빠른 참조로 사용합니다.
- 규칙 기반 Migration Toolkit for Applications는 JBoss EAP 5에서 JBoss EAP 7로 직접 마이그레이션하는 데 도움이 되는 규칙을 계속 추가합니다. 이러한 툴을 사용하여 애플리케이션을 분석하고 JBoss EAP 7로 마이그레이션하는 데 필요한 변경 사항에 대한 세부 보고서를 생성할 수 있습니다. 자세한 내용은 마이그레이션 툴킷을 사용하여 마이그레이션 애플리케이션 분석에서 참조하십시오.
- 고객 포털 지식 베이스 에는 현재 JBoss EAP 5에서 JBoss EAP 6로의 마이그레이션에 도움이 되는 문서와 솔루션이 포함되어 있습니다. 시간이 지남에 따라 JBoss EAP 5에서 JBoss EAP 7으로의 마이그레이션에 필요한 추가 콘텐츠를 추가할 계획이 있습니다.
8.2. 각 릴리스에 적용된 변경 사항 요약
마이그레이션을 계획하기 전에 JBoss EAP 6 및 JBoss EAP 7의 변경 사항을 알고 있어야 합니다.
JBoss EAP 6 마이그레이션 가이드 에서는 JBoss EAP 5와 JBoss EAP 6 간의 변경 사항을 다룹니다. 다음은 JBoss EAP 6에서 가장 중요한 변경 사항을 요약한 목록입니다.
- 모듈식 서비스 컨테이너에 빌드된 새 아키텍처 구현
- 인증된 Java Enterprise Edition 6 사양 구현이었습니다.
- 도메인 관리, 새 배포 구성 및 새로운 파일 디렉토리 구조 및 스크립트 도입
- 새로운 이식 가능한 Java Naming 및 Directory Interface 네임 스페이스에서 표준화
해당 릴리스의 자세한 변경 목록은 JBoss EAP 6 마이그레이션 가이드 의 JBoss EAP 6의 새로운 기능 및 차이점 검토를 참조하십시오.
JBoss EAP 7은 JBoss EAP 6과 동일한 모듈식 구조를 기반으로 하며 동일한 도메인 관리, 배포 구성, 파일 디렉터리 구조 및 스크립트를 포함합니다. 또한 여전히 동일한 표준화된 Java Naming 및 Directory Interface 네임스페이스를 사용합니다. 그러나 JBoss EAP 7에는 다음과 같은 변경 사항이 도입되었습니다.
- Jakarta Enterprise Edition (Jakarta EE) 8 사양에 대한 지원 추가
- Undertow로 웹 서버를 교체
- JacORB IIOP 구현을 OpenJDK ORB의 다운스트림 분기로 교체
- 새 메시징 공급자로 Apache ActiveMQ Artemis 포함
-
cmp
,jaxr
및스레드
하위 시스템 제거 - 엔터프라이즈 엔티티 빈에 대한 지원 제거
변경 사항 전체 목록은 JBoss EAP 7의 새로운 기능 검토를참조하십시오.
8.3. 마이그레이션 가이드에서 콘텐츠 검토
각 릴리스에 대한 마이그레이션 가이드의 전체 콘텐츠를 검토하여 추가 또는 사용되지 않는 기능을 인식하고 해당 릴리스에 대한 기존 애플리케이션을 실행하는 데 필요한 서버 구성 및 애플리케이션 변경 사항을 이해합니다.
JBoss EAP 6과 JBoss EAP 7 간에 기본 아키텍처가 변경되지 않았기 때문에 JBoss EAP 6 마이그레이션 가이드에 설명된 많은 변경 사항이 계속 적용됩니다. 예를 들어 대부분의 애플리케이션에서 필요한 변경 사항에 설명된 변경 사항은 이 릴리스에 계속 적용되는 JBoss EAP 6의 기본 아키텍처 변경 사항과 관련이 있습니다. 새로운 모듈식 클래스 로드 시스템의 변경 사항은 상당하며 거의 모든 JBoss EAP 5 애플리케이션의 패키징 및 종속성에 영향을 미칩니다. 변경 사항이 애플리케이션 아키텍처 및 구성 요소에 따라 달라지는 대부분의 변경 사항도 여전히 유효합니다. 그러나 JBoss EAP 7이 웹 서버, ORB 및 메시징 프로바이더를 대체했으므로 cmp
,스레드
및 jaxr
하위 시스템을 제거하고 엔터티 빈에 대한 지원을 제거한 후 해당 구성 요소 영역과 관련된 변경 사항은 이 가이드를 참조해야 합니다. 시작하기 전에 이 가이드에 설명된 서버 구성 변경 사항 및 애플리케이션 마이그레이션 변경 사항에 특히 주의하십시오.
8.4. JBoss EAP 5 구성 요소 업그레이드 참조
다음 표를 사용하여 JBoss EAP 5에서 JBoss EAP 7.4로 특정 기능 또는 구성 요소를 마이그레이션하는 방법에 대한 정보를 찾습니다.
JBoss EAP 5 기능 또는 구성 요소 | 변경 사항 요약 및 마이그레이션 정보를 찾을 위치 |
---|---|
애플리케이션 패키징 및 클래스 로드 | JBoss EAP 6에서는 이전 계층적 클래스 로드 구조가 JBoss 모듈을 기반으로 하는 모듈식 아키텍처로 교체되었습니다. 또한 새로운 모듈식 클래스 로드 구조로 인해 애플리케이션 패키징이 변경되었습니다. 이 아키텍처는 여전히 JBoss EAP 7에서 사용됩니다. 새로운 모듈식 아키텍처에 대한 자세한 내용은 JBoss EAP 7.4 개발 가이드의 다음 장을 참조하십시오. 새로운 모듈식 아키텍처의 애플리케이션을 업데이트하고 재패키징하는 방법에 대한 자세한 내용은 JBoss EAP 6 마이그레이션 가이드의 다음 섹션을 참조하십시오. |
애플리케이션 설정 파일 | 모듈식 클래스 로드를 사용하기 위한 JBoss EAP 6의 변경으로 인해 하나 이상의 애플리케이션 구성 파일을 생성하거나 수정하여 종속성을 추가하거나 자동 종속성이 로드되지 않도록 해야 할 수 있습니다. 이는 JBoss EAP 7에서 변경되지 않았습니다. 자세한 내용은 JBoss EAP 6 마이그레이션 가이드의 다음 섹션을 참조하십시오. |
캐싱 및 Infinispan | JBoss Cache는 JBoss EAP 6에서만 서버에서 내부용으로 Infinispan으로 대체되었습니다. 애플리케이션 코드에서 JBoss Cache를 교체하는 방법에 대한 정보는 JBoss EAP 6 마이그레이션 가이드 의 다음 섹션을 참조하십시오. JBoss EAP 7의 Infinispan 캐싱 전략 및 구성 변경 사항은 이 가이드의 다음 섹션에 설명되어 있습니다. |
데이터 소스 및 리소스 어댑터 | JBoss EAP 6는 데이터 소스와 리소스 어댑터의 구성을 주로 하나의 파일로 통합했으며, 여전히 JBoss EAP 7에서 적용됩니다. 자세한 내용은 JBoss EAP 6 마이그레이션 가이드 의 다음 섹션을 참조하십시오. |
디렉터리 구조, 스크립트 및 배포 구성 | JBoss EAP 6에서는 디렉터리 구조, 스크립트 및 배포 구성이 변경되었습니다. 이러한 변경 사항은 JBoss EAP 7에서 계속 유효합니다. 자세한 내용은 JBoss EAP 6 마이그레이션 가이드 의 다음 섹션을 참조하십시오. |
엔터프라이즈 빈 | 애플리케이션 코드는 엔터프라이즈 빈 3.x API 및 Jakarta Persistence를 사용해야 합니다. Enterprise Beans 2.1을 실행하는 데 필요한 더 이상 사용되지 않는 기능 및 변경 사항에 대한 자세한 내용은 JBoss EAP 6 마이그레이션 가이드 의 다음 섹션을 참조하십시오.
JBoss EAP 6에서는 서버 구성 파일의 JBoss EAP 7에서는 기본 원격 커넥터와 포트가 변경되었습니다. 이 및 서버 구성 변경 사항에 대한 자세한 내용은 이 가이드의 다음 섹션을 참조하십시오. Enterprise bean 엔터티 빈은 JBoss EAP 7에서 지원되지 않습니다. 엔터티 빈을 자카르타 지속성으로 마이그레이션하는 방법에 대한 자세한 내용은 이 가이드의 다음 섹션을 참조하십시오. |
Hibernate 및 Jakarta Persistence | JBoss EAP 7.4는 Jakarta Persistence 2.2를 구현하고 Hibernate 5.3을 포함합니다. Hibernate Search 버전 5.10도 포함되어 있습니다. 기타 변경 사항에는 Jakarta Enterprise Beans 엔터티 빈에 대한 지원 제거 및 Jakarta Persistence 속성에 대한 추가 업데이트가 포함됩니다. 이러한 변경 사항이 애플리케이션에 미치는 영향에 대한 자세한 내용은 이 가이드의 다음 섹션을 참조하십시오. 참고 JBoss EAP와 함께 제공된 것과 다른 Hibernate 버전은 지원되지 않습니다. JBoss EAP와 함께 제공되는 버전은 테스트된 Hibernate의 유일한 버전이며 결함을 위해 패치가 제공되는 유일한 버전입니다. |
Jakarta RESTful Web Services 및 RESTEasy | JBoss EAP 7에는 RESTEasy 3이 포함되어 있으며, 많은 클래스가 더 이상 사용되지 않습니다. jackson의 버전이 버전 1.에서 버전 2.6.3 이상으로 변경되었습니다. 이러한 변경 사항에 대한 자세한 내용은 이 가이드의 다음 섹션을 참조하십시오. |
JBoss AOP | JBoss AOP(심각 지향 프로그래밍)가 JBoss EAP 6에서 제거되었습니다. JBoss AOP를 사용하는 애플리케이션을 리팩터링하는 방법에 대한 자세한 내용은 JBoss EAP 6 마이그레이션 가이드의 다음 섹션을 참조하십시오. |
JGroups 및 클러스터링 | 클러스터링을 활성화하고 JBoss EAP 6에서 바인드 주소를 지정하는 방법. 자세한 내용은 JBoss EAP 6 마이그레이션 가이드 의 다음 섹션을 참조하십시오.
JBoss EAP 7에서 JGroups는 공용 네트워크 인터페이스 대신 사설 네트워크 인터페이스를 사용하도록 기본 설정되며 |
Java 네이밍 및 디렉터리 인터페이스 | JBoss EAP 6는 새로운 표준화된 글로벌 Java Naming and Directory Interface 네임스페이스와 애플리케이션의 다양한 범위에 매핑되는 일련의 관련 네임스페이스를 구현했습니다. 새 Java Naming 및 Directory Interface 네임스페이스 규칙을 사용하는 데 필요한 애플리케이션 변경 정보는 JBoss EAP 6 마이그레이션 가이드 의 다음 섹션을 참조하십시오. |
Jakarta Server Faces | JBoss EAP 6.4에서는 이전 버전을 사용하도록 애플리케이션을 구성할 수 있습니다. 현재 Jakarta Server Faces 2.3이 포함된 JBoss EAP 7.4에서는 이 기능을 더 이상 사용할 수 없습니다. 자세한 내용은 이 가이드의 다음 섹션을 참조하십시오. |
로깅 | JBoss EAP 6는 JBoss EAP 7에서 여전히 사용되는 새로운 JBoss Logging 프레임워크를 도입했습니다. 타사 로깅 프레임워크를 사용하는 애플리케이션은 모듈식 클래스 로드 변경의 영향을 받을 수 있습니다. 이러한 변경 사항에 대한 정보는 JBoss EAP 6 마이그레이션 가이드 의 다음 섹션을 검토하십시오.
JBoss EAP 7에서는 이제 |
메시징 및 자카르타 메시징 | JBoss EAP 7에서 ActiveMQ Artemis는 HornetQ를 기본 제공 메시징 프로바이더로 교체했습니다. 메시징 구성을 마이그레이션하는 가장 좋은 방법은 JBoss EAP 7 기본 서버 구성을 시작하고 다음 가이드를 사용하여 현재 메시징 구성 변경 사항을 적용하는 것입니다.
JBoss Messaging에서 HornetQ로 이동하는 데 필요한 변경 사항을 이해하려면 JBoss EAP 6 마이그레이션 가이드 의 다음 섹션을 검토하십시오. 이 가이드에서 HornetQ 구성 및 관련 메시징 데이터를 마이그레이션하는 방법에 대한 다음 정보를 확인하십시오. |
ORB |
JBoss EAP 6에서는 JacORB 구성이 ORB 구성을 마이그레이션하는 가장 좋은 방법은 JBoss EAP 7 기본 서버 구성으로 시작하고 JBoss EAP 7.4 구성 가이드 의 다음 섹션을 사용하여 현재 ORB 구성 변경 사항을 적용하는 것입니다. |
원격 호출 |
원격 호출을 위해 JBoss EAP 6에 새로운 엔터프라이즈 빈 클라이언트 API가 도입되었지만 새 API를 사용하도록 애플리케이션 코드를 다시 작성하지 않으려면 엔터프라이즈 빈에 대한 원격 액세스에 대해 JBoss EAP 7에서 기본 커넥터 및 기본 원격 연결 포트가 변경되었습니다. 자세한 내용은 이 가이드의 다음 섹션을 참조하십시오. |
Seam 2.x | Seam 2.2 애플리케이션에 대한 공식 지원은 JBoss EAP 6에서 삭제되었지만, Seam 2.2 애플리케이션의 종속성을 해당 릴리스에서 실행하도록 구성할 수 있었습니다. 현재 Jakarta Server Faces 2.3 및 Hibernate 5.3이 포함된 JBoss EAP 7.4는 Red Hat JBoss Web Framework Kit의 종료로 인해 Seam 2.2 또는 Seam 2.3을 지원하지 않습니다. Weld CDI 빈을 사용하여 Seam 구성 요소를 다시 작성하는 것이 좋습니다. |
보안 | JBoss EAP 6의 보안 업데이트에는 기본 인증을 위한 보안을 구성하는 방법에 대한 보안 도메인 이름 변경 및 변경 사항이 포함되어 있습니다. LDAP 보안 영역 구성이 서버 구성 파일로 이동되었습니다. 자세한 내용은 JBoss EAP 6 마이그레이션 가이드 의 다음 섹션을 참조하십시오. JBoss EAP 7의 보안에 영향을 주는 업데이트에는 서버 구성 변경 및 애플리케이션 변경 사항이 포함됩니다. 자세한 내용은 본 가이드의 다음 섹션에서 확인할 수 있습니다. |
Spring 애플리케이션 | Spring 4.2.x는 JBoss EAP 7에서 지원하는 가장 빠른 안정적인 Spring 버전입니다. Apache CXF Spring 웹 서비스 및 Spring RESTEasy 통합 변경에 대한 자세한 내용은 이 가이드의 다음 섹션을 참조하십시오. |
트랜잭션 | JBoss EAP 6에서는 트랜잭션 구성이 통합되고 서버 구성 파일로 이동되었습니다. 기타 JTA 노드 식별자 설정 변경 및 JTS 활성화 방법이 포함된 업데이트. 자세한 내용은 JBoss EAP 6 마이그레이션 가이드의 다음 섹션을 참조하십시오.
JBoss EAP 6의 |
센서 | Undertow가 JBoss EAP 7에서 JBoss Web을 대체한 것은 더 이상 지원되지 않습니다. 이 가이드의 다음 섹션을 참조하십시오. |
웹 서비스 | JBoss EAP 6에는 JBossWS 4가 포함되어 있습니다. 해당 버전 업데이트에 필요한 변경 사항에 대한 자세한 내용은 JBoss EAP 6 마이그레이션 가이드의 다음 섹션을 참조하십시오. JBoss EAP 7에서 JBossWS 5를 도입했습니다. 필요한 업데이트는 이 가이드의 다음 섹션을 참조하십시오. |
부록 A. 참고 자료
A.1. jacorb 하위 시스템 마이그레이션 작업 경고
마이그레이션
작업은 모든 리소스와 특성을 처리할 수 없습니다. 다음 표에는 jacorb
하위 시스템에 대한 마이그레이션
또는 describe-migration
작업을 실행할 때 볼 수 있는 몇 가지 경고가 나열되어 있습니다.
마이그레이션
작업의 출력에 "마이그레이션할 수 없음" 또는 "마이그레이션할 수 없음" 항목이 표시되면 서버 구성의 마이그레이션이 성공적으로 완료되었지만 모든 요소 및 특성을 자동으로 마이그레이션할 수 없음을 나타냅니다. 이러한 구성을 수정하려면 "마이그레이션-경고"에서 제공하는 제안 사항을 따라야 합니다.
경고 메세지 | 기능 / 수정 방법 |
---|---|
|
$ EAP_HOME/bin/standalone.sh --start-mode=admin-only
|
속성 X 는 OpenJDK ORB를 사용하여 에뮬레이션할 수 없으며 지원되지 않습니다. |
지정된 속성의 구성은 지원되지 않으며 새
지원되지 않는 속성은 다음과 같습니다. |
속성 X 는 표현식을 사용합니다. 이러한 식을 해결하는 데 사용되는 구성 속성은 새 | 표현식을 사용하는 속성은 관리자가 수동으로 구성해야 합니다.
예를 들어 JBoss EAP 6의 |
마이그레이션할 수 없습니다: 새 | 메시지에는 설명이 포함되어 있습니다. |
A.2. 메시징 하위 시스템 마이그레이션 작업 경고
마이그레이션
작업은 모든 리소스와 특성을 처리할 수 없습니다. 다음 표에는 메시징
하위 시스템에 대한 마이그레이션
또는 describe-migration
작업을 실행할 때 볼 수 있는 몇 가지 경고가 나열되어 있습니다.
마이그레이션
작업의 출력에 "마이그레이션할 수 없음" 또는 "마이그레이션할 수 없음" 항목이 표시되면 서버 구성의 마이그레이션이 성공적으로 완료되었지만 모든 요소 및 특성을 자동으로 마이그레이션할 수 없음을 나타냅니다. 이러한 구성을 수정하려면 "마이그레이션-경고"에서 제공하는 제안 사항을 따라야 합니다.
경고 메세지 | 기능 / 수정 방법 |
---|---|
|
$ EAP_HOME/bin/standalone.sh --start-mode=admin-only |
리소스 X 에서 | 메시지에는 설명과 수정 방법이 포함되어 있습니다. |
리소스 X 에서 | 메시지에는 설명과 수정 방법이 포함되어 있습니다. |
리소스 X 에서 특성 | 메시지에는 설명과 수정 방법이 포함되어 있습니다. |
리소스 X 에서 특성 |
브로드캐스트 |
X 를 제공하는 클래스는 마이그레이션 중에 삭제됩니다. 새 | JBoss EAP 7에서는 메시징 인터셉터 지원이 상당히 다릅니다. 이전 버전의 하위 시스템에서 구성된 인터셉터는 마이그레이션 중에 삭제됩니다. 자세한 내용은 Migrate Messaging Interceptors 를 참조하십시오. |
X 의 HA 구성을 마이그레이션할 수 없습니다. |
즉, |
리소스 X 에서 | 메시지에는 설명과 수정 방법이 포함되어 있습니다. |
리소스 X 에서 | 메시지에는 설명과 수정 방법이 포함되어 있습니다. |
리소스 X 에서 특성 | 메시지에는 설명과 수정 방법이 포함되어 있습니다. |
리소스 X 에서 특성 |
|
|
레거시 HornetQ 원격 |
리소스 Y 에서 특성 X 를 마이그레이션할 수 없습니다. 특성은 시스템 속성에 따라 다르게 해석할 수 있는 표현식을 사용합니다. 마이그레이션 후에는 표현식 대신 실제 값을 사용하여 이 속성을 다시 추가해야 합니다. | 이 경고는 마이그레이션에서 특성 X 를 마이그레이션 프로세스 중 구체적인 값으로 확인할 수 없는 경우 표시됩니다. 값이 취소되고 속성을 수동으로 마이그레이션해야 합니다. 이 작업은 다음 사례에서 수행됩니다.
|
리소스 Y 에서 특성 X 를 마이그레이션할 수 없습니다. 이 특성은 새 |
일부 속성은 새
|
리소스 X 에서 | 메시지에는 설명이 포함되어 있습니다. |
더 이상 사용되지 않는 브로드캐스트-그룹 또는 discovery-group 속성 교체
더 이상 사용되지 않는 브로드캐스트 그룹 또는
특성으로 교체하는 것이 좋습니다. 관리 CLI를 사용하여 새 속성을 추가할 수 있습니다.
discovery-group
특성을 socket-
binding
이 예제에서는 메시징
하위 시스템에서 다음 discovery-group
구성이 포함된 독립 실행형 서버를 마이그레이션한다고 가정합니다.
<discovery-groups> <discovery-group name="my-discovery-group"> <group-address>224.0.1.105</group-address> <group-port>56789</group-port> </discovery-group> </discovery-groups>
메시징
하위 시스템에 대해 마이그레이션
작업을 실행하면 다음과 같은 출력 및 경고가 표시됩니다.
/subsystem=messaging:migrate { "outcome" => "success", "result" => {"migration-warnings" => [ "WFLYMSG0084: Can not migrate attribute group-address from resource [ (\"subsystem\" => \"messaging-activemq\"), (\"server\" => \"default\"), (\"discovery-group\" => \"my-discovery-group\") ]. Use instead the socket-binding attribute to configure this discovery-group.", "WFLYMSG0084: Can not migrate attribute group-port from resource [ (\"subsystem\" => \"messaging-activemq\"), (\"server\" => \"default\"), (\"discovery-group\" => \"my-discovery-group\") ]. Use instead the socket-binding attribute to configure this discovery-group." ]} }
migrate
작업은 이제 다음과 같이 구성된 새 messaging-activemq 하위 시스템에 "my-discovery-
group" 이라는 검색
그룹을 생성합니다.
<discovery-group name="my-discovery-group"/>
이제 다음 관리 CLI 명령을 사용하여 "my-discovery -group-socket-binding
"이라는 서버 구성 파일에 socket-binding 요소를 생성해야 합니다.
/socket-binding-group=standard-sockets/socket-binding=my-discovery-group-socket-binding:add(multicast-address=224.0.1.105, multicast-port=56789)
다음으로 다음 관리 CLI 명령을 사용하여 서버 구성 파일의 messaging
-group에 추가합니다.
-activemq 하위 시스템에서 새로 생성된
discovery-group"이라는 discoverysocket-binding
을 "my-
/subsystem=messaging-activemq/server=default/discovery-group=my-discovery-group:write-attribute(name=socket-binding,value=my-discovery-group-socket-binding)
이러한 명령은 서버 구성 파일에 다음 XML을 생성합니다.
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> <server name="default"> ... <discovery-group name="my-discovery-group" socket-binding="my-discovery-group-socket-binding"/> ... </server> </subsystem> ... <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> ... <socket-binding name="my-discovery-group-socket-binding" multicast-address="224.0.1.105" multicast-port="56789"/> ... </socket-binding-group>
A.3. 웹 하위 시스템 마이그레이션 작업 경고
마이그레이션
작업은 모든 리소스와 특성을 처리할 수 없습니다. 다음 표에는 웹
하위 시스템에 대한 마이그레이션
또는 describe-migration
작업을 실행할 때 볼 수 있는 몇 가지 경고가 나열되어 있습니다.
마이그레이션
작업의 출력에 "마이그레이션할 수 없음" 또는 "마이그레이션할 수 없음" 항목이 표시되면 서버 구성의 마이그레이션이 성공적으로 완료되었지만 모든 요소 및 특성을 자동으로 마이그레이션할 수 없음을 나타냅니다. 이러한 구성을 수정하려면 "마이그레이션-경고"에서 제공하는 제안 사항을 따라야 합니다.
경고 메세지 | 기능 / 수정 방법 |
---|---|
관리자 전용 모드에서만 허용된 마이그레이션 작업 |
$ EAP_HOME/bin/standalone.sh --admin-only |
리소스 X를 마이그레이션할 수 없습니다 |
이전 버전의 JBoss EAP에서 이 리소스에 표시된 동작은 마이그레이션되지 않았습니다. 관리자는 JBoss EAP 7의 new |
리소스 Y 에서 특성 X 를 마이그레이션할 수 없습니다. |
이전 버전의 JBoss EAP에서 이 resource 속성에 표시된 동작은 마이그레이션되지 않았습니다. 관리자는 JBoss EAP 7의 new 마이그레이션되지 않은 속성 목록은 Web Subsystem Migration Operation Attribute Warnings 를 참조하십시오. |
SSL 구성이 정의되지 않았으므로 SSL 커넥터를 마이그레이션할 수 없습니다 | 메시지에는 설명이 포함되어 있습니다. |
| 메시지에는 설명이 포함되어 있습니다. |
| 메시지에는 설명이 포함되어 있습니다. |
pilot X를 마이그레이션할 수 없습니다 |
이전 버전의 JBoss EAP에서 표시된 동작은 마이그레이션되지 않았습니다. 관리자는 JBoss EAP 7의 new 이 경고는 다음 센서에 대해 발생할 수 있습니다.
|
요소 Y에서 특성 X 를 마이그레이션할 수 없습니다 |
이전 버전의 JBoss EAP에서 이 marks 속성에 표시된 동작은 마이그레이션되지 않았습니다. 관리자는 JBoss EAP 7의 new
|
웹 하위 시스템 마이그레이션 작업 속성 경고
마이그레이션
작업은 모든 JBoss Web 속성을 처리할 수 없습니다. 처리되지 않은 속성을 수동으로 마이그레이션하는 방법에 대한 자세한 내용은 다음 참조 표를 참조하십시오.
웹 SSL 커넥터 속성
다음 특성은 JBoss EAP 6에서 SSL 커넥터를 구성하는 데 사용되었습니다. OpenSSL 네이티브 라이브러리는 JBoss EAP 7에서 지원되지 않으므로 동일한 설정이 없습니다.
속성 | 설명 | Undertow 동등 |
---|---|---|
ca-revocation-url | 폐기 목록이 포함된 파일 또는 URL입니다. | Undertow에 동등한 항목이 없습니다. |
certificate-file | OpenSSL 암호화를 사용하는 경우 서버 인증서가 포함된 파일의 경로입니다. | Undertow에 동등한 항목이 없습니다. |
ssl-protocol | SSL 프로토콜 문자열입니다. | Undertow에 동등한 항목이 없습니다. |
verify-depth | 클라이언트에 유효한 인증서가 없음을 결정하기 전에 확인된 최대 중간 인증서 발행자 수입니다. | Undertow에 동등한 항목이 없습니다. |
웹 정적 리소스 속성
다음 static-resources
요소 특성은 DefaultServlet 또는
에서 정적 리소스를 처리하는 방법을 설명하는 데 사용되었습니다. Undertow에서 WebDAV를 지원하지 않으므로 이러한 속성에 대한 동등한 항목이 없습니다. 자세한 내용은 https://issues.jboss.org/browse/JBEAP-1036 의 내용을 참조하십시오.
WebdavServlet
속성 | 설명 | Undertow 동등 |
---|---|---|
비활성화됨 | 기본 서블릿 매핑을 활성화합니다. | Undertow에 동등한 설정이 없습니다. |
파일 인코딩 | 정적 파일을 읽을 때 사용할 파일 인코딩. | Undertow에 동등한 설정이 없습니다. |
max-depth |
| 이는 WebDAV 설정이며 Undertow에서 WebDAV를 지원하지 않습니다. |
읽기 전용 | HTTP 메서드 작성 허용(PUT, DELETE). | 이는 WebDAV 설정이며 Undertow에서 WebDAV를 지원하지 않습니다. |
secret | WebDAV 잠금 작업을 위한 비밀. | 이는 WebDAV 설정이며 Undertow에서 WebDAV를 지원하지 않습니다. |
sendfile | 지정된 바이트 크기보다 큰 파일에 대해 가능한 경우 sendfile을 활성화합니다. | Undertow에서 적절한 기본값으로 설정되며 구성할 수 없습니다. |
webdav | WebDAV 기능을 활성화합니다. | Undertow에서는 WebDAV를 지원하지 않습니다. |
웹 SSO 리소스 속성
SSO는 이전 릴리스와 다르게 처리되며 JBoss EAP 7에는 동등한 특성 설정이 없습니다.
JBoss Web 속성 | 설명 | Undertow 동등 |
---|---|---|
cache-container | 클러스터형 SSO에 사용할 캐시 컨테이너의 이름입니다. | Undertow에는 더 이상 이 설정이 필요하지 않습니다. 이는 기본적으로 분산 클러스터형 환경에서 작동합니다. |
cache-name | 클러스터된 SSO에 사용할 캐시의 이름입니다. | Undertow에는 더 이상 이 설정이 필요하지 않습니다. 이는 기본적으로 분산 클러스터형 환경에서 작동합니다. |
다시 인증 | 각 요청이 다시 인증되어야 하는지 여부입니다. |
JBoss EAP 6의 |
웹 액세스 로그 속성
JBoss Web 속성 | 설명 | Undertow 동등 |
---|---|---|
resolve-hosts | 액세스 로깅을 위해 호스트를 확인할지 여부입니다. | 커넥터에서 설정을 사용하여 동일한 동작을 수행합니다. |
웹 커넥터 속성
JBoss Web 속성 | 설명 | Undertow 동등 |
---|---|---|
실행자 | 이 커넥터의 스레드를 처리하는 데 사용해야 하는 실행자의 이름입니다. |
이제 자세한 내용은 스레드 하위 시스템 구성 마이그레이션을 참조하십시오. |
proxy-binding | 리디렉션을 보낼 때 사용되는 호스트 및 포트를 정의하는 소켓 바인딩입니다. | 직접 동등하지는 않습니다. 사용 가능한 구성 옵션은 JBoss EAP 구성 가이드 의 https-listener 특성을 참조하십시오. |
redirect-port | 보안 커넥터로 리디렉션하기 위한 포트입니다. |
이 속성은 JBoss EAP 6에서 더 이상 사용되지 않으며 자세한 내용은 JBoss EAP 구성 가이드에서 https-listener 속성 에서 참조하십시오. |
A.4. JBoss Web System 속성 참조 마이그레이션
이 참조에서는 이전에 JBoss Web 구성에 사용된 시스템 속성을 JBoss EAP 7의 Undertow에 대한 동등한 구성으로 매핑하는 방법을 설명합니다.
표 A.1. 서블릿 컨테이너 및 커넥터 시스템 속성 매핑
JBoss EAP 6 시스템 속성 | 설명 |
JBoss EAP 7에서와 동등 | |
jvmRoute |
|
관리 CLI 명령: /subsystem=undertow:write-attribute(name=instance-id,value=VALUE) | |
org.apache.tomcat.util.buf.StringCache.byte.enabled |
|
동등한 구성 없음 | |
org.apache.tomcat.util.buf.StringCache.char.enabled |
|
동등한 구성 없음 | |
org.apache.tomcat.util.buf.StringCache.cacheSize |
문자열 캐시의 크기입니다. 값을 지정하지 않으면 기본값 |
동등한 구성 없음 | |
org.apache.tomcat.util.buf.StringCache.maxStringSize |
캐시할 최대 문자열 길이입니다. 값을 지정하지 않으면 기본값 |
동등한 구성 없음 | |
org.apache.tomcat.util.http.FastHttpDateFormat.CACHE_SIZE |
구문 분석 및 포맷된 날짜 값을 사용할 캐시의 크기입니다. 값을 지정하지 않으면 기본값 |
동등한 구성 없음 | |
org.apache.catalina.core.StandardService.DELAY_CONNECTOR_STARTUP |
|
동등한 구성 없음 | |
org.apache.catalina.connector.Request.SESSION_ID_CHECK |
|
동등한 구성 없음 | |
org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER |
|
custom | |
org.apache.tomcat.util.http.Parameters.MAX_COUNT |
사후 본문에서 구문 분석할 수 있는 최대 매개 변수 수입니다. 초과하면 |
관리 CLI 명령: /subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=max-parameters,value=VALUE) /subsystem=undertow/server=default-server/https-listener=default:write-attribute(name=max-parameters,value=VALUE) /subsystem=undertow/server=default-server/ajp-listener=default:write-attribute(name=max-parameters,value=VALUE) | |
org.apache.tomcat.util.http.MimeHeaders.MAX_COUNT |
HTTP 요청에 전송할 수 있는 최대 헤더 수입니다. 초과하면 |
관리 CLI 명령: /subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=max-headers,value=VALUE) /subsystem=undertow/server=default-server/https-listener=default:write-attribute(name=max-headers,value=VALUE) /subsystem=undertow/server=default-server/ajp-listener=default:write-attribute(name=max-headers,value=VALUE) | |
org.apache.tomcat.util.net.MAX_THREADS |
커넥터가 요청을 처리하는 데 사용할 최대 스레드 수입니다. 기본값은 |
관리 CLI 명령: /subsystem=io/worker=default:write-attribute(name=task-max-threads, value=VALUE) | |
org.apache.coyote.http11.Http11Protocol.MAX_HEADER_SIZE |
HTTP 헤더의 최대 크기(바이트)입니다. 초과하면 |
관리 CLI 명령: /subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=max-header-size,value=VALUE) /subsystem=undertow/server=default-server/https-listener=default:write-attribute(name=max-header-size,value=VALUE) /subsystem=undertow/server=default-server/ajp-listener=default:write-attribute(name=max-header-size,value=VALUE) | |
org.apache.coyote.http11.Http11Protocol.COMPRESSION |
HTTP 커넥터로 간단한 압축을 사용할 수 있습니다. 기본값은 |
관리 CLI를 사용하여 필터를 구성합니다. # Create a filter /subsystem=undertow/configuration=filter/gzip=gzipfilter:add() /subsystem=undertow/server=default-server/host=default-host/filter-ref=gzipfilter:add() | |
org.apache.coyote.http11.Http11Protocol.COMPRESSION_RESTRICTED_UA | 사용자 에이전트 regexps는 압축된 콘텐츠를 수신하지 않습니다. 기본값은 비어 있습니다. |
관리 CLI를 사용하여 필터에 서술자를 구성합니다. # Use a predicate in a filter /subsystem=undertow/configuration=filter/gzip=gzipfilter:add() /subsystem=undertow/server=default-server/host=default-host/filter-ref=gzipfilter:add(predicate="regex[pattern='AppleWebKit',value=%{i,User-Agent}]") | |
org.apache.coyote.http11.Http11Protocol.COMPRESSION_MIME_TYPES |
압축 가능한 콘텐츠의 콘텐츠 유형 접두사입니다. 기본값은 |
관리 CLI를 사용하여 필터에 서술자를 구성합니다. # Use a predicate in a filter /subsystem=undertow/configuration=filter/gzip=gzipfilter:add() /subsystem=undertow/server=default-server/host=default-host/filter-ref=gzipfilter:add(predicate="regex[pattern='text/html',value=%{o,Content-Type}]") | |
org.apache.coyote.http11.Http11Protocol.COMPRESSION_MIN_SIZE |
압축할 최소 콘텐츠 크기. 기본값은 |
관리 CLI를 사용하여 필터에 서술자를 구성합니다. # Use a predicate in a filter /subsystem=undertow/configuration=filter/gzip=gzipfilter:add() /subsystem=undertow/server=default-server/host=default-host/filter-ref=gzipfilter:add(predicate="max-content-size[value=MIN_SIZE]") | |
org.apache.coyote.http11.DEFAULT_CONNECTION_TIMEOUT |
기본 소켓 시간 제한. 기본값은 |
관리 CLI 명령: /subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=no-request-timeout,value=VALUE) /subsystem=undertow/server=default-server/https-listener=default:write-attribute(name=no-request-timeout,value=VALUE) /subsystem=undertow/server=default-server/ajp-listener=default:write-attribute(name=no-request-timeout,value=VALUE) | |
org.jboss.as.web.deployment.DELETE_WORK_DIR_ONCONTEXTDESTROY |
이 속성을 사용하여 JSP 소스를 다시 컴파일하도록 |
동등한 구성 없음 | |
org.apache.tomcat.util.buf.StringCache.trainThreshold |
캐시를 활성화하기 전에 |
동등한 구성 없음 |
표 A.2. 매핑 EL 시스템 속성
JBoss EAP 6 시스템 속성 | 설명 |
JBoss EAP 7에서와 동등 | |
org.apache.el.parser.COERCE_TO_ZERO |
EL(Expression Language) 2.0 사양에 따르면 |
동등한 구성이 없습니다. EL 3.0 사양에 따라 빈 문자열과 null은 기본이 아닌 데이터 유형에 대해 0으로 처리되지 않습니다. |
표 A.3. 서버 페이지 시스템 속성 매핑
JBoss EAP 6 시스템 속성 | 설명 |
JBoss EAP 7에서와 동등 | |
org.apache.jasper.compiler.Generator.VAR_EXPRESSIONFACTORY |
표현식 언어 표현식 팩토리에 사용할 변수의 이름입니다. 값을 지정하지 않으면 기본값 |
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.compiler.Generator.VAR_INSTANCEMANAGER |
인스턴스 관리자 팩토리에 사용할 변수의 이름입니다. 값을 지정하지 않으면 기본값 |
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING |
|
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.Constants.DEFAULT_TAG_BUFFER_SIZE |
|
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.runtime.JspFactoryImpl.USE_POOL |
|
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.runtime.JspFactoryImpl.POOL_SIZE |
ThreadLocal PageContext의 크기입니다. 값을 지정하지 않으면 기본값 |
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.Constants.JSP_SERVLET_BASE |
JSP에서 생성된 서블릿의 기본 클래스입니다. 값을 지정하지 않으면 |
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.Constants.SERVICE_METHOD_NAME |
기본 클래스에서 호출하는 서비스 메서드의 이름입니다. 값을 지정하지 않으면 기본값 |
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.Constants.SERVLET_CLASSPATH |
JSP의 클래스 경로를 제공하는 ServletContext 속성의 이름입니다. 값을 지정하지 않으면 |
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.Constants.JSP_FILE |
서블릿 정의의 |
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.Constants.PRECOMPILE |
JSP 엔진이 서블릿을 사전에 생성하지만 호출하지 않도록 하는 쿼리 매개 변수의 이름입니다. 값을 지정하지 않으면 |
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.Constants.JSP_PACKAGE_NAME |
컴파일된 JSP의 기본 패키지 이름입니다. 값을 지정하지 않으면 기본값 |
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.Constants.TAG_FILE_PACKAGE_NAME |
태그 파일에서 생성된 태그 핸들러의 기본 패키지 이름입니다. 값을 지정하지 않으면 |
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.Constants.TEMP_VARIABLE_NAME_PREFIX |
생성된 임시 변수 이름에 사용할 접두사입니다. 값을 지정하지 않으면 기본값 |
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.Constants.USE_INSTANCE_MANAGER_FOR_TAGS |
|
시스템 속성이 변경되지 않았습니다 | |
org.apache.jasper.Constants.INJECT_TAGS |
|
시스템 속성이 변경되지 않았습니다 |
표 A.4. 매핑 보안 시스템 속성
JBoss EAP 6 시스템 속성 | 설명 |
JBoss EAP 7에서와 동등 | |
org.apache.catalina.connector.RECYCLE_FACADES |
|
동등한 구성 없음 | |
org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH |
이 문자가 |
동등한 구성 없음 | |
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH |
이 경우 |
관리 CLI 명령: /subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=allow-encoded-slash,value=VALUE) /subsystem=undertow/server=default-server/https-listener=default:write-attribute(name=allow-encoded-slash,value=VALUE) /subsystem=undertow/server=default-server/ajp-listener=default:write-attribute(name=allow-encoded-slash,value=VALUE) | |
org.apache.catalina.STRICT_SERVLET_COMPLIANCE |
값을 지정하지 않으면 |
기본적으로 준수 | |
org.apache.catalina.core.StandardWrapperValve.SERVLET_STATS |
|
동등한 구성 없음 | |
org.apache.catalina.session.StandardSession.ACTIVITY_CHECK |
|
동등한 구성 없음 |
A.5. 릴리스 간의 호환성 및 상호 운용성
이 섹션에서는 JBoss EAP 5, JBoss EAP 6 및 JBoss EAP 7 릴리스 간의 클라이언트 및 서버 엔터프라이즈 빈 및 메시징 구성 요소의 호환성 및 상호 운용성에 대해 설명합니다.
IIOP에 대한 엔터프라이즈 빈
다음 구성에서는 문제가 발생하지 않아야 합니다.
- JBoss EAP 5 클라이언트에서 JBoss EAP 7 서버로 연결
- JBoss EAP 6 클라이언트에서 JBoss EAP 7 서버로 연결
- JBoss EAP 7 클라이언트에서 JBoss EAP 6 서버로 연결
- JBoss EAP 7 클라이언트에서 JBoss EAP 5 서버로 연결
Java Naming 및 Directory Interface를 사용하여 엔터프라이즈 빈 원격화
다음 구성에서는 문제가 발생하지 않아야 합니다.
- JBoss EAP 6 클라이언트에서 JBoss EAP 7 서버로 연결
- JBoss EAP 7 클라이언트에서 JBoss EAP 6 서버로 연결
JBoss EAP 6는 Enterprise Beans 3.1 사양에 대한 지원을 제공하고 JBoss EAP 7에서 여전히 사용되는 표준화된 글로벌 Java 네이밍 및 디렉터리 인터페이스 네임스페이스 사용을 도입했습니다. Java Naming 및 Directory Interface 네임스페이스의 변경으로 인해 다음 구성이 호환되지 않습니다.
- JBoss EAP 5 클라이언트에서 JBoss EAP 7 또는 JBoss EAP 6 서버로 연결
- JBoss EAP 7 또는 JBoss EAP 6 클라이언트에서 JBoss EAP 5 서버로 연결
표준화된 Java Naming 및 Directory Interface 네임스페이스 변경에 대한 자세한 내용은 JBoss EAP 6 마이그레이션 가이드의 Java Naming 및 Directory Interface 변경 사항을 참조하십시오.
@WebService를 사용한 엔터프라이즈 빈
다음 구성에서는 문제가 발생하지 않아야 합니다.
- JBoss EAP 5 클라이언트에서 JBoss EAP 7 서버로 연결
- JBoss EAP 6 클라이언트에서 JBoss EAP 7 서버로 연결
- JBoss EAP 7 클라이언트에서 JBoss EAP 6 서버로 연결
- JBoss EAP 7 클라이언트에서 JBoss EAP 5 서버로 연결
메시징 독립 실행형 클라이언트
다음 구성에서는 문제가 발생하지 않아야 합니다.
- JBoss EAP 6 클라이언트에서 JBoss EAP 7 서버로 연결
- JBoss EAP 7 클라이언트에서 JBoss EAP 6 서버로 연결
다음 구성에서 클라이언트가 일반 메시징 API가 아닌 메시징 브로커별 HornetQ API를 사용하는 경우 연결이 가능합니다. 그러나 JBoss EAP 7에서 제공되는 JBoss EAP 레거시 Java 네이밍 및 디렉터리 인터페이스 이름 지정 확장 기능을 사용하여 Java 네이밍 및 디렉터리 인터페이스 조회를 처리해야 합니다.
- JBoss EAP 5 클라이언트에서 JBoss EAP 7 서버로 연결
JBoss EAP 7 기본 제공 메시징은 프로토콜 호환성 문제로 인해 JBoss EAP 5와 함께 제공되는 HornetQ 2.2.x에 연결할 수 없습니다. 따라서 다음 구성이 호환되지 않습니다.
- JBoss EAP 7 클라이언트에서 JBoss EAP 5 서버로 연결
메시징 MDB
다음 구성에서는 문제가 발생하지 않아야 합니다.
- JBoss EAP 6 클라이언트에서 JBoss EAP 7 서버로 연결
- JBoss EAP 7 클라이언트에서 JBoss EAP 6 서버로 연결
다음 구성에서 클라이언트가 일반 자카르타 메시징 API가 아닌 메시징 브로커별 HornetQ API를 사용하는 경우 연결이 가능합니다. 그러나 JBoss EAP 7에서 제공되는 JBoss EAP 레거시 Java 네이밍 및 디렉터리 인터페이스 이름 지정 확장 기능을 사용하여 Java 네이밍 및 디렉터리 인터페이스 조회를 처리해야 합니다.
- JBoss EAP 5 클라이언트에서 JBoss EAP 7 서버로 연결
JBoss EAP 7 기본 제공 메시징은 프로토콜 호환성 문제로 인해 JBoss EAP 5와 함께 제공되는 HornetQ 2.2.x에 연결할 수 없습니다. 따라서 다음 구성이 호환되지 않습니다.
- JBoss EAP 7 클라이언트에서 JBoss EAP 5 서버로 연결
메시징 브리지
다음 구성에서는 문제가 발생하지 않아야 합니다.
- JBoss EAP 5 클라이언트에서 JBoss EAP 7 서버로 연결
- JBoss EAP 6 클라이언트에서 JBoss EAP 7 서버로 연결
- JBoss EAP 7 클라이언트에서 JBoss EAP 6 서버로 연결
- JBoss EAP 7 클라이언트에서 JBoss EAP 5 서버로 연결
2022-07-02 17:09:43 +1000에 수정