마이그레이션 가이드

Red Hat JBoss Enterprise Application Platform 7.4

애플리케이션을 하나의 주요 Red Hat JBoss Enterprise Application Platform 버전에서 다음 버전으로 마이그레이션하는 방법.

초록

이 가이드에서는 이전 버전의 Red Hat JBoss Enterprise Application Platform에서 애플리케이션을 마이그레이션하는 방법에 대해 설명합니다.

Red Hat 문서에 대한 피드백 제공

문서에 대한 의견을 보내 주셔서 감사합니다. 피드백을 제공하기 위해 문서의 텍스트를 강조 표시하고 주석을 추가할 수 있습니다. Red Hat 설명서에 대한 피드백을 제출하는 방법을 알아보려면 절차의 단계를 따르십시오.

사전 요구 사항

  • Red Hat 고객 포털에 로그인합니다.
  • Red Hat 고객 포털에서 다중 페이지 HTML 형식으로 문서를 봅니다.

절차

  1. 피드백 (Fedback)을 클릭하여 기존 reader 주석을 확인합니다.

    참고

    피드백 기능은 다중 페이지 HTML 형식으로만 활성화됩니다.

  2. 피드백을 제공할 문서의 섹션을 강조 표시합니다.
  3. 선택한 텍스트 옆에 표시되는 프롬프트 메뉴에서 Add Feedback(피드백 추가 )을 클릭합니다.

    텍스트 상자가 페이지 오른쪽에 있는 피드백 섹션에 열립니다.

  4. 텍스트 상자에 피드백을 입력하고 Submit(제출 )을 클릭합니다.

    설명서 문제가 생성되어 있습니다.

  5. 이 문제를 보려면 피드백 보기에서 문제 추적기 링크를 클릭합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

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 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 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 애플리케이션의 배포에 영향을 줄 수 있는 여러 가지 사항이 변경되었습니다. 애플리케이션을 마이그레이션하기 전에 몇 가지 조사 및 계획을 수행하는 것이 좋습니다.

기능 변경, 개발 자료 및 마이그레이션 작업을 지원하는 툴에 익숙해지면 애플리케이션 및 서버 구성을 평가하여 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,messagingweb 하위 시스템을 자동으로 업데이트하는 마이그레이션 작업을 제공합니다. 마이그레이션을 수행하기 전에 jacorb,messagingweb 하위 시스템에 대해 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 서버 구성을 업데이트하려면 아래 단계를 따르십시오.

  1. 시작하기 전에 Back Up Important Data를 검토하고 서버 상태를 검토합니다. 여기에는 서버가 양호한 상태인지 확인하고 적절한 파일이 백업되는지 확인하는 데 중요한 정보가 포함되어 있습니다.
  2. JBoss EAP 6 구성으로 JBoss EAP 7 서버를 시작합니다.

    1. JBoss EAP 7 서버 구성 파일을 백업합니다.
    2. 이전 릴리스의 구성 파일을 JBoss EAP 7 디렉터리에 복사합니다.

      $ cp EAP6_HOME/standalone/configuration/standalone-full.xml EAP7_HOME/standalone/configuration
    3. 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]은 이 버전을 실행하는 서버에서 지원되지 않습니다. 서버가 작동하기 전에 하위 시스템과 확장 기능을 모두 제거하거나 마이그레이션해야 합니다.
  3. 새 터미널을 열고 JBoss EAP 7 설치 디렉터리로 이동한 다음 --controller=remote://localhost:9990 인수를 사용하여 관리 CLI를 시작합니다.

    $ bin/jboss-cli.sh --connect --controller=remote://localhost:9990

JacORB, 메시징 및 웹 하위 시스템 마이그레이션

  1. 마이그레이션을 수행하기 전에 하위 시스템에 대한 구성 변경 사항을 검토하려면 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")]
                }
            ]
        }
    }

  2. migrate 작업을 실행하여 하위 시스템 구성을 JBoss EAP 7에서 대체하는 하위 시스템으로 마이그레이션합니다. 이 작업은 다음 구문을 사용합니다.

    /subsystem=SUBSYSTEM_NAME:migrate
    참고

    메시징 하위 시스템에서 describe-migrationmigrate 작업을 사용하면 기존 클라이언트의 액세스를 구성하는 인수를 전달할 수 있습니다. 명령 구문에 대한 자세한 내용은 Messaging Subsystem Migration and Forward Compatibility 를 참조하십시오.

  3. 명령의 결과 및 결과를 검토합니다. 작업이 성공적으로 완료되고 "마이그레이션 경고" 항목이 없는지 확인하십시오. 즉, 하위 시스템의 마이그레이션 구성이 완료되었습니다.

    예제: 마이그레이션에 성공한 마이그레이션(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."
        ]}
    }

    참고
  4. 서버 구성 파일을 검토하여 확장 프로그램, 하위 시스템 및 네임스페이스가 업데이트되었으며 기존 하위 시스템 구성이 JBoss EAP 7로 마이그레이션되었는지 확인합니다.

    참고

    다음 명령을 사용하여 각 jacorb,messagingweb 하위 시스템에 대해 이 프로세스를 반복해야 합니다.

    /subsystem=jacorb:migrate
    /subsystem=messaging:migrate
    /subsystem=web:migrate
  5. 서버 구성에서 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,jacorbweb 하위 시스템을 마이그레이션하고 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 &quot;%T sec&quot; &quot;%r&quot; %s %b &quot;%{Referer}i&quot; &quot;%{User-agent}i&quot;"/>

JBoss EAP 7에서 Undertow를 사용하도록 변경하면 수신 헤더의 패턴이 %{i,headername} 으로 변경되었습니다.

예제: JBoss EAP 7의 액세스 형식 헤더

<access-log pattern="%h %l %u %t &quot;%T sec&quot; &quot;%r&quot; %s %b &quot;%{i,Referer}&quot; &quot;%{i,User-Agent}&quot;"/>

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

자세한 내용은 아래 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>
  1. 로그 항목을 저장할 데이터베이스에 대한 드라이버 모듈을 생성합니다.
  2. 데이터베이스의 데이터 소스를 구성하고 데이터 소스 하위 시스템에서 사용 가능한 드라이버 목록에 드라이버를 추가합니다.

    <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>
  3. 다음 표현식: jdbc-access-log(datasource=DATASOURCE_JNDI_NAME)를 사용하여 undertow 하위 시스템에서 expression- filter 를 구성합니다.

    <filters>
        <expression-filter name="jdbc-access" expression="jdbc-access-log(datasource='java:jboss/datasources/accessLogDS')" />
        ...
    </filters>

4.5.7. HTTP 메서드 호출 동작 변경

JBoss Web을 웹 서버로 포함하는 JBoss EAP 6.4에서는 기본적으로 HTTP TRACE 메서드 호출이 허용되었습니다.

JBoss EAP 7에서 JBoss Web을 웹 서버로 대체하는 Undertow는 기본적으로 HTTP TRACE 메서드 호출을 허용하지 않습니다. 이 설정은 undertow 하위 시스템에서 http -listener 요소의 disallowed- methods 특성을 사용하여 구성됩니다. 다음 read-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 응답에 추가된 두 개의 응답 헤더 필터가 포함되었습니다.

  • serverJBoss-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에 구성된 idle- timeout 특성은 JBoss EAP 7.1 이상에서 더 이상 사용되지 않습니다. JBoss EAP 6.4는 즉시 활성화를 지원하여 idle-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

이 오류를 해결하려면 캐시를 재구성해야 합니다.

  1. 지침에 따라 서버 및 관리 CLI 시작.
  2. 다음 명령을 실행하여 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-entriestrue 로 설정된 경우 messaging-activemq 하위 시스템은 legacy-connection-factory 리소스를 생성하고 legacy-entriesjms-queuejms-topic 리소스에 추가합니다.

부울 인수 add-legacy-entriesfalse 로 설정된 경우 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-consumersfalse 로 설정되어 클러스터에 소비자가 없는 경우 메시지가 클러스터의 모든 노드에 재배포되었습니다.

이 동작은 JBoss EAP 7에서 변경되었습니다. forward-when-no-consumersfalse 로 설정되어 있고 클러스터에 소비자가 없는 경우 메시지가 재배포되지 않습니다. 대신 해당 노드는 전송된 원래 노드에 보관됩니다.

기본 클러스터 로드 밸런싱 정책 변경

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의 현재 릴리스로 메시징 데이터를 마이그레이션할 수 있습니다.

Jakarta Messaging 지원 공급자로서 HornetQ에서 ActiveMQ Artemis로의 변경으로 인해 메시징 데이터의 형식과 위치가 JBoss EAP 7.0 이상에서 변경되었습니다. 6.4 에서 7.x 릴리스 사이의 메시징 데이터 폴더 이름과 위치에 대한 변경 내용은 메시징 폴더 이름 매핑 을 참조하십시오.

4.9.2.1. 내보내기 및 가져오기를 사용하여 메시징 데이터 마이그레이션

이 방법을 사용하면 이전 릴리스의 메시징 데이터를 XML 파일로 내보낸 다음 import-journal 작업을 사용하여 해당 파일을 가져옵니다.

중요

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/ 디렉터리에 생성됩니다.

데이터를 내보내려면 아래 단계를 수행하십시오.

  1. JBoss EAP 6.4 서버를 중지합니다.
  2. 위에서 설명한 대로 사용자 지정 모듈을 생성합니다.
  3. 다음 명령을 실행하여 데이터를 내보냅니다.

    $ 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
  4. 명령을 완료할 때 로그에 오류 또는 경고 메시지가 없는지 확인합니다.
  5. 운영 체제에 사용할 수 있는 도구를 사용하여 생성된 출력 파일에서 XML의 유효성을 검사합니다.
JBoss EAP 7.x에서 메시징 데이터 내보내기

다음 단계에 따라 JBoss EAP 7.x에서 메시징 데이터를 내보냅니다.

  1. 터미널을 열고 JBoss EAP 7.x 설치 디렉터리로 이동한 다음 관리자 전용 모드로 서버를 시작합니다.

    $ EAP_HOME/bin/standalone.sh -c standalone-full.xml --start-mode=admin-only
  2. 새 터미널을 열고 JBoss EAP 7.x 설치 디렉터리로 이동한 다음 관리 CLI에 연결합니다.

    $ EAP_HOME/bin/jboss-cli.sh --connect
  3. 다음 관리 CLI 명령을 사용하여 메시징 저널 데이터를 내보냅니다.

    /subsystem=messaging-activemq/server=default:export-journal()
  4. 명령을 완료할 때 로그에 오류 또는 경고 메시지가 없는지 확인합니다.
  5. 운영 체제에 사용할 수 있는 도구를 사용하여 생성된 출력 파일에서 XML의 유효성을 검사합니다.
XML 포맷 메시징 데이터 가져 오기

그런 다음 import-journal 작업을 다음과 같이 사용하여 XML 파일을 JBoss EAP 7.0 이상으로 가져옵니다.

중요

대상 서버가 이미 일부 메시징 작업을 수행한 경우 가져오기 실패 시 데이터 손실을 방지하기 위해 import-journal 작업을 시작하기 전에 메시징 폴더를 백업해야 합니다. 자세한 내용은 메시징 폴더 데이터 백업 에서 참조하십시오.

  1. JBoss EAP 6.4 서버를 JBoss EAP 7.4로 마이그레이션하는 경우 관리 CLI 마이그레이션 작업을 사용하거나 JBoss Server 마이그레이션 도구를 실행하여 서버 구성 마이그레이션을 완료했는지 확인하십시오. 툴을 구성하고 실행하는 방법에 대한 자세한 내용은 JBoss Server 마이그레이션 툴 사용을 참조하십시오.
  2. 자카르타 메시징 클라이언트가 연결되지 않고 일반 모드에서 JBoss EAP 7.x 서버를 시작합니다.

    중요

    자카르타 메시징 클라이언트가 연결되지 않고 서버를 시작하는 것이 중요합니다. 이는 import-journal 작업이 Jakarta Messaging 생산자처럼 동작하기 때문입니다. 작업이 진행 중이면 즉시 메시지를 사용할 수 있습니다. 가져오기 및 자카르타 메시징 클라이언트가 연결되어 있는 도중에 이 작업이 실패하면 Jakarta Messaging 클라이언트가 이미 일부 메시지를 사용했을 수 있으므로 복구할 방법이 없습니다.

  3. 새 터미널을 열고 JBoss EAP 7.x 설치 디렉터리로 이동한 다음 관리 CLI에 연결합니다.

    $ EAP_HOME/bin/jboss-cli.sh --connect
  4. 다음 관리 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 작업이 실패하면 다음 단계를 사용하여 복구를 시도할 수 있습니다.

  1. JBoss EAP 7.x 서버를 종료합니다.
  2. 모든 메시징 저널 폴더를 삭제합니다. 메시징 저널 폴더에 대한 올바른 디렉터리 위치를 확인하려면 관리 CLI 명령의 메시징 폴더 백업을 참조하십시오.
  3. 가져오기 전에 대상 서버 메시징 데이터를 백업한 경우 백업 위치에서 이전 단계에서 결정된 메시징 저널 디렉터리로 메시징 폴더를 복사합니다.
  4. 단계를 반복 하여 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 서버 구성
  1. JBoss EAP 6.4 서버를 중지합니다.
  2. HornetQ 저널 및 구성 파일을 백업합니다.

  3. JMS 메시지가 포함된 InQueue JMS 대기열이 JBoss EAP 6.4 서버에 정의되어 있는지 확인합니다.
  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 서버 구성
  1. Jakarta Messaging 브리지 구성을 사용하려면 이전 릴리스에서 HornetQ 서버에 연결하려면 org.steinetq 모듈이 필요합니다. 이 모듈과 해당 직접 종속성은 JBoss EAP 7.x에 없으므로 이전 릴리스에서 다음 모듈을 복사해야 합니다.

    • org.steinetq 모듈을 JBoss EAP 7.x EAP_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 7.x EAP_HOME/modules/org/ tokensetq/main/module.xml 파일에서 HornetQ lib 경로의 <resource-root&gt;를 제거합니다.

      • 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.x EAP_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
  2. 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"/>
  3. 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])
  4. 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>
  5. JBoss EAP 6.4에 대해 보안이 구성된 경우 연결을 생성할 때 Java 네이밍 및 디렉터리 인터페이스 조회에 사용할 올바른 사용자 이름과 암호를 지정하는 Source -context 를 포함하도록 메시징 브리지 구성 <source> 요소도 구성해야 합니다.
메시징 데이터 마이그레이션
  1. 다음 구성에 제공한 정보가 올바른지 확인합니다.

    • 모든 대기열 및 토픽 이름.
    • Java Naming 및 Directory Interface 조회를 위한 java.naming.provider.url.
  2. 대상 Jakarta Messaging 대상을 JBoss EAP 7.x 서버에 배포했는지 확인합니다.
  3. 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 디렉터리 이름

messagingbindings/

activemq/bindings/

messagingjournal/

activemq/journal/

messaginglargemessages/

activemq/largemessages/

messagingpaging/

activemq/paging/

참고

대규모 메시지가 없거나 페이징이 비활성화된 경우 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- master 정책을 구성한 경우 기본값은 false입니다. 이는 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.JMSExceptionserialVersionUID 가 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에서 새 메서드 이름을 찾을 수 있습니다.

  1. 다음 명령을 사용하여 JConsole에 연결합니다.

    $ EAP_HOME/bin/jconsole.sh
  2. JBoss EAP 로컬 프로세스에 연결. "jboss-modules.jar"로 시작해야 합니다.
  3. MBeans 탭에서 jboss.asmessaging-activemqdefaultOperations 를 선택하여 메서드 이름과 속성 목록을 표시합니다.

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>

  • client-timeout
  • max-managed-buf-size
  • max-server-connections
  • outbuf-cache-timeout
  • outbuf-size
  • 연결 재시도 횟수
  • retry-interval
  • name
  • server-timeout

<poa>

  • queue-min
  • queue-max
  • pool-size
  • max-threads

다음 on/off 속성은 더 이상 지원되지 않으며 관리 CLI 마이그레이션 작업을 실행할 때 마이그레이션 되지 않습니다. on 으로 설정된 경우 마이그레이션 경고가 표시됩니다. 이 표에 언급되지 않는 기타 온/오프 속성(예: <security support-ssl="on|off"> )은 여전히 지원되며 성공적으로 마이그레이션됩니다. 유일한 차이점은 해당 값이 on/off에서 true/ false 로 변경됩니다.

표 4.6. ton Off 또는 Remove 속성

요소off로 설정할 속성

<orb>

  • cache-poa-names
  • cache-typecodes
  • print-version
  • use-bom
  • use-imr

<interop>

(24시간 제외)

  • comet
  • Iona
  • chunk-custom-rmi-valuetypes
  • indirection-encoding-disable
  • Lax-boolean-encoding
  • strict-check-on-tc-creation

<poa>

  • 모니터링
  • queue-wait

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 아웃바운드 -커넥션에 always-send-client-cert 관리 속성을 도입했습니다. 이 옵션을 사용하면 아웃바운드 LDAP 연결을 구성하여 항상 클라이언트 인증서가 필요하도록 구성된 LDAP 서버를 지원할 수 있습니다.

LDAP 인증은 다음 두 단계로 수행됩니다.

  1. 계정을 검색합니다.
  2. 자격 증명을 확인합니다.

기본적으로 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&gt ; 하위 요소를 포함하는 <webservice-description&gt; 요소가 포함된 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

문자열

Keep-Alive 또는 close 연결 유형을 사용할지 여부를 지정합니다.

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-apicxf-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.noLocalBC 속성 값을 true 로 설정하여 이 동작을 비활성화할 수 있습니다.

JBoss EAP와 함께 제공되는 버전과 다른 버전을 사용하려는 경우 여전히 JVM에 Bouenciesle을 정적으로 설치할 수 있습니다. 이 경우 정적으로 설치된 Bouncy-le Security Provider가 클래스 경로에 있는 공급자를 통해 선택됩니다. 문제를 방지하려면 Bouncyle 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 인수를 포함하는 javax.xml.ws.Service 생성자를 사용하도록 기존 코드를 업데이트하여 Jakarta XML Web Services 2.2 이상을 구현해야 합니다.

protected Service(URL wsdlDocumentLocation,
       QName serviceName,
       WebServiceFeature... features)

5.1.8. IgnoreHttpsHost CN check change

이전 릴리스에서는 시스템 속성 org.jboss.security.ignoreHttpsHosttrue 로 설정하여 인증서에 제공된 서비스의 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 웹 서비스 배포를 위한 WEB-INF/ 디렉터리에 대한 jboss- webservices.xml 배포 설명자 파일을 구성할 수 있습니다.

JBoss EAP 7에서는 EAR 아카이브의 META -INF/ 디렉터리에 jboss-webservices.xml 배포 설명자 파일을 구성할 수 있습니다. jboss-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-topicsauto-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- selector )에 직접 의존하는 경우, pom.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의 모든 인터셉터는 새로운 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.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 및 SignedOutput 에는 Request 또는 Response 오브젝트에 multipart/signed 로 설정되거나 @Consumes 또는 @ Produces 주석을 사용하여 Content-Type 이 설정되어 있어야 합니다.
  • SignedOutputSignedInput 을 사용하여 @Produces 또는 @ Consumes 주석에 해당 유형을 설정하여 애플리케이션/pkcs7-signature MIME 유형 형식을 바이너리 형식으로 반환할 수 있습니다.
  • @Produces 또는 @Consumes텍스트/일반 MIME 유형인 경우 SignedOutput 은 base64로 인코딩되고 문자열로 전송됩니다.
보안 필터

@RolesAllowed, @ PermitAll 및 @DenyAll 에 대한 보안 필터는 이제 "401 Unauthorized" 대신 "403 Forbidden"을 반환합니다.

클라이언트측 필터

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/* 또는 application/xml* 미디어 유형을 반환할 때 반환된 content-type 헤더에 charactersset=UTF-8 을 추가하지 않도록 하려면 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가 너무 많은 리소스 메서드를 반환했습니다.

일치하는 알고리즘에는 세 가지 단계가 있습니다.

  1. 요청 경로를 사용하여 가능한 리소스 클래스를 선택합니다.
  2. 요청 경로를 사용하여 가능한 리소스 방법을 선택합니다.
  3. 들어오는 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에서만 사용할 수 있습니다.

추가 리소스

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가 none 인 bean.xml 파일이 포함되어 있습니다.
  • 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.MFjboss-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에서 제거되었습니다.

클래스 및 패키지의 기타 변경 사항
유형 처리
트랜잭션 관리
  • 트랜잭션 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는 트랜잭션을 관리하기 위해 기본 to jdbc 를 설정합니다. 이 기본값은 애플리케이션이 실제로 자카르타 트랜잭션을 사용하는 경우 문제가 발생합니다. Jakarta Transactions를 사용하는Jakarta Persistence 애플리케이션은 hibernate.transaction.coordinator_class 속성 값을 jta 로 명시적으로 설정하거나 Jakarta 트랜잭션과 올바르게 조정하는 org.hibernate.resource.transaction.TransactionCoordinatorBuilder 사용자 지정 org.hibernate.resource.transaction.TransactionCoordinator 를 빌드해야 합니다.

기타 Hibernate ORM 5 변경 사항
  • The cfg.xml 파일은 다시 완전히 구문 분석되고 이벤트, 보안 및 기타 기능과 통합됩니다.
  • EntityManagerFactory 를 사용하여 the cfg.xml 에서 로드된 속성은 이전에 hibernate 가 있는 이름을 접두사로 지정하지 않았습니다. 현재는 일관성이 보장되어 있습니다.
  • 이 구성은 더 이상 직렬화할 수 없습니다.
  • org.hibernate.dialect.Dialect.getQuerySequencesString() 메서드는 이제 카탈로그, 스키마 및 증분 값을 검색합니다.
  • AuditConfiguration 수정자가 org.hibernate.envers.boot.internal.EnversService 에서 제거되었습니다.
  • 더 이상 사용되지 않는 Audit Configuration을 제거하고 새 EnversService 를 사용하도록 Audit Strategy 메서드 매개변수가 변경되었습니다.
  • 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 에 병합되었습니다. HibernateEntityManagerHibernateEntityManagerFactory 는 더 이상 사용되지 않습니다.
  • Session,StatelessSessionSessionFactory 클래스 계층 구조가 더 이상 사용되지 않는 클래스를 제거하고 Jakarta Persistence Metamodel API에 더 잘 맞도록 리팩토링되었습니다.
  • org.hibernate.persister 및 org. hibernate.tuple 패키지의 SPI가 변경되었습니다. 이러한 SPI를 사용하는 모든 사용자 정의 클래스는 검토 및 업데이트해야 합니다.
  • 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() 및 setDir() 메서드를 대신하여 삭제되었습니다. 자세한 내용은 HHH-11795 에서 확인할 수 있습니다.
  • 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 메서드가 나열되어 있습니다.

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 ,StartableStoppableHibernate 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 또는 @Face ts 주석을 사용하여 faceting에 사용할 필드에 주석을 추가해야 한다는 것입니다.

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 또는 TokenFilterFactory 와 같은 일부 Apache#16r 유틸리티 클래스가 Apache Lucene으로 이동되었습니다. 애플리케이션에서 이러한 유틸리티 또는 사용자 지정 분석기를 사용하는 경우 Apache Lucene에서 새 패키지 이름을 찾아야 합니다.

자세한 내용은 Apache Lucene 마이그레이션 가이드를 참조하십시오.

Hibernate 검색 더 이상 사용되지 않는 API

더 이상 사용되지 않는 인터페이스, 클래스, 열거, 주석 유형, 메서드, 생성자 및 열거 상수의 전체 목록은 Hibernate Search 더 이상 사용되지 않는 API 문서를 참조하십시오.

Hibernate 검색 더 이상 사용되지 않는 인터페이스
인터페이스설명

org.hibernate.search.store.IndexShardingStrategy

Hibernate Search 4.4에서 더 이상 사용되지 않음. 검색 5에서 제거될 수 있습니다. 대신 ShardIdentifierProvider 를 사용합니다.

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

더 이상 사용되지 않으므로 CacheFromIndex 주석을 제거합니다. 더 이상 사용되지 않는 주석은 Hibernate Search 를 참조하십시오.

더 이상 사용되지 않는 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()

대신 field().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 FuzzyContext.withEditDistanceUpTo(int).

더 이상 사용되지 않는 Hibernate 검색
생성자설명

org.hibernate.search.cfg.NumericFieldMapping(PropertyDescriptor, EntityDescriptor, SearchMapping)

대신 NumericFieldMapping.NumericFieldMapping(String, PropertiesDescriptor, EntityDescriptor, SearchMapping) 을 사용합니다.

고급 통합업체에 영향을 미치는 변경 사항

이 섹션에서는 공용 API에 속하지 않는 변경 사항에 대해 설명합니다. 이러한 아티팩트는 Hibernate 검색 프레임워크를 확장하는 통합자만 액세스해야 하므로 평균 개발자에게 영향을 주지 않아야 합니다.

5.10. 엔터티 빈을 자카르타 지속성으로 마이그레이션

EJB 엔터티 빈에 대한 지원은 Jakarta EE 8에서 선택 사항이며 JBoss EAP 7에서 지원되지 않습니다.

이전 JBoss EAP 릴리스에서는 javax.ejb.EntityBean 클래스를 확장하고 필수 메서드를 구현하여 엔터티 빈이 애플리케이션 소스 코드에 생성되었습니다. 그런 다음 ejb-jar.xml 파일에서 구성되었습니다. CMP 엔터티 빈은 값이 있는 < persistence-type> 하위 요소가 포함된 <entity > 요소를 사용하여 지정되었습니다. vCPU 엔터티 빈은 값이 Bean< 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 , cmthibernate5 빠른 시작을 참조하십시오.

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. deferdetach 속성 값을 true 로 설정해야 합니다.

<?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에서는 @PersistenceContextPersistenceProperty 힌트가 실수로 무시되었습니다.

이러한 문제는 JBoss EAP 7.1 이상에서 해결 및 해결되었습니다. 이러한 업데이트로 인해 애플리케이션 동작이 예기치 않게 변경될 수 있기 때문에 이전 버전과의 호환성을 제공하고 이전 동작을 유지하기 위해 두 개의 새로운 지속성 유닛 속성이 JBoss EAP 7.1에 도입되었습니다.

속성설명

wildfly.jpa.skipmixedsynctypechecking

이 속성은 오류 검사 기능을 비활성화합니다. JBoss EAP 7.0에서 작동하고 JBoss EAP 7.1 이상에서 실패하는 경우 이전 버전과의 호환성을 위해 임시 조치로 사용해야 합니다. 이 속성은 향후 릴리스에서 더 이상 사용되지 않을 수 있으므로 이를 수행하는 즉시 애플리케이션 코드를 수정하는 것이 좋습니다.

wildfly.jpa.allowjoinedunsync

이 속성은 wildfly.jpa.skip embededsynctypechecking 의 대안입니다. 애플리케이션이 자카르타 트랜잭션과 연결된 동기화되지 않은 지속성 컨텍스트를 동기화된 지속성 컨텍스트인 것처럼 처리할 수 있습니다.

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 .Permission의 하위 클래스인 새 org.ejb.client.EJBClient Permission 클래스가 권한 있는 EJB 작업에 대한 액세스를 제어하기 위해 도입되었습니다. 다음과 같은 생성자를 제공합니다.

    • 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&#13;
qlTOT8UrOyxrR4yYAmJ/e5s+f4gys926+tbiraT/3/wG8wM/Lvcjvk5Ap69zODuRYpypsWfA4jrI&#13;
7TTBXVPGy8g4KUdnFviUiTuFTc2Ghgxp53AmUuLis/THyP28jE7+28//q8bi/bQrFwHC6tWX67+N&#13;
K1duFCOcQ6IPIKeVrePZz55Ivgl+WWdkF6uYCz5IdMzurhzmeQ3K8DAMIxz/MG67VWJIOnuGNWF7&#13;
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 -INF/ 디렉터리에 awildfly- config.xml 파일을 생성합니다. 이는 a wildfly-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>

추가 리소스

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.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.BasicLoggerorg.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에서는 여러 모듈에 동일한 클래스 또는 패키지가 포함된 경우 클래스 로드 동작이 변경되었습니다.

서로 종속되고 동일한 패키지 중 일부가 포함된 두 개의 모듈인 MODULE_A 와 MODULE_B 가 있다고 가정합니다. JBoss EAP 6에서는 종속성에서 로드된 클래스 또는 패키지가 module.xml 파일의 resource-root 에 지정된 것보다 우선합니다. MODULE_A 는 MODULE_ B 및 MODULE_B 의 패키지가 MODULE_A 패키지를 확인했음을 의미합니다. 이 동작은 혼란스럽고 충돌이 발생할 수 있습니다. 이 동작은 JBoss EAP 7에서 변경되었습니다. 이제 module.xml 파일의 resource-root 에서 지정한 클래스 또는 패키지가 종속성으로 지정된 항목보다 우선합니다. 즉, MODULE_AMODULE_A 및 MODULE_ B 의 패키지가 MODULE_B 에 대한 패키지를 확인합니다. 이렇게 하면 충돌이 방지되고 더 적절한 동작을 제공합니다.

모듈 종속성에서 중복된 클래스를 포함하는 resource-root 라이브러리 또는 패키지가 포함된 사용자 지정 모듈을 정의한 경우, JBoss EAP 7로 마이그레이션할 때 ClassœException, LinkageError, 클래스 로드 오류 또는 동작의 기타 변경 사항이 표시될 수 있습니다. 이러한 문제를 해결하려면 하나의 클래스 버전만 사용하도록 module.xml 파일을 구성해야 합니다. 다음 방법 중 하나를 사용하여 이 작업을 수행할 수 있습니다.

  • 모듈 종속성에서 클래스를 복제하는 resource-root 를 지정하지 않도록 할 수 있습니다.
  • 가져오기내보내기 요소의 includeexclude 하위 인수를 사용하여 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/>

이전에는 활성 세션 수가 <max-active-sessions/> 에서 지정한 값을 초과하면 세션 생성에 실패했습니다.

새 구현에서 <max-active-sessions/> 는 세션 비활성화를 활성화하는 데 사용됩니다. 세션 생성으로 인해 활성 세션 수가 <max-active-sessions/> 를 초과하면 세션 관리자로 알려진 가장 오래된 세션이 비활성화되어 새 세션의 공간을 만듭니다.

<passivation-config/>

이 구성 요소와 하위 항목은 JBoss EAP 7에서 더 이상 사용되지 않습니다.

<use-session-passivation/>

이전에는 이 특성을 사용하여 비활성화가 활성화되었습니다.

새 구현에서는 <max-active-sessions/> 에 음수가 아닌 값을 지정하여 비활성화가 활성화됩니다.

<passivation-min-idle-time/>

이전에는 세션이 비활성화 후보가 되기 전에 최소 시간 동안 활성화되어야 했습니다. 이로 인해 비활성화가 활성화된 경우에도 세션 생성에 실패할 수 있습니다.

새로운 구현은 이 논리를 지원하지 않으므로 이 DoS(서비스 거부) 취약점을 방지합니다.

<passivation-max-idle-time/>

이전에는 특정 시간 동안 유휴 상태인 후 세션이 비활성화되었습니다.

새로운 구현은 지연 패시베이션만 지원합니다. 즉시 활성화를 지원하지 않습니다. 세션은 <max-active-sessions/>을 준수해야 하는 경우에만 비활성화됩니다.

<replication-config/>

distributable-web 하위 시스템은 이 요소를 더 이상 사용하지 않습니다. 자세한 내용은 Distributable-web subsystem for D istributable-web subsystem for Distributable-web subsystem for Distributable Web Session Configurations and Overiding Default Distributable Session Management Behavior 에서 참조하십시오.

<replication-trigger/>

이전에는 이 요소가 세션 복제가 트리거된 시기를 결정하는 데 사용되었습니다. 새 구현에서는 이 구성 옵션을 하나의 강력한 전략으로 대체합니다. 자세한 내용은 JBoss EAP 개발 가이드의 Immutable Session Attributes 를 참조하십시오.

<use-jk/>

이전 버전에서는 지정된 요청을 처리하는 노드의 instance-id<use-jk/> 에 지정된 값에 따라 mod_jk, mod_proxy_balancer, mod_cluster와 같은 로드 밸런서 장치에서 사용할 수 있도록 jsessionid 에 추가되었습니다.

새 구현에서 정의된 경우 instance-id 는 항상 jsessionid 에 추가됩니다.

<max-unreplicated-interval/>

이전에는 세션 특성이 변경되지 않은 경우 세션의 타임스탬프 복제를 방지하기 위해 이 구성 옵션이 최적화되도록 설계되었습니다. 세션 액세스에는 세션 특성 변경 여부와 관계없이 캐시 트랜잭션 RPC가 필요하므로 실제로는 RPC를 방지하지 않습니다.

새 구현에서는 세션의 타임스탬프가 모든 요청에 복제됩니다. 이렇게 하면 장애 조치(failover)에 따라 오래된 세션 메타데이터가 방지됩니다.

<snapshot-mode/>

이전에는 <snapshot-mode/>INSTANT 또는 INTERVAL 로 구성할 수 있었습니다. Infinispan의 비동기 복제를 사용하면 이 구성 옵션이 더 이상 사용되지 않습니다.

<snapshot-interval/>

이는 <snapshot-mode>INTERVAL</snapshot-mode> 에만 관련이 있습니다. <snapshot-mode/> 가 더 이상 사용되지 않으므로 이 옵션도 더 이상 사용되지 않습니다.

<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의 HAPartitionGroupCommunicationService, 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 6JBoss 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에서는 독립 실행형 서버에 대한 configadminosgi 확장 모듈과 하위 시스템 구성이 별도의 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 이름 변경

GroupIDJBoss EAP 7.2JBoss EAP 7.3

org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.1_spec

beta.jboss.jaxrs.api_2_1

java.ws.rs

org.jboss.spec.javax.security.jacc:jboss-jacc-api_1.5_spec

beta.jboss.jacc.api_1_5

java.security.jacc

org.jboss.spec.javax.security.auth.message:jboss-jaspi-api_1.1_spec

beta.jboss.jaspi.api_1_1

java.security.auth.message

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:javax.mail

com.sun.mail:jakarta.mail

javax.activation:activation

com.sun.activation:jakarta.atcivation

javax.enterprise:cdi-api

jakarta.enterprise:jakarta.enterprise.cdi-api

javax.inject:javax.inject

jakarta.inject:jakarta.inject-api

javax.json:javax.json-api

jakarta.json:jakarta.json-api

javax.json.bind:javax.json.bind-api

jakarta.json.bind:jakarta.json.bind-api

javax.persistence:javax.persistence-api

jakarta.persistence:jakarta.persistence-api

javax.security.enterprise:javax.security.enterprise-api

jakarta.security.enterprise:jakarta.security.enterprise-api

javax.validation:validation-api

jakarta.validation:jakarta.validation-api

org.glassfish:javax.json

org.glassfish:jakarta.json

org.jboss.spec.javax.xml.soap:jboss-saaj-api_1.3_spec

org.jboss.spec.javax.xml.soap:jboss-saaj-api_1.4_spec

org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec

org.jboss.spec.javax.transaction:jboss-transaction-api_1.3_spec

참고

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을 사용하여 유사한 기능을 달성할 수 있도록 문서에서 정보를 찾을 수 없는 경우 다음 방법 중 하나로 도움을 얻을 수 있습니다.

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.algorithm 보안 속성이 security-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 및 example-roles.properties 파일에서 사용자 정보를 로드합니다. 또한 보안 도메인은 다음 관리 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={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 보안 영역으로 추가하려면 다음 절차를 따르십시오.

  1. 레거시 보안 하위 시스템에서 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>
  2. 내보낸 보안 영역을 참조하는 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>
  3. 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 보안 도메인 이름을 보호하기 위해 지정된 보안 도메인의 이름은 동일해야 합니다.
  4. 다음 관리 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 구성과 완전히 독립적입니다.

  1. 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)
  2. 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>
  3. 배포에서 참조하는 애플리케이션 보안 도메인을 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 보안 도메인 이름을 보호하기 위해 지정된 보안 도메인의 이름은 동일해야 합니다.

  4. 서버를 다시 로드하거나 새 애플리케이션 보안 도메인 매핑을 적용하려면 애플리케이션을 다시 배포해야 합니다.

인증은 이제 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으로 마이그레이션하려면 다음 단계를 따르십시오.

  1. 속성 파일을 참조하는 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)
  2. 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>
  3. 레거시 보안 영역을 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>
  4. 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>
  5. 두 개의 인증 팩토리를 추가하고 레거시 보안 영역 참조를 제거하여 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 하위 시스템에 추가하는 명령을 생성합니다.

속성 기반 인증을 파일 시스템 기반 인증으로 마이그레이션하는 단계는 다음과 같습니다.

  1. 속성 파일을 마이그레이션합니다.

    한 번에 단일 사용자 속성 파일을 마이그레이션하거나 속성 파일을 대량으로 마이그레이션할 수 있습니다. 다음 예제에서는 두 유형의 마이그레이션 모두에 대한 절차를 보여줍니다.

    • 단일 속성 파일 마이그레이션.

      다음 예제에서는 관련 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 특성에 지정된 디렉터리에 저장됩니다.

  2. 파일 시스템 보안 영역을 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 보안 도메인 의 마이그레이션에 적용됩니다.

  1. elytron 하위 시스템에서 LDAP에 대한 연결을 정의합니다.

    /subsystem=elytron/dir-context=ldap-connection:add(url=ldap://localhost:10389, principal="uid=admin, ou=system", credential-reference={clear-text=secret})
  2. 보안 영역을 생성하여 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 -domain 에 대해 role-decoder 가 정의되지 않은 경우 "Roles" ID 특성은 ID 역할에 매핑됩니다.

이제 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 인증 마이그레이션

레거시 보안 구성에서는 다음과 같이 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에서 보호할 수 있습니다.

  1. 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})
  2. 서버가 자체 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)
  3. 보안 도메인을 정의하여 정책과 인증 정책에 대한 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>

  4. 애플리케이션을 보호하려면 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 인증 마이그레이션에 설명된 것과 매우 유사합니다.

  1. 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})
  2. 서버 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)
  3. 보안 도메인 및 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을 사용할 때 보안 도메인을 캐시하는 유사한 구성을 생성하려면 아래 단계를 수행하십시오.

  1. 보안 영역을 정의하고 캐싱 영역에서 보안 영역을 래핑합니다. 그런 다음 캐싱 영역을 보안 도메인 및 인증 팩토리에서 사용할 수 있습니다.

    예제: 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)

  2. 이전 단계에서 정의한 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으로 마이그레이션하려면 다음 단계를 따르십시오.

  1. 클라이언트 애플리케이션 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>

  2. 다음 예와 같이 InitialContext 를 생성합니다. InitialContextorg.wildfly.naming.client.WildFlyInitialContextFactory 클래스에서 지원합니다.

    예제: InitialContext Code

    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");
    ...

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으로 마이그레이션하려면 다음 단계를 따르십시오.

  1. 클라이언트 애플리케이션 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>

  2. 다음 예와 같이 InitialContext 를 생성합니다. InitialContextorg.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);----

  3. 이제 파일이 더 이상 필요하지 않으므로 사용되지 않는 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을 사용하여 동일한 구성을 수행하려면 아래 단계를 따르십시오.

  1. 키 저장소 의 위치와 암호화되는 암호를 지정하는 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)
  2. 이전 단계에서 정의한 저장소, 별칭 및 키 암호를 지정하는 elytron 하위 시스템에서 key- manager 를 생성합니다.

    /subsystem=elytron/key-manager=LocalhostKeyManager:add(key-store=LocalhostKeyStore,alias-filter=server,credential-reference={clear-text="key_password"})
  3. 이전 단계에서 정의한 key -manager를 참조하는 elytron 하위 시스템에서 server- ssl-context 를 만듭니다.

    /subsystem=elytron/server-ssl-context=LocalhostSslContext:add(key-manager=LocalhostKeyManager)
  4. https-listener 를 레거시 security-realm 에서 새로 만든 Elytron ssl-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
  5. 서버를 다시 로드합니다.

    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 기반 인증을 필수로 만들려면 localproperties 요소를 제거합니다.

레거시 신뢰 저장소 는 다음 두 가지 방법으로 사용할 수 있습니다.

CA만 포함하는 기존 신뢰 저장소

다음 단계에 따라 유효한 인증서 및 개인 키가 없는 사용자가 Elytron을 사용하여 서버에 액세스하지 못하도록 서버를 구성합니다.

  1. 키 저장소 의 위치와 암호화되는 암호를 지정하는 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)
  2. 신뢰 저장소의 위치와 암호화되는 암호를 지정하는 elytron 하위 시스템에서 키 저장소를 생성합니다. 이 명령은 keytool 명령을 사용하여 키 저장소가 생성되었으며 해당 유형이 JKS 라고 가정합니다.

    /subsystem=elytron/key-store=TrustStore:add(path=server.truststore,relative-to=jboss.server.config.dir,credential-reference={clear-text="truststore_password"},type=JKS)
  3. 이전에 정의한 LocalhostKeyStore 키 저장소, 별칭 및 키 암호를 지정하는 elytron 하위 시스템에서 key-manager 를 생성합니다.

    /subsystem=elytron/key-manager=LocalhostKeyManager:add(key-store=LocalhostKeyStore,alias-filter=server,credential-reference={clear-text="key_password"})
  4. 이전에 생성한 trust store의 키 저장소를 지정하는 elytron 하위 시스템에서 trust- manager 를 생성합니다.

    /subsystem=elytron/trust-manager=TrustManager:add(key-store=TrustStore)
  5. 이전에 정의한 key -manager를 참조하고 trust-manager 특성을 설정하고, 클라이언트 인증을 활성화하는 elytron 하위 시스템에 server- ssl-context 를 만듭니다.

    /subsystem=elytron/server-ssl-context=LocalhostSslContext:add(key-manager=LocalhostKeyManager,trust-manager=TrustManager,need-client-auth=true)
  6. https-listener 를 레거시 security-realm 에서 새로 만든 Elytron ssl-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
  7. 서버를 다시 로드합니다.

    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_CERTDIGEST 인증을 지원하도록 구성됩니다.

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으로 직접 애플리케이션을 마이그레이션하려는 경우 마이그레이션을 계획하고 실행하는 데 도움이 되는 다양한 리소스가 있습니다. 다음 접근 방식을 사용하는 것이 좋습니다.

  1. 각 JBoss EAP 릴리스에 대한 변경 사항에 대한 간략한 개요는 이 가이드의 각 릴리스에 대한 변경 요약 을 참조하십시오.
  2. JBoss EAP 6 마이그레이션 가이드와 이 가이드를 읽어 보고 각 항목의 내용을 숙지하십시오.
  3. JBoss EAP 5 구성 요소 업그레이드 참조를 특정 구성 요소 및 기능에 대한 마이그레이션 정보에 대한 빠른 참조로 사용합니다.
  4. 규칙 기반 Migration Toolkit for Applications는 JBoss EAP 5에서 JBoss EAP 7로 직접 마이그레이션하는 데 도움이 되는 규칙을 계속 추가합니다. 이러한 툴을 사용하여 애플리케이션을 분석하고 JBoss EAP 7로 마이그레이션하는 데 필요한 변경 사항에 대한 세부 보고서를 생성할 수 있습니다. 자세한 내용은 마이그레이션 툴킷을 사용하여 마이그레이션 애플리케이션 분석에서 참조하십시오.
  5. 고객 포털 지식 베이스 에는 현재 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에서는 서버 구성 파일의 ejb3 하위 시스템에서 상태 저장 세션 빈 캐시 및 상태 비저장 세션 빈 풀 크기가 구성됩니다. jboss-ejb3.xml 배포 설명자는 jboss.xml 배포 설명자 파일을 대체합니다. 이러한 변경 사항에 대한 자세한 내용은 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는 공용 네트워크 인터페이스 대신 사설 네트워크 인터페이스를 사용하도록 기본 설정되며 <channel> 요소를 jgroups 하위 시스템에 도입합니다. JBoss EAP 7에는 Undertow mod_cluster 구현도 포함되어 있으며 Singleton 서비스 및 기타 새로운 클러스터링 기능을 빌드하기 위한 새 API가 도입되었습니다. 이러한 변경 사항은 이 가이드의 다음 섹션에 설명되어 있습니다.

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에서는 이제 org.jboss.logging 패키지의 주석이 더 이상 사용되지 않으므로 소스 코드와 Maven GAV(groupId:artifactId:version)에 영향을 미칩니다. 모든 로그 메시지의 접두사도 변경되었습니다. 이러한 변경 사항에 대한 자세한 내용은 이 가이드의 다음 섹션을 참조하십시오.

메시징 및 자카르타 메시징

JBoss EAP 7에서 ActiveMQ Artemis는 HornetQ를 기본 제공 메시징 프로바이더로 교체했습니다.

메시징 구성을 마이그레이션하는 가장 좋은 방법은 JBoss EAP 7 기본 서버 구성을 시작하고 다음 가이드를 사용하여 현재 메시징 구성 변경 사항을 적용하는 것입니다.

JBoss Messaging에서 HornetQ로 이동하는 데 필요한 변경 사항을 이해하려면 JBoss EAP 6 마이그레이션 가이드 의 다음 섹션을 검토하십시오.

이 가이드에서 HornetQ 구성 및 관련 메시징 데이터를 마이그레이션하는 방법에 대한 다음 정보를 확인하십시오.

ORB

JBoss EAP 6에서는 JacORB 구성이 EAP_HOME/server/production/conf/jacorb.properties 파일에서 서버 구성 파일로 이동되었습니다. 그런 다음 JBoss EAP 7은 JacORB IIOP 구현을 OpenJDK ORB의 다운스트림 분기로 대체했습니다.

ORB 구성을 마이그레이션하는 가장 좋은 방법은 JBoss EAP 7 기본 서버 구성으로 시작하고 JBoss EAP 7.4 구성 가이드 의 다음 섹션을 사용하여 현재 ORB 구성 변경 사항을 적용하는 것입니다.

원격 호출

원격 호출을 위해 JBoss EAP 6에 새로운 엔터프라이즈 빈 클라이언트 API가 도입되었지만 새 API를 사용하도록 애플리케이션 코드를 다시 작성하지 않으려면 엔터프라이즈 빈에 대한 원격 액세스에 대해 ejb:BEAN_REFERENCE 를 사용하도록 기존 코드를 수정할 수 있습니다. 자세한 내용은 JBoss EAP 6 마이그레이션 가이드 의 다음 섹션을 참조하십시오.

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의 트랜잭션 하위 시스템에서 사용 가능한 일부 Transaction Manager 구성 속성은 JBoss EAP 7에서 변경되었습니다. 자세한 내용은 이 가이드의 다음 섹션을 참조하십시오.

센서

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 작업을 실행할 때 볼 수 있는 몇 가지 경고가 나열되어 있습니다.

참고

마이그레이션 작업의 출력에 "마이그레이션할 수 없음" 또는 "마이그레이션할 수 없음" 항목이 표시되면 서버 구성의 마이그레이션이 성공적으로 완료되었지만 모든 요소 및 특성을 자동으로 마이그레이션할 수 없음을 나타냅니다. 이러한 구성을 수정하려면 "마이그레이션-경고"에서 제공하는 제안 사항을 따라야 합니다.

경고 메세지기능 / 수정 방법

iiop 마이그레이션은 서버가 관리자 전용 모드일 때 수행할 수 있습니다.

마이그레이션 작업을 수행하려면 admin-only 모드에서 서버를 시작해야 하며, 이 작업은 server start 명령에 --start-mode=admin-only 를 추가합니다.

$ EAP_HOME/bin/standalone.sh --start-mode=admin-only

속성 X 는 OpenJDK ORB를 사용하여 에뮬레이션할 수 없으며 지원되지 않습니다.

지정된 속성의 구성은 지원되지 않으며 새 iiop-openjdk 하위 시스템 구성에 포함되지 않습니다. JBoss EAP의 이전 릴리스에서 이 속성이 표시된 동작은 마이그레이션되지 않으며 관리자는 JBoss EAP 7의 새 iiop-openjdk 하위 시스템이 해당 동작 없이 올바르게 작동하는지 확인해야 합니다.

지원되지 않는 속성은 다음과 같습니다. cache-poa-names,캐시 유형 코드, chunk-custom-rmi-valuetypes,client-timeout,comet,indirection-encoding-disable,iona,lax-boolean-encoding, max-managed-buf-size,max-server-connections,max-threads,outbuf-cache-timeout,outbuf-size,queue-max,queue-min,poa-monitoring,print-version, 재시도,재시도 상호 작용, 대기열 대기,서버 시간 제한, strict -check-on-tc-creation,use-bom,use-imr.

속성 X 는 표현식을 사용합니다. 이러한 식을 해결하는 데 사용되는 구성 속성은 새 iiop-openjdk 하위 시스템 형식으로 수동으로 변환해야 합니다.

표현식을 사용하는 속성은 관리자가 수동으로 구성해야 합니다.

예를 들어 JBoss EAP 6의 jacorb 하위 시스템은 giop-minor-version 속성을 정의했습니다. JBoss EAP 7의 iiop-openjdk 하위 시스템은 giop-version 속성을 정의합니다. jacorb 하위 시스템 부 버전 속성이 ${iiop-giop-minor-version} 로 설정되어 있고 시스템 속성이 standalone.conf 파일에 -Diiop-giop-minor-version=1 로 구성되어 있다고 가정합니다. 마이그레이션 작업을 마치면 관리자가 시스템 속성 값을 1.1 로 변경하여 새 하위 시스템이 올바르게 구성되었는지 확인해야 합니다.

마이그레이션할 수 없습니다: 새 iiop-openjdk 하위 시스템이 이미 정의되어 있습니다

메시지에는 설명이 포함되어 있습니다.

A.2. 메시징 하위 시스템 마이그레이션 작업 경고

마이그레이션 작업은 모든 리소스와 특성을 처리할 수 없습니다. 다음 표에는 메시징 하위 시스템에 대한 마이그레이션 또는 describe-migration 작업을 실행할 때 볼 수 있는 몇 가지 경고가 나열되어 있습니다.

참고

마이그레이션 작업의 출력에 "마이그레이션할 수 없음" 또는 "마이그레이션할 수 없음" 항목이 표시되면 서버 구성의 마이그레이션이 성공적으로 완료되었지만 모든 요소 및 특성을 자동으로 마이그레이션할 수 없음을 나타냅니다. 이러한 구성을 수정하려면 "마이그레이션-경고"에서 제공하는 제안 사항을 따라야 합니다.

경고 메세지기능 / 수정 방법

마이그레이션 작업을 수행할 수 없습니다. 서버는 관리자 전용 모드여야 합니다.

마이그레이션 작업을 수행하려면 admin-only 모드에서 서버를 시작해야 하며, 이 작업은 server start 명령에 --start-mode=admin-only 를 추가합니다.

$ EAP_HOME/bin/standalone.sh --start-mode=admin-only

리소스 X 에서 local-bind-address 특성을 마이그레이션할 수 없습니다. 대신 socket-binding 특성을 사용하여 이 브로드캐스트 그룹을 구성합니다.

메시지에는 설명과 수정 방법이 포함되어 있습니다.

리소스 X 에서 local-bind-port 속성을 마이그레이션할 수 없습니다. 대신 socket-binding 특성을 사용하여 이 브로드캐스트 그룹을 구성합니다.

메시지에는 설명과 수정 방법이 포함되어 있습니다.

리소스 X 에서 특성 group-address 를 마이그레이션할 수 없습니다. 대신 socket-binding 특성을 사용하여 이 브로드캐스트 그룹을 구성합니다.

메시지에는 설명과 수정 방법이 포함되어 있습니다.

리소스 X 에서 특성 그룹 포트를 마이그레이션 할 수 없습니다. 대신 socket-binding 특성을 사용하여 이 브로드캐스트 그룹을 구성합니다.

브로드캐스트 그룹 리소스는 더 이상 local-bind-address,local- bind-port,group-address 또는 group-port 특성을 허용하지 않습니다. socket-binding 특성만 허용합니다. 리소스 X 에 지원되지 않는 특성이 있음을 알리는 경고입니다. 리소스에 socket-binding 속성을 수동으로 설정하고 정의된 socket-binding 리소스에 해당하는지 확인해야 합니다.

X 를 제공하는 클래스는 마이그레이션 중에 삭제됩니다. 새 messaging-activemq 하위 시스템에서 사용하려면 Artemis 기반 Interceptor 를 확장해야 합니다.

JBoss EAP 7에서는 메시징 인터셉터 지원이 상당히 다릅니다. 이전 버전의 하위 시스템에서 구성된 인터셉터는 마이그레이션 중에 삭제됩니다. 자세한 내용은 Migrate Messaging Interceptors 를 참조하십시오.

X 의 HA 구성을 마이그레이션할 수 없습니다. 공유 저장소 및 백업 속성에는 표현식이 포함되며, messaging- activemq 서버의 해당 ha-policy 를 생성하는 방법을 모호하지 않게 결정할 수 없습니다.

즉, Hornetq-server X공유 저장소 또는 백업 속성에는 ${xxx}와 같은 표현식이 포함되어 있으며 마이그레이션 작업에서는 이를 구체적인 표현식으로 해결할 수 없었습니다. 값이 삭제되고 messaging -activemq의 ha- policy 를 수동으로 업데이트해야 합니다.

리소스 X 에서 local-bind-address 특성을 마이그레이션할 수 없습니다. 대신 socket-binding 특성을 사용하여 이 discovery-group 을 구성합니다.

메시지에는 설명과 수정 방법이 포함되어 있습니다.

리소스 X 에서 local-bind-port 속성을 마이그레이션할 수 없습니다. 대신 socket-binding 특성을 사용하여 이 discovery-group 을 구성합니다.

메시지에는 설명과 수정 방법이 포함되어 있습니다.

리소스 X 에서 특성 group-address 를 마이그레이션할 수 없습니다. 대신 socket-binding 특성을 사용하여 이 discovery-group 을 구성합니다.

메시지에는 설명과 수정 방법이 포함되어 있습니다.

리소스 X 에서 특성 그룹 포트를 마이그레이션 할 수 없습니다. 대신 socket-binding 특성을 사용하여 이 discovery-group 을 구성합니다.

discovery-group 리소스는 더 이상 local-bind-address,local-bind-port,group-address 또는 group-port 특성을 허용하지 않습니다. 소켓 바인딩만 허용합니다. 리소스 X 에 지원되지 않는 특성이 있음을 알리는 경고입니다. 리소스에 socket-binding 속성을 수동으로 설정하고, 정의된 socket-binding 리소스에 해당하는지 확인해야 합니다.

connection-factory X 를 기반으로 레거시-connection-factory 를 만들 수 없습니다. Artemis in-vm 커넥터와 호환되지 않는 HornetQ in-vm 커넥터를 사용합니다.

레거시 HornetQ 원격 연결 팩토리 리소스가 legacy- connection-factory 리소스로 마이그레이션되어 JBoss EAP 6 클라이언트가 JBoss EAP 7에 연결할 수 있습니다. 그러나 legacy-connection-factory 리소스는 connection-factory 가 원격 커넥터를 사용하는 경우에만 생성됩니다. in -vm 클라이언트가 JBoss EAP 6가 아닌 JBoss EAP 7을 기반으로 하므로 in-vm 을 사용하는 연결 팩토리는 마이그레이션되지 않습니다. 이 경고는 in-vm connection- factory 가 마이그레이션되지 않았다는 알림입니다.

리소스 Y 에서 특성 X 를 마이그레이션할 수 없습니다. 특성은 시스템 속성에 따라 다르게 해석할 수 있는 표현식을 사용합니다. 마이그레이션 후에는 표현식 대신 실제 값을 사용하여 이 속성을 다시 추가해야 합니다.

이 경고는 마이그레이션에서 특성 X 를 마이그레이션 프로세스 중 구체적인 값으로 확인할 수 없는 경우 표시됩니다. 값이 취소되고 속성을 수동으로 마이그레이션해야 합니다. 이 작업은 다음 사례에서 수행됩니다.

  • cluster-connection forward-when-no-consumers:

    이 부울 속성은 값이 OFF,STRICT 또는 ON_DEMAND 인 열거인 message-load-balancing-type 특성으로 교체되었습니다.

  • broadcast-groupdiscovery-groupjgroups-stackjgroups-channel 속성

    다른 리소스를 참조하고 JBoss EAP 7은 더 이상 이러한 표현식을 허용하지 않습니다.

리소스 Y 에서 특성 X 를 마이그레이션할 수 없습니다. 이 특성은 새 messaging-activemq 하위 시스템에서 지원하지 않습니다.

일부 속성은 새 messaging-activemq 하위 시스템에서 더 이상 지원되지 않으며 간단히 삭제됩니다.

  • hornetq-server’s failback-delay
  • http-connector’s use-nio attribute
  • http-acceptoruse-nio 특성
  • remote-connectoruse-nio 특성
  • remote-acceptoruse-nio 특성

리소스 X 에서 failback-delay 특성을 마이그레이션할 수 없습니다. Artemis는 장애 복구를 결정적으로 감지하고 더 이상 장애 복구가 발생할 지연을 지정할 필요가 없습니다.

메시지에는 설명이 포함되어 있습니다.

더 이상 사용되지 않는 브로드캐스트-그룹 또는 discovery-group 속성 교체

더 이상 사용되지 않는 브로드캐스트 그룹 또는 discovery-group 특성을 socket- binding 특성으로 교체하는 것이 좋습니다. 관리 CLI를 사용하여 새 속성을 추가할 수 있습니다.

이 예제에서는 메시징 하위 시스템에서 다음 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 -activemq 하위 시스템에서 새로 생성된 socket-binding 을 "my- discovery-group"이라는 discovery -group에 추가합니다.

/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 작업을 실행할 때 볼 수 있는 몇 가지 경고가 나열되어 있습니다.

참고

마이그레이션 작업의 출력에 "마이그레이션할 수 없음" 또는 "마이그레이션할 수 없음" 항목이 표시되면 서버 구성의 마이그레이션이 성공적으로 완료되었지만 모든 요소 및 특성을 자동으로 마이그레이션할 수 없음을 나타냅니다. 이러한 구성을 수정하려면 "마이그레이션-경고"에서 제공하는 제안 사항을 따라야 합니다.

경고 메세지기능 / 수정 방법

관리자 전용 모드에서만 허용된 마이그레이션 작업

마이그레이션 작업을 수행하려면 admin-only 모드에서 서버를 시작해야 하며, 이 작업은 server start 명령에 --admin-only 매개 변수를 추가하여 수행합니다.

$ EAP_HOME/bin/standalone.sh --admin-only

리소스 X를 마이그레이션할 수 없습니다

이전 버전의 JBoss EAP에서 이 리소스에 표시된 동작은 마이그레이션되지 않았습니다. 관리자는 JBoss EAP 7의 new undertow 하위 시스템이 해당 동작 없이도 제대로 작동하는지 또는 동작을 수동으로 마이그레이션해야 하는지 확인해야 합니다.

리소스 Y 에서 특성 X 를 마이그레이션할 수 없습니다.

이전 버전의 JBoss EAP에서 이 resource 속성에 표시된 동작은 마이그레이션되지 않았습니다. 관리자는 JBoss EAP 7의 new undertow 하위 시스템이 해당 동작 없이도 제대로 작동하는지 또는 동작을 수동으로 마이그레이션해야 하는지 확인해야 합니다.

마이그레이션되지 않은 속성 목록은 Web Subsystem Migration Operation Attribute Warnings 를 참조하십시오.

SSL 구성이 정의되지 않았으므로 SSL 커넥터를 마이그레이션할 수 없습니다

메시지에는 설명이 포함되어 있습니다.

verify-client 특성 X 를 해당하는 Undertow로 마이그레이션할 수 없습니다.

메시지에는 설명이 포함되어 있습니다.

verify-client 표현식 X를 마이그레이션할 수 없습니다

메시지에는 설명이 포함되어 있습니다.

pilot X를 마이그레이션할 수 없습니다

이전 버전의 JBoss EAP에서 표시된 동작은 마이그레이션되지 않았습니다. 관리자는 JBoss EAP 7의 new undertow 하위 시스템이 해당 동작 없이도 제대로 작동하는지 또는 동작을 수동으로 마이그레이션해야 하는지 확인해야 합니다.

이 경고는 다음 센서에 대해 발생할 수 있습니다.

  • org.apache.catalina.valves.RemoteAddrValve

    허용되거나 거부된 값이 하나 이상 있어야 합니다.

  • org.apache.catalina.valves.RemoteHostValve

    허용되거나 거부된 값이 하나 이상 있어야 합니다.

  • org.apache.catalina.authenticator.BasicAuthenticator
  • org.apache.catalina.authenticator.DigestAuthenticator
  • org.apache.catalina.authenticator.FormAuthenticator
  • org.apache.catalina.authenticator.SSLAuthenticator
  • org.apache.catalina.authenticator.SpnegoAuthenticator
  • 사용자 지정 센서

요소 Y에서 특성 X 를 마이그레이션할 수 없습니다

이전 버전의 JBoss EAP에서 이 marks 속성에 표시된 동작은 마이그레이션되지 않았습니다. 관리자는 JBoss EAP 7의 new undertow 하위 시스템이 해당 동작 없이도 제대로 작동하는지 또는 동작을 수동으로 마이그레이션해야 하는지 확인해야 합니다. 이 경고는 다음 설정 속성에 대해 발생할 수 있습니다.

  • org.apache.catalina.valves.AccessLogValve

    • resolveHosts
    • fileDateFormat
    • renameOnRotate
    • 인코딩
    • locale
    • requestAttributesEnabled
    • 버퍼링됨
  • org.apache.catalina.valves.ExtendedAccessLogValve

    • resolveHosts
    • fileDateFormat
    • renameOnRotate
    • 인코딩
    • locale
    • requestAttributesEnabled
    • 버퍼링됨
  • org.apache.catalina.valves.RemoteIpValve

    • httpServerPort
    • httpsServerPort
    • remoteIpHeader

      정의되었지만 "x-forwarded-for"로 설정되지 않은 경우

    • protocolHeader

      정의되었지만 "x-forwarded-proto"로 설정되지 않은 경우

웹 하위 시스템 마이그레이션 작업 속성 경고

마이그레이션 작업은 모든 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 또는 WebdavServlet 에서 정적 리소스를 처리하는 방법을 설명하는 데 사용되었습니다. Undertow에서 WebDAV를 지원하지 않으므로 이러한 속성에 대한 동등한 항목이 없습니다. 자세한 내용은 https://issues.jboss.org/browse/JBEAP-1036 의 내용을 참조하십시오.

속성설명Undertow 동등

비활성화됨

기본 서블릿 매핑을 활성화합니다.

Undertow에 동등한 설정이 없습니다.

파일 인코딩

정적 파일을 읽을 때 사용할 파일 인코딩.

Undertow에 동등한 설정이 없습니다.

max-depth

PROPFIND 최대 재귀.

이는 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의 reauthenticate=true 설정과 유사하게 작동하는 Undertow에는 동일한 설정이 없습니다. reauthenticate=false 는 성능을 향상시킬 수 있지만 보안 문제가 발생할 수도 있습니다.

웹 액세스 로그 속성
JBoss Web 속성설명Undertow 동등

resolve-hosts

액세스 로깅을 위해 호스트를 확인할지 여부입니다.

커넥터에서 설정을 사용하여 동일한 동작을 수행합니다.

웹 커넥터 속성
JBoss Web 속성설명Undertow 동등

실행자

이 커넥터의 스레드를 처리하는 데 사용해야 하는 실행자의 이름입니다.

이제 io 하위 시스템에 정의된 작업자를 참조합니다.

자세한 내용은 스레드 하위 시스템 구성 마이그레이션을 참조하십시오.

proxy-binding

리디렉션을 보낼 때 사용되는 호스트 및 포트를 정의하는 소켓 바인딩입니다.

직접 동등하지는 않습니다.

사용 가능한 구성 옵션은 JBoss EAP 구성 가이드 의 https-listener 특성을 참조하십시오.

redirect-port

보안 커넥터로 리디렉션하기 위한 포트입니다.

이 속성은 JBoss EAP 6에서 더 이상 사용되지 않으며 redirect-binding 으로 대체되었습니다. Undertow는 redirect- binding을 대체하는 http-listener 요소에 redirect- socket 속성을 제공합니다.

자세한 내용은 JBoss EAP 구성 가이드에서 https-listener 속성 에서 참조하십시오.

A.4. JBoss Web System 속성 참조 마이그레이션

이 참조에서는 이전에 JBoss Web 구성에 사용된 시스템 속성을 JBoss EAP 7의 Undertow에 대한 동등한 구성으로 매핑하는 방법을 설명합니다.

표 A.1. 서블릿 컨테이너 및 커넥터 시스템 속성 매핑

JBoss EAP 6 시스템 속성

설명

JBoss EAP 7에서와 동등

jvmRoute

jvmRoute 특성의 기본값을 제공합니다. standalone-ha.xml 구성 파일을 사용할 때 자동으로 생성된 값을 재정의하지 않습니다.

다시 로드를 지원합니다.

관리 CLI 명령:

/subsystem=undertow:write-attribute(name=instance-id,value=VALUE)

org.apache.tomcat.util.buf.StringCache.byte.enabled

true인 경우 String 캐시가 ByteChunk 에 대해 활성화됩니다. 값을 지정하지 않으면 기본값 false 가 사용됩니다.

동등한 구성 없음

org.apache.tomcat.util.buf.StringCache.char.enabled

true인 경우 CharChunk 에 String 캐시가 활성화됩니다. 값을 지정하지 않으면 기본값 false 가 사용됩니다.

동등한 구성 없음

org.apache.tomcat.util.buf.StringCache.cacheSize

문자열 캐시의 크기입니다. 값을 지정하지 않으면 기본값 5000 이 사용됩니다.

동등한 구성 없음

org.apache.tomcat.util.buf.StringCache.maxStringSize

캐시할 최대 문자열 길이입니다. 값을 지정하지 않으면 기본값 128 이 사용됩니다.

동등한 구성 없음

org.apache.tomcat.util.http.FastHttpDateFormat.CACHE_SIZE

구문 분석 및 포맷된 날짜 값을 사용할 캐시의 크기입니다. 값을 지정하지 않으면 기본값 1000 이 사용됩니다.

동등한 구성 없음

org.apache.catalina.core.StandardService.DELAY_CONNECTOR_STARTUP

true인 경우 커넥터 시작이 자동으로 수행되지 않습니다. 임베디드 모드에서 유용합니다.

동등한 구성 없음

org.apache.catalina.connector.Request.SESSION_ID_CHECK

true인 경우 서블릿 컨테이너는 해당 ID로 세션을 생성하기 전에 지정된 세션 ID를 사용하여 컨텍스트에 세션이 있는지 확인합니다.

동등한 구성 없음

org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER

true인 경우 HTTP 헤더 내에서 사용자 정의 HTTP 상태 메시지가 사용됩니다. 사용자는 가능한 XSS 취약점을 방지하기 위해 해당 메시지가 메시지에 포함된 경우 특히 해당 메시지가 ISO-8859-1 인지 확인해야 합니다. 값을 지정하지 않으면 기본값이 false 가 사용됩니다.

custom io.undertow.servlet.ServletExtension 을 구현하여 프로그래밍 방식으로 활성화해야 합니다. 그런 다음 확장 기능을 사용하여 the io.undertow.servlet.api.DeploymentInfo 구조 인스턴스에서 setSendCustomReasonPhraseOnError(true) 를 호출합니다.

org.apache.tomcat.util.http.Parameters.MAX_COUNT

사후 본문에서 구문 분석할 수 있는 최대 매개 변수 수입니다. 초과하면 IllegalStateException 을 사용하여 구문 분석에 실패합니다. 기본값은 512 매개 변수입니다.

관리 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 요청에 전송할 수 있는 최대 헤더 수입니다. 초과하면 IllegalStateException 을 사용하여 구문 분석에 실패합니다. 기본값은 128 헤더입니다.

관리 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

커넥터가 요청을 처리하는 데 사용할 최대 스레드 수입니다. 기본값은 32 x 512 입니다. (JI O 커넥터 의 Runtime.getRuntime().availableProcessors ())

관리 CLI 명령:

/subsystem=io/worker=default:write-attribute(name=task-max-threads, value=VALUE)

org.apache.coyote.http11.Http11Protocol.MAX_HEADER_SIZE

HTTP 헤더의 최대 크기(바이트)입니다. 초과하면 ArrayOutOfBoundsException 을 사용하여 구문 분석에 실패합니다. 기본값은 8192 바이트입니다.

관리 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 커넥터로 간단한 압축을 사용할 수 있습니다. 기본값은 off 이고 on 값을 사용하여 조건부로 활성화하거나 강제로 항상 활성화할 수 있습니다.

관리 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

압축 가능한 콘텐츠의 콘텐츠 유형 접두사입니다. 기본값은 text/html,text/xml,text/plain 입니다.

관리 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

압축할 최소 콘텐츠 크기. 기본값은 2048 바이트입니다.

관리 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

기본 소켓 시간 제한. 기본값은 60000 ms입니다.

관리 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 소스를 다시 컴파일하도록 .java 및.class 파일을 제거합니다. 기본값은 false입니다. keep-alive 의 기본 소켓 시간 초과. 기본값은 -1 ms이므로 기본 소켓 시간 초과를 사용합니다.

동등한 구성 없음

org.apache.tomcat.util.buf.StringCache.trainThreshold

캐시를 활성화하기 전에 toString() 을 호출해야 하는 횟수를 지정합니다. 기본값은 100000 입니다.

동등한 구성 없음

표 A.2. 매핑 EL 시스템 속성

JBoss EAP 6 시스템 속성

설명

JBoss EAP 7에서와 동등

org.apache.el.parser.COERCE_TO_ZERO

EL(Expression Language) 2.0 사양에 따르면 true인 경우 표현식을 우선 순위가 아닌 데이터 유형으로 강제 적용할 때 빈 문자열("") 및 null이 0으로 강제 적용됩니다. 값을 지정하지 않으면 기본값 true 가 사용됩니다.

동등한 구성이 없습니다. EL 3.0 사양에 따라 빈 문자열과 null은 기본이 아닌 데이터 유형에 대해 0으로 처리되지 않습니다.

표 A.3. 서버 페이지 시스템 속성 매핑

JBoss EAP 6 시스템 속성

설명

JBoss EAP 7에서와 동등

org.apache.jasper.compiler.Generator.VAR_EXPRESSIONFACTORY

표현식 언어 표현식 팩토리에 사용할 변수의 이름입니다. 값을 지정하지 않으면 기본값 _el_expressionfactory 가 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.compiler.Generator.VAR_INSTANCEMANAGER

인스턴스 관리자 팩토리에 사용할 변수의 이름입니다. 값을 지정하지 않으면 기본값 _jsp_instancemanager 가 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING

false인 경우 JSP 속성의 따옴표를 이스케이프하는 요구 사항이 완화되어 필수 따옴표가 누락되어 오류가 발생하지 않습니다. 값을 지정하지 않으면 사양 준수 기본값인 true 가 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.Constants.DEFAULT_TAG_BUFFER_SIZE

org.apache.jasper.Constants.DEFAULT_TAG_BUFFER_SIZE 이상으로 확장되는 태그 버퍼가 삭제되고 새 버퍼가 기본 크기로 생성됩니다. 값을 지정하지 않으면 기본값 512 가 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.runtime.JspFactoryImpl.USE_POOL

true인 경우 ThreadLocal PageContext 풀이 사용됩니다. 값을 지정하지 않으면 기본값인 true 가 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.runtime.JspFactoryImpl.POOL_SIZE

ThreadLocal PageContext의 크기입니다. 값을 지정하지 않으면 기본값 8 이 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.Constants.JSP_SERVLET_BASE

JSP에서 생성된 서블릿의 기본 클래스입니다. 값을 지정하지 않으면 org.apache.jasper.runtime.HttpJspBase 의 기본값이 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.Constants.SERVICE_METHOD_NAME

기본 클래스에서 호출하는 서비스 메서드의 이름입니다. 값을 지정하지 않으면 기본값 _jspService 가 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.Constants.SERVLET_CLASSPATH

JSP의 클래스 경로를 제공하는 ServletContext 속성의 이름입니다. 값을 지정하지 않으면 org.apache.catalina.jsp_classpath 의 기본값이 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.Constants.JSP_FILE

서블릿 정의의 <jsp-file> 요소에 대한 요청 속성의 이름입니다. 요청에 있는 경우 request.getServletPath() 에서 반환된 값을 재정의하여 실행할 JSP를 선택합니다. 값을 지정하지 않으면 org.apache.catalina.jsp_file 의 기본값이 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.Constants.PRECOMPILE

JSP 엔진이 서블릿을 사전에 생성하지만 호출하지 않도록 하는 쿼리 매개 변수의 이름입니다. 값을 지정하지 않으면 org.apache.catalina.jsp_precompile 의 기본값이 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.Constants.JSP_PACKAGE_NAME

컴파일된 JSP의 기본 패키지 이름입니다. 값을 지정하지 않으면 기본값 org.apache.jsp 가 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.Constants.TAG_FILE_PACKAGE_NAME

태그 파일에서 생성된 태그 핸들러의 기본 패키지 이름입니다. 값을 지정하지 않으면 org.apache.jsp.tag 의 기본값이 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.Constants.TEMP_VARIABLE_NAME_PREFIX

생성된 임시 변수 이름에 사용할 접두사입니다. 값을 지정하지 않으면 기본값 _jspx_temp 가 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.Constants.USE_INSTANCE_MANAGER_FOR_TAGS

true인 경우 인스턴스 관리자를 사용하여 태그 핸들러 인스턴스를 가져옵니다. 값을 지정하지 않으면 true 가 사용됩니다.

시스템 속성이 변경되지 않았습니다

org.apache.jasper.Constants.INJECT_TAGS

true인 경우 태그에 지정된 주석을 처리하고 삽입합니다. 이는 간단한 태그를 사용하거나 태그 풀링을 비활성화할 때 성능에 영향을 줄 수 있습니다. 값을 지정하지 않으면 false 가 사용됩니다.

시스템 속성이 변경되지 않았습니다

표 A.4. 매핑 보안 시스템 속성

JBoss EAP 6 시스템 속성

설명

JBoss EAP 7에서와 동등

org.apache.catalina.connector.RECYCLE_FACADES

true 이거나 보안 관리자가 각 요청에 대해 새 facade 개체를 사용하는 경우. 값을 지정하지 않으면 기본값 false 가 사용됩니다.

동등한 구성 없음

org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH

이 문자가 true 이면 경로 구분 기호로 '\' 문자가 허용됩니다. 값을 지정하지 않으면 기본값 false 가 사용됩니다.

동등한 구성 없음

org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH

이 경우 ' %2F' 및 '%5C'가 경로 구분 기호로 허용됩니다. 값을 지정하지 않으면 기본값 false 가 사용됩니다.

관리 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

값을 지정하지 않으면 true 가 사용됩니다. true 인 경우 다음 작업이 발생합니다. 애플리케이션 디스패처에 전달된 래핑된 요청 또는 응답 개체를 확인하여 원래 요청 또는 응답을 래핑했는지 확인합니다. (SRV.8.2 / SRV.14.2.5.1) 문자 인코딩이 지정되지 않은 경우 Response.getWriter() 호출을 실행하면 Response.getCharacterEncoding()ISO-8859-1 반환되고 Content-Type 응답 헤더에는 charset=ISO-8859-1 구성 요소가 포함됩니다. (SRV.15.2.22.1) 세션과 연결된 모든 요청으로 인해 요청 명시적으로 세션에 액세스하는지 여부와 관계없이 세션의 마지막 액세스 시간이 업데이트됩니다. (SRV.7.6)

기본적으로 준수

org.apache.catalina.core.StandardWrapperValve.SERVLET_STATS

true 이거나 org.apache.catalina.STRICT_SERVLET_COMPLIANCE가 true인 경우 래퍼는 개별 서블릿에 대한 JSR-77 통계를 수집합니다. 값을 지정하지 않으면 기본값 false 가 사용됩니다. 이 맵 보안 시스템 속성에 해당하는 자카르타는 Jakarta Management입니다.

동등한 구성 없음

org.apache.catalina.session.StandardSession.ACTIVITY_CHECK

true 이거나 org.apache.catalina.STRICT_SERVLET_COMPLIANCEtrue인 경우 Tomcat은 각 세션에 대한 활성 요청 수를 추적합니다. 세션이 유효한지 확인할 때 활성 요청이 하나 이상 있는 모든 세션은 항상 유효한 것으로 간주됩니다. 값을 지정하지 않으면 기본값 false 가 사용됩니다.

동등한 구성 없음

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에 수정