[AIX Solaris HP-UX Linux Windows]

SCA 애플리케이션에서 PassByReference 최적화 사용(더 이상 사용되지 않음)

클라이언트가 원격 인터페이스에 대해 동일한 JVM에 있는 서비스를 호출할 때 정렬 및 정렬 해제를 생략하는 데 사용할 수 있는 @AllowsPassByReference 어노테이션에 대한 지원이 있습니다.

이 태스크 정보

일반적으로 서비스 호출의 성능 집중 양상은 데이터 정렬 및 정렬 해제입니다. 비록 로컬 인터페이스에 대한 호출이 항상 참조에 의한 전달 시맨틱의 결과를 가져와서 데이터가 복사되지 않지만, 원격으로 가능한 인터페이스에 대한 호출이 값에 의한 전달 시맨틱을 수반합니다. 이는 일반적으로 확장할 수 있는 데이터를 복사하는 결과를 가져옵니다.

SCA 기본 바인딩은 클래스 레벨 또는 개별 메소드 레벨에서 서비스 구현에 사용할 수 있는 최적화로 @AllowsPassByReference를 제공합니다.

서비스 구현 클래스 또는 메소드에 @AllowsPassByReference 어노테이션을 배치할 때, 구현자는 값에 의한 전달 시맨틱을 위반하는 방법으로 데이터를 수정하지 않는다는 것에 동의합니다. 이를 사용하면 런타임 환경이 이 비용을 저장하도록 실제 데이터 직렬화 및 직렬화 해제를 수행하지 않도록 최소화했더라도 클라이언트와 서비스 모두가 데이터의 자체 사본을 사용하여 작업하는 것으로 가정할 수 있습니다.

서비스 구현 클래스에 클래스 레벨 또는 개별 메소드 레벨에서 정의된 @AllowsPassByReference 어노테이션이 있는 경우 매개변수, 리턴 유형 및 비즈니스 예외가 참조별 전달됩니다.

더 구체적으로 말하자면, 다음 모두가 true일 때 PassByReference 최적화가 수행됩니다.
  • 클라이언트 및 서비스가 동일한 JVM을 대상으로 합니다.
  • 호출은 기본 바인딩 이상입니다.
  • @AllowsPassByReference가 있습니다. 서비스 구현은 적절한 Java™ 구현입니다. @AllowsPassByReference 주석 또는 복합 구현은 궁극적으로 이러한 측면에서 재귀적으로 구현됩니다. @AllowsPassByReference-annotated 자바 구현.
  • 모든 입력, 출력 및 예외 유형에는 동일한 패키지 규정 클래스 이름이 있고 클래스 로더 공통이 로드할 수 있거나 클라이언트 및 서비스 모두가 공유할 수 있습니다.
  • 클라이언트 및 서비스 모두 동일한 비즈니스 레벨 애플리케이션의 파트입니다.

    이 요구사항은 OSOA SCA 애플리케이션에 적용됩니다. OSOA SCA 애플리케이션의 경우, 클라이언트 및 서비스 모두 동일한 비즈니스 레벨 애플리케이션의 파트여야 합니다. 이 요구사항은 OASIS SCA 애플리케이션에 적용되지 않습니다.

프로시저

  1. SCA 애플리케이션에 PassByReference 최적화를 사용할 수 있도록 하려면 최적화하려는 모든 클래스가 동일한 클래스 로더로 로드되어야 합니다.
    SCA 컨트리뷰션 가져오기 및 내보내기 지원을 사용하십시오.
  2. 클라이언트 및 서비스 실행 동안 동일한 클래스 로더로 로드되는 모든 클래스를 포함하는 JAR(Java Archive) 파일을 작성하십시오.
  3. 추가sca-contribution.xml 파일을META-INF JAR의 디렉터리입니다.
    sca-contribution.xml에 대한 정보는 OSOA 어셈블리 스펙을 참조하십시오. 컨트리뷰션 정의에는 클라이언트 또는 서비스 JAR 파일에서 액세스하는 JAR에 포함된 모든 패키지를 내보내는 export.java 문이 포함되어야 합니다. 예를 들어,
    <contribution xmlns="https://www.osoa.org/xmlns/sca/1.0"
        targetNamespace="http://test.sca.scafp/pbr/shared/java">
        <export.java package="com.ibm.sample.interface"/>
        <export.java package="com.ibm.sample.types"/>
    </contribution>
    클라이언트 및 서비스 JAR 파일이 이미 sca-contribution.xml 파일을 사용하지 않으면, 이 파일을 업데이트해서 공유 라이브러리가 내보내는 패키지를 가져오는 컨트리뷰션 정의를 사용하십시오. 예를 들어, 이전 공유 컨트리뷰션에 액세스하는 클라이언트 및 서비스에 대한 컨트리뷰션 파일은 다음과 같이 보입니다.
    Client:
    <contribution xmlns="https://www.osoa.org/xmlns/sca/1.0"
        targetNamespace="http://test.sca.scafp/pbr/shared"
        xmlns:pbr="http://test.sca.scafp/pbr/shared">
        <deployable composite="pbr:PassByRef.SharedClient"/>
        <import.java package="com.ibm.sample.interface"/>
        <import.java package="com.ibm.sample.types"/>
    </contribution>
    
    Service:
    <contribution xmlns="https://www.osoa.org/xmlns/sca/1.0"
        targetNamespace="http://test.sca.scafp/pbr/shared"
        xmlns:pbrsh="http://test.sca.scafp/pbr/shared">
        <deployable composite="pbrsh:PassByRef.SharedService"/>
        <import.java package="com.ibm.sample.interface"/>
        <import.java package="com.ibm.sample.types"/>
    </contribution>
  4. SCA 애플리케이션을 배치하십시오.

    클라이언트, 서비스 및 공유 기여를 자산으로 추가합니다. WebSphere® 저장소. 이는 어떠한 순서로도 발생할 수 있지만 클라이언트 또는 서비스 자산을 컴포지션 단위로 비즈니스 레벨 애플리케이션에 추가하기 전에 공유 컨트리뷰션을 자산으로 추가해야 합니다. 클라이언트 및 서비스 자산만 컴포지션 단위로 비즈니스 레벨 애플리케이션에 추가되어야 합니다. 클라이언트 및 서비스에 대한 추가 컴포지션 단위 조작 동안 공유 자산은 비즈니스 레벨 애플리케이션에 공유 라이브러리로 자동으로 추가됩니다.

    비즈니스 레벨 애플리케이션 외부에 배치된 클라이언트는 비즈니스 레벨 애플리케이션 내부에 배치된 SCA 서비스를 호출하기 위해 PassByReference 최적화를 사용할 수 없습니다. 예를 들어, 기본 바인딩을 사용하는 사용자 작성 WAR(Web Application Archive) 파일은 비즈니스 레벨 애플리케이션에 설치할 수 없으므로 WAR 호스트 클라이언트는 PassByReference 최적화에 참여할 수 없습니다. PassByReference 최적화는 JAR 파일 간에만 지원됩니다.

    OSOA SCA 애플리케이션의 경우, 동일한 비즈니스 레벨 애플리케이션에 서비스 JAR 파일을 모두 설치해야 합니다.

    OASIS SCA 애플리케이션에서 JAR 파일은 별도의 비즈니스 레벨 애플리케이션에 있을 수 있습니다.

결과

SCA 애플리케이션에 대한 PassByReference 최적화가 사용 가능합니다.