애플리케이션 서버의 컨테이너는 Java™
EE(Java Enterprise Edition) 환경의
JPA(Java Persistence API)에 필요한 많은 기능을
제공할 수 있습니다. 애플리케이션 서버는 또한 Java EE
환경에서 애플리케이션 개발을 도와주는 JPA 명령 도구도
제공합니다.
이 태스크 정보
이 태스크의 경우 JPA 2.1 인터페이스에 대해 컴파일하기 위해 클래스 경로에
com.ibm.ws.jpa-2.1.thinclient_9.0.jar 독립형
Java 아카이브(JAR) 파일을 지정해야 합니다. JPA 2.0 인터페이스에 대해 컴파일하려면
com.ibm.ws.jpa-2.0.thinclient_9.0.jar을 지정하십시오. 이 독립형 JAR 파일은 설치 이미지에서 찾을 수 있습니다. 서버 설치 이미지에서 이들 파일의 위치는 ${app_server_root}/runtimes
디렉토리에 있습니다.
중요사항: JPA 애플리케이션에는 CMP(Container-Managed Persistence)
또는 Bean 관리 지속(BMP)을 사용하는 애플리케이션과는
다른 구성 기법이 필요합니다. 이 애플리케이션은 CMP 또는
BMP를 구현하는 애플리케이션과 연관된 일반 배치 기법을 따르지
않습니다. JPA 애플리케이션에서 지속성 단위를 정의해야 하며
애플리케이션이 Java EE 환경에서 실행될 수
있도록 해당 특성을 구성해야 합니다.
컨테이너는
애플리케이션을 Java EE 환경에서 실행하기
위해 필요한 모든 인젝션을 지원합니다. 예를 들면, 컨테이너는 애플리케이션의
@PersistenceUnit 및 @PersistenceContext를 주입할 수 있습니다.
프로시저
- 엔티티 클래스를 생성하십시오. 이들은
POJO(Plain Old Java Object)
엔티티입니다. 배치 모델에 따라 일부 또는 모든 JPA 도구를
사용할 수 있습니다.
- 하향식 맵핑: 엔티티 정의와 오브젝트-관계형
맵핑을 처음 시작한 다음 해당 데이터에서 데이터베이스
스키마를 파생시킵니다. 이 방법을 사용하는 경우
일반적으로 오브젝트 모델의 아키텍처를 작성한 다음
엔티티 클래스를 작성해야 합니다. 이들 엔티티 클래스는
결과적으로 데이터베이스 모델 작성을 지원합니다. 오브젝트 모델에서 관계형 모델로의
하향식 맵핑을 사용하는 경우 엔티티 클래스를 개발한 후
JPA 제공자의 기능을 사용하여 해당 엔티티 클래스를 기반으로 하는
데이터베이스 테이블을 생성하십시오. wsmapping 도구가
OpenJPA를 지속성 제공자로 사용할 때 이 방식에 도움이 됩니다.
- 상향식 맵핑: 데이터베이스 스키마인 데이터
모델로 시작한 다음, 엔티티 클래스를 향해 위쪽으로
작업합니다. wsreversemapping 도구는 OpenJPA를
지속성 제공자로 사용할 때 이 방식에 도움이 됩니다.
- 중간 합류식 맵핑: 가장 일반적인 개발
모델입니다. 데이터 모델과 부분 완료된 오브젝트 모델의 조합이
있습니다. 목적과 요구사항에 따라 관계를 협의하여
차이를 해결해야 합니다. wsmapping
도구와 wsreversemapping 도구가 둘 다 OpenJPA를
지속성 제공자로 사용할 때 이 방식에 도움이 됩니다.
애플리케이션 서버의 JPA 솔루션은 JPA 애플리케이션 개발을
지원하는 여러 도구를 제공합니다. 이들 도구를
IBM® Rational® Application Developer와 결합하면 Java EE 또는 Java SE 애플리케이션을
위한 견고한 개발 환경을
제공합니다. Rational Application
Developer에는 어노테이션, 사용자 정의된 persistence.xml 파일 편집기, 데이터베이스 탐색기
및 기타 기능을 삽입하는 GUI 도구가 포함되어 있습니다. 또 다른 대안은
Eclipse Dali 프로젝트입니다. Rational Application Developer 또는 Eclipse Dali 플러그인에
대한 자세한 정보는 해당 웹 사이트에서 찾을 수 있습니다.
- 엔티티 클래스를 컴파일하십시오.
Criteria API를 사용 중인 아닌 경우, 임의의 Java 클래스와 같이 엔티티를 컴파일하십시오. Criteria API를
사용 중인 경우 Criteria API 메타 모델 클래스도 생성해야 합니다.
다음은
이 옵션을 사용하는 방법의 예입니다.
EclipseLink를 사용하여
javac 명령에서 다음 인수를 제공하십시오.
-processor
org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor
-Aeclipselink.persistencexml= persistence.xml_location
app_server_root/java/bin/javac
-classpath app_server_root/runtimes/com.ibm.ws.jpa-2.1.thinclient_9.0.0.jar
-processor
org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor
-Aeclipselink.persistencexml=app_location/src/META-INF/persistence.xml mypackage\MyEntity.java
OpenJPA 또는 WSJPA를 사용하여
javac 명령에서 다음 인수를
제공하십시오.
-Aopenjpa.metamodel=true
app_server_root/java/bin/javac
-Aopenjpa.metamodel=true
-classpath app_server_root/runtimes/com.ibm.ws.jpa-2.0.thinclient_9.0.0.jar
mypackage/MyEntity.java
- JPA 인핸서 도구인 eclenhancer(EclipseLink의 경우) 및
wsenhancer(OpenJPA의 경우)를 사용하여 엔티티 클래스를 개선하십시오. 인핸서는 사용자가 작성한 지속적 클래스에 제공자 특정 통합
바이트코드를 추가하는 도구입니다. 인핸서는 Java 컴파일러에서 생성된
바이트코드를 사후 처리하고 지속 기능을 구현하는 데 필요한 필드와 메소드를
추가합니다. 애플리케이션 서버의 지속성 제공자가 런타임 시에 엔티티를
자동으로 확장할 수 있지만, 애플리케이션을 빌드할 때 엔티티를 확장하면 보다
나은 성능을 얻을 수 있습니다. 애플리케이션은 이미 확장된 엔티티는
확장하지 않습니다.
eclenhancer 도구 사용 방법의 예에 대해서는 eclenhancer 명령 주제를
참조하십시오. wsenhancer 도구 사용 방법의 예에 대해서는 wsenhancer
명령 주제를 참조하십시오.
- 옵션: 상향식 맵핑을 위한 개발 모델을 사용 중이 아닌 경우,
자동으로 또는 eclenhancer 또는 wsmapping
도구를 사용하여 데이터베이스 테이블을 생성 또는 업데이트하십시오.
- 기본적으로, 오브젝트-관계형 맵핑은 자동으로 발생하지 않지만 eclipselink.ddl-generation
특성(EclipseLink의 경우) 또는 openjpa.jdbc.SynchronizeMappings 특성(OpenJPA의 경우)을 사용하여
애플리케이션 서버가 해당 맵핑을 제공하도록 구성할 수 있습니다. 이들
특성은 데이터베이스 테이블과 오브젝트 모델을 자동으로 일치시킴으로써 개발 속도를
향상시킵니다. 자동 맵핑을 사용하려면 persistence.xml
파일에 다음 행을 포함하십시오.
EclipseLink의
경우:
<property name="eclipselink.ddl-generation" value =“create-tables”/>
OpenJPA의
경우:
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
JPA 2.1
표준:
<property name="javax.persistence.schema-generation.database.action" value="create"/>
문제점 방지: 런타임에서 자동 오브젝트-관계형 맵핑을
사용하려면 모든 지속적 클래스가 Java .class 파일,
맵핑 파일 및 JAR(Java Archive) 파일 요소에 XML
형식으로 나열되어야 합니다.
gotcha
- 데이터베이스 테이블을 수동으로 업데이트 또는 생성하려면
명령행에서 애플리케이션 서버의 JPA 맵핑 도구를 실행하여
데이터베이스의 테이블을 작성하십시오. eclenhancer
도구 실행 방법에 대한 예는 eclenhancer 명령 주제를 참조하십시오. wsmapping
도구 사용 방법의 예에 대해서는 wsmapping 명령 주제를 참조하십시오.
- 옵션: DB2®를 사용 중이고 정적 SQL(Structured Query
Language)을 사용하려는 경우 wsdbgen 명령을 실행하십시오. wsdbgen 명령을 사용하려면 IBM Optim pureQuery
런타임이 설치되어야 합니다. wsdbgen 명령은
persistence.xml 파일이 위치하는 동일한 META-INF
디렉토리 아래에 persistence_unit_name.pdqxml
파일을 작성합니다. 여러 개의 지속성 단위가 있는 경우, 각 지속성 단위에 대해
wsdbgen 명령이 실행되어야 합니다.
한 애플리케이션이 다중 pdqxml
파일을 참조할 때는 Merge 유틸리티를 사용하여 이들을
단일 pdqxml 파일로 결합하십시오. 결합된
pdqxml 파일을 pdqProperties의 pureQueryXml
특성을 지정하십시오. IBM 통합 데이터 관리
Information Center의 Merge 유틸리티 문서를
참조하십시오.
문제점 방지: JPA를 구현하고
정적 SQL을 실행하도록 구성되는 애플리케이션은 다양한 예외를 경험할 수 있습니다. 이들 예외는 애플리케이션을 준비하는 데 사용할 수 있는
wsdbgen 명령에서 또는 애플리케이션이 실행 중이고
JPA 메소드를 호출할 때 발생할 수 있습니다. 이 문제점을 해결하려면
다음 단계를 완료하십시오.
- iSeries JDBC 드라이버 V5R4에 대한 프로그램
임시 수정(PTF)을 설치하십시오. PTF 번호 SI32561 및 SI32562를
설치하십시오. IBM System i® Support: PTF Cover Letters
웹 사이트를 통해 이들 PTF를 찾을 수 있습니다.
- iSeries용 DB2 Universal Database™ V6R1 또는 V5R3를 사용하는 경우,
적당한 릴리스에 대한 수정사항 웹 사이트에 방문하십시오.
- 버전 1.3.100 이상의 pureQuery의 필수 레벨을
설치하십시오. 자세한 정보는 IBM Optim pureQuery Runtime
웹 사이트를 참조하십시오. APAR PK65069에 대한 수정사항과 함께
버전 3.52.95 이상의 최신 JCC 드라이버를 설치하십시오. 최신
JCC 드라이버는 IBM DB2 소프트웨어 패키지의 일부입니다.
- z/OS® 서버의
DB2의 경우, V8 대체 드라이버의 경우 PTF UK39204,
V9의 경우 PTF UK39205를 설치하고, APAR PK67706에 대한 수정사항을
설치하십시오.
gotcha
이 명령을 실행하는 방법에 대한 예제는 wsdbgen 명령 주제를 참조하십시오.
- 옵션: OpenJPA 및 애플리케이션 관리 ID를 사용 중인 경우 wsappid
도구로 애플리케이션 관리 ID 클래스를 생성하십시오. 애플리케이션 관리 ID를 사용하는 경우 하나 이상의 필드가
ID 필드여야 합니다. 엔티티에 여러 ID 필드가 있고
그 중 하나 이상의 필드가 다른 엔티티와 관련이 있는 경우
ID 클래스를 사용하십시오. 애플리케이션 관리 ID 도구는
애플리케이션 관리 ID를 구현하는 지속적 유형에
ID 클래스를 사용하는 Java 코드를
생성합니다.
wsappid 도구 사용 방법에 대한 예제는
wsappid 명령 주제를 참조하십시오.
예
다음은
persistence.xml 파일의 예입니다.
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd” ">
<persistence-unit name="TheWildZooPU" transaction-type="JTA">
<jta-data-source>jdbc/DataSourceJNDI</jta-data-source>
<!-- additional Mapping file, in addition to orm.xml>
<mapping-file>META-INF/JPAorm.xml</mapping-file>
<class>com.company.bean.jpa.PersistebleObjectImpl</class>
<class>com.company.bean.jpa.Animal</class>
<class>com.company.bean.jpa.Dog</class>
<class>com.company.bean.jpa.Cat</class>
<properties>
<property name=”eclipselink.ddl-generation”
value=”create-tables”/>
</properties>
</persistence-unit>
</persistence>