지속성 제공자와 데이터 소스 연관
JPA(Java™ Persistence API) 애플리케이션은 지속성 제공자가 데이터베이스에 액세스하는 데 사용되는 기본 데이터 소스를 지정합니다.
이 태스크 정보
프로시저
- persistence.xml 파일에서 JNDI(Java Naming and Directory Interface) 이름을
명시적으로 지정하면 애플리케이션이 데이터 소스를 직접 참조합니다. 다른 데이터 소스로 전환하려면 업데이트된 persistence.xml 파일이 필요합니다.
JPA에는 데이터 소스에 액세스하기 위한 두 가지 트랜잭션 패턴이 있습니다.
- JTA(Java Transaction API) 자원 패턴은 글로벌 트랜잭션에 따라 다릅니다. JTA 자원 패턴은 일반적으로 Enterprise JavaBeans(EJB) 세션 facade 범위 내에서 사용됩니다. 이는 JPA가 지속성 맵핑을 처리하는 동안 트랜잭션 및 보안 컨텍스트를 제어하기 위한 세션 Bean을 지원합니다. 이러한 경우 애플리케이션은 EntityTransaction 인터페이스를 사용하지 않지만 액세스 시 글로벌 트랜잭션에 등록된 EntityManager에 의존합니다.
- 비JTA 자원 패턴은 글로벌 트랜잭션이 없는 경우 단일 자원을 처리할 때 사용됩니다. 비JTA 자원 패턴은
일반적으로 웹 애플리케이션 또는 애플리케이션 클라이언트 범위에서
사용됩니다. 애플리케이션은 EntityTransaction 인터페이스를 사용하여 데이터 소스 관련 트랜잭션을 제어합니다.애플리케이션 서버에서 <non-jta-data-source> 요소를 사용하려면 비트랜잭션 데이터 소스에 대한 특수 구성이 필요합니다. 애플리케이션 서버에 대해 구성한 데이터 소스는 현재 트랜잭션 컨텍스트에 자동으로 등록되므로 애플리케이션 서버에 맞게 구성된 데이터 소스는 <non-jta-data-source>로 작동하지 않습니다. 이러한 자동 등록을 막으려면 다음과 같이 추가 데이터 소스 사용자 정의 특성 nonTransactionalDataSource=true를 추가해야 합니다.
- 자원 > JDBC > 데이터 소스를 선택하십시오.
- 구성할 데이터 소스의 이름을 선택하십시오.
- 추가 특성 표제에서 WebSphere Application Server 데이터 소스 특성을 선택하십시오.
- 비트랜잭션 데이터 소스를 선택하십시오.
- 확인을 클릭하십시오.
문제점 방지: JPA 스펙은 READ_COMMITTED와 같이 데이터베이스에서 장기 잠금을 보유하지 않는 분리 레벨로 연결된다고 가정합니다. 이는 대부분의 데이터베이스의 경우 REPEATABLE_READ인 WebSphere® Application Server 기본 분리 레벨과 일치하지 않을 수 있습니다. 분리 레벨 설정 요구사항 주제를 읽어서 데이터베이스에 사용되는 레벨을 찾을 수 있습니다.
데이터베이스의 기본값이 READ_COMMITTED가 아닌 경우, 추가 데이터 소스 사용자 정의 특성 webSphereDefaultIsolationLevel을 추가하여 기본값을 변경할 수 있습니다.분리 레벨이 장기 읽기 잠금을 보유하는 값으로 설정된 경우, 기본값인 낙관적 잠금 대신 비관적 잠금을 사용하도록 JPA 제공자를 구성하십시오.표 1. 분리 레벨 값. 다음 표에는 유효한 격리 레벨 값이 표시되어 있습니다. 값 분리 레벨 1 READ_UNCOMMITTED 2 READ_COMMITTED(JPA 기본값) 4 REPEATABLE_READ(WebSphere Application Server 기본값) 8 SERIALIZABLE EclipseLink의 경우 persistence.xml 파일에서 다음 특성을 사용하십시오.<property name=”eclipselink.pessimistic-lock” value=”Lock”/>
OpenJPA의 경우 사용자의 persistence.xml 파일에서 다음 특성을 사용하십시오.gotcha<property name="openjpa.Optimistic" value="false"/> <property name="openjpa.LockManager" value=pessimistic"/>
JPA 스펙은 지속성 단위의 <jta-data-source> 및 <non-jta-data-source> 요소에 정의되는 데이터 소스가 JNDI 이름스페이스에서 등록되도록 지시합니다.
예를 들어, persistence.xml 파일에는 다음과 같은 항목을 포함해야 합니다.<jta-data-source>jdbc/DataSourceJNDI</jta-data-source>
- WebSphere Application Server용 JPA
솔루션은 컴포넌트 네임스페이스의 데이터 소스를 참조할 수 있는 JNDI 데이터 소스 구현을 확장합니다. EJB 또는 웹 모듈 배치 디스크립터 파일에서는
이것이 <resource-ref> 요소입니다. 데이터 소스에 java:comp/env/
접두부를 추가하면 애플리케이션이
로컬 JNDI 이름을 사용하여 데이터 소스를 간접적으로 참조할 수 있습니다. 이 연관에서, 애플리케이션는
업데이트하지 않아도 되고 다른 데이터 소스를 사용하도록 <resource-ref>를 변경합니다. 다음 예를 참조하십시오.
<jta-data-source>java:comp/env/jdbc/DataSourceJNDI</jta-data-source>
다음에 수행할 작업
데이터 소스 구성에 대한 정보는 데이터 소스 작성 및 구성에 대한 주제를 참조하십시오.
관련 개념:


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_defjpadatasource
파일 이름:tejb_defjpadatasource.html