7장. 애플리케이션 마이그레이션 변경 이해


이 섹션에서는 JBoss EAP 6.4 또는 7.x에서 JBoss EAP 8.0으로 애플리케이션을 마이그레이션하는 데 필요한 변경 사항에 대해 설명합니다.

7.1. 웹 서비스 애플리케이션 변경

JBossWS 5는 Apache CXF,Apache WSS4JApache Santuario 구성 요소의 업그레이드를 통해 JBoss EAP 7 웹 서비스에 새로운 기능 및 성능 향상을 제공합니다. JBoss EAP 8.0은 JBossWS 7을 사용하여 해당 기능을 지원합니다.

7.1.1. Cryostat-RPC 지원 변경 사항

JAX-RPC(Java API for XML-based RPC)는 Java EE 6에서 더 이상 사용되지 않으며 Java EE 7에서는 선택 사항입니다. JBoss EAP 7부터는 더 이상 지원되지 않습니다. Cryostat-RPC를 사용하는 애플리케이션은 현재 자카르타 EE 표준 웹 서비스 프레임워크인 Jakarta XML Web Services 를 사용하도록 마이그레이션해야 합니다.

Cryostat-RPC 웹 서비스의 사용은 다음과 같은 방법으로 식별할 수 있습니다.

  • root 요소가 < java-wsdl-mapping>인 XML 파일인 Cryostat-RPC 매핑 파일이 있습니다.
  • < jaxrpc-mapping-file> 하위 요소를 포함하는 < webservice-description > 요소가 포함된 webservices.xml XML 설명자 파일이 있습니다. 다음은 Cryostat-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>
    Copy to Clipboard Toggle word wrap
  • Cryostat -jar.xml 파일이 있으며, 여기에는 Cryostat-RPC 매핑 파일을 참조하는 < service-ref >가 포함되어 있습니다.

7.1.2. Apache CXF Spring 웹 서비스 변경

이전 릴리스의 JBoss EAP에서는 엔드포인트 배포 아카이브와 함께 jbossws-cxf.xml 구성 파일을 포함하여 JBossWS 및 Apache CXF 통합을 사용자 지정할 수 있습니다. 이에 대한 한 가지 사용 사례는 Apache CXF 버스에서 웹 서비스 클라이언트 및 서버 끝점에 대한 인터셉터 체인을 구성하는 것입니다. 이러한 통합에는 Spring이 JBoss EAP 서버에 배포되어야 했습니다.

JBoss EAP 8에서는 Spring 통합이 더 이상 지원되지 않습니다. jbossws-cxf.xml 설명자 구성 파일이 포함된 애플리케이션은 해당 파일에 정의된 사용자 지정 구성을 대체하도록 수정해야 합니다. Apache CXF API에 직접 액세스할 수는 있지만 애플리케이션은 이식할 수 없습니다.

제안된 접근 방식은 Spring 사용자 지정 구성을 가능한 경우 새 JBossWS 설명자 구성 옵션으로 교체하는 것입니다. JBossWS 설명자 기반 접근 방식은 클라이언트 엔드포인트 코드를 수정하지 않고도 유사한 기능을 제공합니다. 경우에 따라 Spring을 CDI(컨텍스트 종속성)로 교체할 수 있습니다.

7.1.2.1. Apache CXF 인터셉터

JBossWS 설명자는 클라이언트 엔드포인트 코드를 수정하지 않고도 인터셉터를 선언할 수 있는 새로운 구성 옵션을 제공합니다. 대신 cxf.interceptors.incxf.interceptors.out 속성의 인터셉터 목록을 지정하여 사전 정의된 클라이언트 및 엔드포인트 구성 내에서 인터셉터를 선언합니다.

다음은 이러한 속성을 사용하여 인터셉터를 선언하는 jaxws-endpoint-config.xml 파일의 예입니다.

<?xml version="1.0" encoding="UTF-8"?>
<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:5.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jakartaee="https://jakarta.ee/xml/ns/jakartaee"
  xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:5.0 schema/jbossws-jaxws-config_5_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>
Copy to Clipboard Toggle word wrap

7.1.2.2. Apache CXF 기능

JBossWS 설명자를 사용하면 cxf.features 속성에 대한 기능 클래스 이름 목록을 지정하여 사전 정의된 클라이언트 및 엔드포인트 구성 내에서 기능을 선언할 수 있습니다.

다음은 이 속성을 사용하여 기능을 선언하는 jaxws-endpoint-config.xml 파일의 예입니다.

<?xml version="1.0" encoding="UTF-8"?>
<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:5.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jakartaee="https://jakarta.ee/xml/ns/jakartaee"
  xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:5.0 schema/jbossws-jaxws-config_5_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>
Copy to Clipboard Toggle word wrap

7.1.2.3. Apache CXF HTTP 전송

Apache CXF에서 HTTP 전송 구성은 org.apache.cxf.transport.http.HTTPConduit 옵션을 지정하여 수행할 수 있습니다. JBossWS 통합을 통해 다음과 같이 Apache CXF API를 사용하여 프로그래밍 방식으로 conduit를 수정할 수 있습니다.

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);
...
Copy to Clipboard Toggle word wrap

시스템 속성을 설정하여 Apache CXF HTTPConduit 기본값을 제어하고 재정의할 수도 있습니다.

Expand
속성유형설명

cxf.client.allowChunking

부울

청크를 사용하여 요청을 보낼지 여부를 지정합니다.

cxf.client.chunkingThreshold

정수

청크 모드에서 청크 모드로 전환되는 임계값을 설정합니다.

cxf.client.connectionTimeout

long

연결 시간 초과의 시간(밀리초)을 설정합니다.

cxf.client.receiveTimeout

long

수신 시간 초과의 시간(밀리초)을 설정합니다.

cxf.client.connection

문자열

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

cxf.tls-client.disableCNCheck

부울

CN 호스트 이름 검사를 비활성화할지 여부를 지정합니다.

7.1.3. WS-Security 변경

이 섹션에서는 JBoss EAP 6.4 및 JBoss EAP 7.0에서 애플리케이션에 대한 다양한 WS-Security 변경 사항에 대해 설명합니다.

  • 애플리케이션에 org.apache.ws.security.WSPasswordCallback 클래스에 액세스하는 사용자 지정 콜백 처리기가 포함된 경우 이 클래스가 패키지 org.apache.wss4j.common.ext 로 이동했음을 유의하십시오.
  • org.apache.ws.security.saml.ext 패키지의 대부분의 SAML 8080 개체는 org.apache.wss4j.common.saml 패키지로 이동되었습니다.
  • RSA v1.5 키 전송 및 모든 관련 알고리즘은 기본적으로 허용되지 않습니다.
  • STS(Security Token Service)는 이전에는 onBehalfOf 토큰에서만 검증되었습니다. 이제 ActAs 토큰도 검증합니다. 결과적으로 ActAs 토큰에 대해 제공되는 UsernameToken 에 유효한 사용자 이름과 암호를 지정해야 합니다.
  • 이제 SAML 전달자 토큰에 내부 서명이 필요합니다. org.apache.wss4j.dom.dom.SamlAssertionValidator 클래스에 서명 확인을 활성화하거나 비활성화하는 setRequireBearerSignature() 메서드가 있습니다.

7.1.4. JBoss 모듈 구조 변경

cxf-apicxf-rt-core JAR이 하나의 cxf-core JAR로 병합되었습니다. 그 결과 JBoss EAP의 org.apache.cxf 모듈에는 이제 cxf-core JAR이 포함되어 이전 릴리스보다 더 많은 클래스를 노출합니다.

7.1.5. Bouncy Castle 요구 사항 및 변경 사항

XML/WS-Security의 대칭 암호화에 Galois/Counter Mode(GCM)와 함께 AES 암호화를 사용하려면 BouncyCastle Security Provider가 필요합니다.

JBoss EAP 7부터 org.bouncycastle 모듈에 포함되었으며 JBossWS는 클래스 로더를 사용하여 BouncyCastle 보안 공급자를 가져오고 사용할 수 있었습니다. 따라서 더 이상 현재 JVM에 BouncyCastle을 정적으로 설치할 필요가 없습니다. 컨테이너 외부에서 실행되는 애플리케이션의 경우 클래스 경로에 BouncyCastle 라이브러리를 추가하여 JBossWS에서 보안 공급자를 사용할 수 있습니다.

서버의 jaxws-endpoint-config.xml 배포 설명자 파일에서 org.jboss.ws.cxf.noLocalBC 속성 값을 true 로 설정하거나 서버의 jaxws-client-config.xml 설명자 파일을 클라이언트에 대해 jaxws-client-config.xml 설명자 파일을 설정하여 이 동작을 비활성화할 수 있습니다.

JBoss EAP와 함께 제공되는 버전과 다른 버전을 사용하려면 BouncyCastle을 JVM에 정적으로 설치할 수 있습니다. 이 경우 정적으로 설치된 BouncyCastle Security Provider가 클래스 경로에 있는 공급자를 통해 선택됩니다. 문제가 발생하지 않도록 하려면 BouncyCastle 1.72 이상을 사용해야 합니다.

7.1.6. Apache CXF 버스 선택 전략

컨테이너에서 실행되는 클라이언트의 기본 버스 선택 전략이 THREAD_BUS 에서 TCCL_BUS 로 변경되었습니다. 컨테이너 외부에서 실행되는 클라이언트의 경우 기본 전략은 여전히 THREAD_BUS 입니다. 다음 방법 중 하나를 사용하여 이전 릴리스의 해당 동작을 복원할 수 있습니다.

  • 시스템 속성 org.jboss.ws.cxf.jaxws-client.strategy 값을 THREAD_BUS 로 설정하여 JBoss EAP 서버를 부팅합니다.
  • 클라이언트 코드에서 선택 전략을 명시적으로 설정합니다.

7.1.7. WebServiceRef에 대한 Jakarta XML Web Services 2.2 요구 사항

컨테이너는 웹 서비스 참조에 삽입된 클라이언트를 빌드하기 위해 WebServiceFeature 클래스를 생성자에 인수로 포함하는 Jakarta XML Web Services 2.2 스타일 생성자를 사용해야 합니다. JBossWS 4와 함께 제공되는 JBoss EAP 6.4는 이러한 요구 사항을 숨깁니다. JBossWS 5가 포함된 JBoss EAP 7부터 이 요구 사항은 숨겨지지 않습니다. 이는 사용자가 컨테이너에서 삽입한 서비스 클래스를 제공한 경우 하나 이상의 WebServiceFeature 인수를 포함하는 jakarta.xml.ws.Service 생성자를 사용하도록 기존 코드를 업데이트하여 Jakarta XML Web Services 2.2 이상을 구현해야 합니다.

protected Service(URL wsdlDocumentLocation,
       QName serviceName,
       WebServiceFeature... features)
Copy to Clipboard Toggle word wrap

7.1.8. IgnoreHttpsHost CN check change

이전 릴리스에서는 시스템 속성 org.jboss.security.ignoreHttpsHosttrue 로 설정하여 인증서에 지정된 서비스의 CN(Common Name)에 대해 HTTPS URL 호스트 이름을 비활성화할 수 있습니다. 이 시스템 속성 이름은 cxf.tls-client.disableCNCheck 로 교체되었습니다.

7.1.9. 서버 측 구성 및 클래스 로드

서비스 엔드포인트 및 서비스 클라이언트 처리기에 삽입을 사용하면 더 이상 org.jboss.as.webservices.server.integration JBoss 모듈에서 처리기 클래스를 자동으로 로드할 수 없습니다. 애플리케이션이 사전 정의된 지정된 구성에 종속된 경우 배포에 대한 새 모듈 종속성을 명시적으로 정의해야 할 수 있습니다. 자세한 내용은 명시적 모듈 종속 항목 마이그레이션 을 참조하십시오.

7.1.10. Java 지원 표준 덮어쓰기 메커니즘 사용 중단

Java 지원 표준 덮어쓰기 메커니즘 은 JDK 1.8_40에서 더 이상 사용되지 않으며 JDK 9에서 제거하려고 했습니다. 이 메커니즘을 통해 개발자는 JAR을 JRE 내의 보증 디렉터리에 배치하여 배포된 모든 애플리케이션에서 라이브러리를 사용할 수 있습니다.

JBoss EAP 7 릴리스부터 애플리케이션이 Apache CXF의 JBossWS 구현을 사용한 경우 필요한 종속 항목이 올바른 순서로 추가되므로 이러한 변경의 영향을 받지 않아야 합니다. 애플리케이션이 Apache CXF에 직접 액세스하는 경우 애플리케이션 배포의 일부로 JBossWS 종속성을 사용한 후 Apache CXF 종속 항목을 제공해야 합니다.

7.1.11. EAR 아카이브의 설명자 사양

이전 릴리스의 JBoss EAP에서는 JAR 아카이브의 META-INF/ 디렉터리에 있는 Jakarta Enterprise Cryostats 웹 서비스 배포에 대한 jboss-webservices.xml 배포 설명자 파일을 구성하거나 WAR 아카이브에 번들된 Jakarta Enterprise Cryostats 웹 서비스 끝점을 위한 article -INF/ 디렉터리에 구성할 수 있습니다.

JBoss EAP 7부터는 EAR 아카이브의 META-INF/ 디렉터리에 jboss-webservices.xml 배포 설명자 파일을 구성할 수 있습니다. jboss-webservices.xml 파일이 EAR 아카이브 및 JAR 또는 WAR 아카이브에 있는 경우 JAR에 대한 jboss-webservices.xml 파일의 구성 데이터가 EAR 설명자 파일의 해당 데이터를 덮어씁니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

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

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동