WSJPA FastPath 구성

JPA(Java™ Persistence API)는 구현자가 Java 오브젝트 양식으로 관계형 데이터를 변환하는 방법에 대한 가이드라인을 제공하는 매우 유연한 스펙입니다. API의 유연한 네이처로 인해 많은 작업이 관계형 데이터를 오브젝트 양식으로 올바르게 로드하는 방법을 판별하기 위해 API 제공자에 의해 런타임에 완료됩니다. 특정 상황에서, 이러한 유연성으로 인해 데이터가 올바르게 로드되도록 런타임에 여분의 코드를 계속해서 실행해야 합니다. 일부 이러한 유연성을 포기하여, WSJPA FastPath 최적화는 이러한 여분의 코드의 많은 부분을 건너뛰어 JDBC 계층과 직접 상호작용하는 고도로 최적화된 코드의 생성을 시도합니다. 이 최적화를 통해 향상된 성능을 얻을 수 있습니다.

이 태스크 정보

참고: FastPath는 WSJPA 지속성 제공자에서만 지원됩니다.

이러한 코드 경로 최적화는 복잡한 프로세스이므로, 모든 도메인 모델이 WSJPA FastPath 최적화의 요구사항을 만족시키지는 않습니다.

Fastpath 기능은 데이터가 허용 가능한 형식으로 모델링되어 있고 확장 JPA 기능을 사용하지 않는 일부 애플리케이션의 성능을 향상시킬 수 있습니다.

예를 들어, 다음 코드를 검토하십시오.
public Customer findCustomer(int id) { 
		 		 return em.find(Customer.class, id); 
}

이 예는 고객 엔티티를 찾는 단순한 헬퍼 메소드입니다. findCustomer 메소드가 시작될 때마다, JPA 런타임은 많은 코드를 실행하여 요청을 분석하고, 데이터베이스에 액세스하고 고객 엔티티를 로드합니다. FastPath 최적화를 사용하지 않으면, 대부분의 논리가 findCustomer 메소드의 두 번째 및 후속 실행의 경우와 동일합니다. 첫 번째 실행의 런타임 의사결정 중 극히 일부만 findCustomer 메소드의 향후 호출을 위해 보유됩니다. 이러한 여분의 코드 처리는 일부 시나리오에서 성능 문제를 야기할 수 있습니다.

FastPath 기능이 사용으로 설정되면, em.find(Customer.class, id)의 첫 번째 호출에서, em.find(Customer, id)에 대한 모든 후속 호출을 대체하는 고도로 최적화된 코드가 생성됩니다. 이러한 생성된 코드는 고객을 발견할 때마다 id만 변경된다고 가정합니다. 따라서 거의 의사결정 없는 코드를 생성할 수 있습니다. 첫 번째 메소드 호출에서 FastPath 생성이 성공한 경우, 다음과 유사한 메시지가 로깅됩니다.
10855  fp_pu  INFO   [main] FP - Successfully generated FastPath com.ibm.ws.persistence.fastpath.entities.Customer$Find$FastPath@1f6b69d7".

이 메시지가 로깅되면 고객을 발견하는 모든 향후 실행은 새로 생성된 이 경로를 사용합니다.

이전 예는 파인더 경로가 실행되는 방법을 간단하게 보여주었습니다. FastPath는 또한 필드(관계 및 비관계)의 지연 로딩과 NamedQueries 실행을 최적화하려고 시도합니다.

FastPath 구성:

지속성 단위 특성 wsjpa.FastPath=true가 설정되는 경우, JPA 런타임은 어느 조작이 안전하게 처리될 수 있는지 판별하려고 합니다. Include 및 Exclude 특성을 사용하여 어느 조작이 FastPath를 사용하여 실행되는지 명시적으로 구성할 수 있습니다.

wsjpa.FastPath가 구성되는 경우, openjpa.MetaDataRepository=Preload=true도 구성되어야 합니다. 예를 들어 다음과 같습니다.
<property name=”openjpa.MetaDataRepository” value=”Preload=true”/>
참고: FastPath 런타임으로 제공된 경로를 최적화할 수 없거나 exclude 특성에서 구성된 경우, 이는 일반 JPA 런타임 코드에 의해 실행됩니다. 이는 FastPath 최적화를 실험할 수 있도록 하는 주요 기능입니다. 최적화되지 않은 모든 코드 경로는 자동적으로 기능 손실 없이 원래 JPA 코드 경로로 돌아갑니다.
구성 구문:
<property name=”wsjpa.FastPath”
                              value=”true(Include=’<path>;,<path>;...’;Exclude=’<path>,<path>...’)”>
경로 구문:
  • 파인더: <Fully qualified Entity name>(예: com.ibm.ws.jpa.Customer)
  • 지연 로드 필드: <Fully qualified field name> (예: com.ibm.ws.jpa.Customer.cars)
  • 이름 지정된 조회: <Full query name> (예: com.ibm.ws.jpa.customer_find_by_id)
규칙:
  • 특성(Include/Exclude)이 지정되지 않으면, 런타임은 모든 지속적 유형을 스캔하여 처리 가능한 경로를 판별합니다.
  • Include 특성이 지정되면, 지정된 경로만 처리되고 exclude 특성은 무시됩니다.
  • exclude 특성이 지정되면, 제외 목록에 없는 모든 경로가 처리됩니다.
  • 제외 목록에 필드가 제공되고, 필드의 페치 유형이 EAGER인 경우, 필드가 지연 로드되지 않으므로 필드가 무시됩니다.
예 1:
<property name="wsjpa.FastPath" value="false"/>
이 예에서, false는 기본값입니다. 이 최적화는 기본적으로 켜지지 않습니다.
예제 2:
<property name="wsjpa.FastPath" value="true"/>
런타임은 모든 엔티티를 처리하고, 최적화 할 수 있는 파인더, 지연 로드 조작, 이름 지정된 조회를 판별합니다.
예 3:
<property name="wsjpa.FastPath" value="true(Exclude=com.ibm.ws.jpa.entities.Customer.address,customer.findById"/>
예 #2의 경우와 동일하지만, Customer.address 필드 지연 로딩은 제외하고 이름 지정된 조회 customer.findById는 FastPath 처리에서 제외됩니다.
예 4:
<property name="wsjpa.FastPath" value="true(Include=com.ibm.ws.jpa.entities.Customer, customer.findById"/>
처리되는 유일한 조작은 고객을 찾고 NamedQuery ‘customer.findById’를 실행하는 것입니다. 다른 모든 조작은 일반 JPA 런타임을 사용하여 실행됩니다.

제한사항:

이전에 설명한 대로, FastPath 최적화를 사용하여 얻을 수 있는 전체 성능을 실현하는 데는 대가가 따릅니다. 이 기능이 광범위한 엔티티 모델과 JPA 기능을 지원하지만 FastPath 최적화가 지원하지 않는 여러 알려진 경우가 있습니다. 다음과 같은 현재 알려진 제한사항 목록을 참조하십시오.
  • openjpa.DataCache 특성과 호환 불가능.
  • openjpa.FetchPlan 특성과 호환 불가능.
  • LockModeType 및/또는 특성 맵을 EntityManager 찾기 메소드로 전달.
  • 사용자 정의 필드 전략
  • @org.apache.openjpa.persistence.Factory, @javax.persistence.SecondaryTable,
    @org.apache.openjpa.persistence.Externalizer,
    @org.apache.openjpa.persistence.ExternalValues,
    @org.apache.openjpa.persistence.LRS, @java.sql.Lob, @java.sql.Clob, @java.sql.Blo

  • XML 열 맵핑
  • 임베드 가능
  • 단일 테이블 상속만 지원됨.
  • @javax.persistence.PostLoad 콜백
  • 구분된 ID
  • 다음 결과의 경로 실행:
    • ManyToMany 필드 페치.
    • 맵 또는 배열로 구현된 콜렉션 페치.
    • 결합 테이블에서 결합을 초래하는 SQL문 실행
    • 둘 이상의 동일한 테이블에서 결합을 초래하는 SQL문 실행. 즉: 동일한 엔티티에 대한 여러 EAGER OneToOne 관계가 있는 엔티티.
    • 다중 레벨의 eager 관계 로딩. 예: {A->(eager)B->(eager)C}
  • NamedQuery에서 다음 메소드 setFirst, setFlush, setHind, setLockMode, setMax 호출.
  • PureQuery를 사용하는 JPA 애플리케이션과 호환 불가능.
  • 액세스 의도를 사용하는 JPA 애플리케이션과 호환 불가능.
  • 런타임 시 JPA가 데이터를 페치하는 방법을 변경하는 모든 특성 설정.

주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_jpafastpath
파일 이름:tejb_jpafastpath.html