JEUS JPA 안내서 JEUS v6.0 Fix#8 Copyright 2011 TmaxSoft Co., Ltd. All Rights Reserved.
Copyright Notice Copyright 2011 TmaxSoft Co., Ltd. All Rights Reserved. 대한민국경기도성남시분당구서현동 272-6 우 ) 463-824 Restricted Rights Legend All TmaxSoft Software (JEUS ) and documents are protected by copyright laws and the Protection Act of Com puter Programs, and international convention. TmaxSoft software and documents are made available under the terms of the TmaxSoft License Agreement and may only be used or copied in accordance with the terms of this agreement. No part of this document may be transmitted, copied, deployed, or reproduced in any form or by any means, electronic, mechanical, or optical, without the prior written consent of TmaxSoft Co., Ltd. 이소프트웨어 (JEUS ) 사용설명서의내용과프로그램은저작권법, 컴퓨터프로그램보호법및국제조약에의해서보호받고있습니다. 사용설명서의내용과여기에설명된프로그램은 TmaxSoft Co., Ltd. 와의사용권계약하에서만사용이가능하며, 사용권계약을준수하는경우에만사용또는복제할수있습니다. 이사용설명서의전부또는일부분을 TmaxSoft의사전서면동의없이전자, 기계, 녹음등의수단을사용하여전송, 복제, 배포, 2차적저작물작성등의행위를하여서는안됩니다. Trademarks JEUS is registered trademark of TmaxSoft Co., Ltd. Other products, titles or services may be registered trademarks of their respective companies. JEUS 는 TmaxSoft Co., Ltd. 의등록상표입니다. 기타모든제품들과회사이름은각각해당소유주의상표로서참조용으로만사용됩니다. Open Source Software Notice This product includes open source software developed and/or licensed by "OpenSSL", "RSA Data Security, Inc.", "Apache Foundation", and "Jean-loup Gailly and Mark Adler". Information about the aforementioned and the related open source software can be found in the "${INSTALL_PATH}/license/oss_licenses" directory. 본제품은 OpenSSL, RSA Data Security, Inc., Apache Foundation 및 Jean-loup Gailly와 Mark Adler 에의해개발또는라이선스된오픈소스소프트웨어를포함합니다. 관련상세정보는제품의디렉터리 ${IN STALL_PATH}/license/oss_licenses 에기재된사항을참고해주십시오. 안내서정보안내서제목 : JEUS JPA 안내서발행일 : 2011-11-04 소프트웨어버전 : JEUS v6.0 Fix #8 안내서버전 : v2.1.3
내용목차 안내서에대하여... ix 제1장 소개... 1 제2장 프로바이더설정... 3 2.1. 데이터베이스설정... 3 2.1.1. 사용환경별설정... 3 2.1.2. 데이터베이스타입설정... 5 2.1.3. 스키마자동생성설정... 6 2.2. Caching... 7 2.3. Query 힌트... 9 2.4. Logging 설정... 10 제3장 프로바이더변경... 11 3.1. Persistence 프로바이더변경... 11 3.2. 사용가능한 Persistence 프로바이더... 12 용어해설... 13 색인... 15 JEUS iii
표목차 [ 표 2.1] Java SE 모드데이터베이스프로퍼티... 4 [ 표 2.2] toplink.target-데이터베이스프로퍼티... 5 [ 표 2.3] Java Type to SQL Type Mappings... 6 JEUS v
예목차 [ 예 2.1] Java EE 모드에서데이터베이스설정예... 3 [ 예 2.2] Java SE 모드에서데이터베이스설정예... 4 [ 예 2.3] 데이터베이스타입설정예... 5 [ 예 2.4] Query 힌트사용예제... 9 [ 예 3.1] Persistence 프로바이더변경예... 11 JEUS vii
안내서에대하여 안내서의대상 본안내서는 JEUS 에서 Java Persistence API 를이용하여개발하고자하는개발자를대상으로하고있다. 안내서의전제조건 본안내서를원활하게이해하기위해서는다음과같은사항을미리알고있어야한다. JEUS 소개 JEUS 설치및시작하기 안내서의제한조건 본안내서에서는 Java EE 와 Java 스펙에대한것은설명하지않고, JEUS 관련내용만설명한다. 안내서구성 본안내서는총 3개의장으로구성되어있다. 제1장소개 JPA와 JEUS에대해설명한다. 제2장프로바이더설정 JEUS의기본프로바이더의설정에대해설명한다. 제3장프로바이더변경 JEUS의기본프로바이더를변경하는방법에대해설명한다. 안내서에대하여 ix
안내서규약 표기 <<AaBbCc123>> <Ctrl>+C [Button] 진하게 " "( 따옴표 ) ' 입력항목 ' 하이퍼링크 > +---- ---- 참고주의 [ 그림 1.1] [ 표 1.1] AaBbCc123 의미프로그램소스코드의파일명 Ctrl과 C를동시에누름 GUI의버튼또는메뉴이름강조다른관련안내서또는안내서내의다른장및절언급화면 UI에서입력항목에대한설명메일계정, 웹사이트메뉴의진행순서하위디렉터리또는파일있음하위디렉터리또는파일없음참고또는주의사항주의할사항그림이름표이름 Java 코드, XML 문서 [ command argument ] < xyz > 옵션파라미터 < 와 > 사이의내용이실제값으로변경됨선택사항. 예 ) A B: A나 B 중하나파라미터등이반복되어서나옴 x JEUS JPA 안내서
시스템사용환경 본안내서는모든예제와환경구성을 Microsoft Windows 의스타일을따랐다. UNIX와같은다른환경에서작업하는사람은몇가지사항만고려하면별무리없이사용할수있다. 대표적인것이디렉터리구분자인데, Windows 스타일인 \ 를 UNIX 스타일인 / 로바꿔서사용하면무리가없다. 이외에환경변수도 UNIX 스타일로변경해서사용하면된다. 그러나 Java 표준을고려해서문서를작성했기때문에, 대부분의내용은동일하게적용된다. 관련안내서 안내서 JEUS 소개 JEUS 설치및시작하기 JEUS Server 안내서 설명 JEUS 6 서버에대한전반적인소개와 JEUS의아키텍처를포함하여각구성요소들에대해설명한안내서이다. JEUS에대한소개와설치및시작방법에대해기술한안내서이다. JEUS 시스템과서버의개요와시스템관리를위한안내서이다. 참고자료 Java EE 5 Tutorial, Part 4: Java Persistence http://www.oracle.com/technetwork/java/javaee/documentation/tutorials-137605.html Pro EJB 3 Java Persistence API, Mike Keith and Merrick Schincariol, Apress Enterprise JavaBeans 3.0 5th ed., Bill Burke and Richard Monson-Haefel, O Reilly Mastering Enterprise JavaBeans 3.0 3rd ed., Rima Patel Sriganesh, Gerald Brose, Micah Silverman, Wiley Sun Microsystems, Inc. 의 EJB 3.0 Specification - Java Persistence API 1.0 안내서에대하여 xi
연락처 Korea TmaxSoft Co., Ltd 272-6, Seohyeon-dong, Bundang-gu, Seongnam-si, Gyeonggi-do, 463-721 South Korea Tel: +82-31-8018-1000 Fax: +82-31-8018-1115 Email: info@tmax.co.kr Web (Korean): http://www.tmax.co.kr 기술지원 : http://technet.tmaxsoft.com USA TmaxSoft, Inc. 560 Sylvan Avenue Englewood Cliffs, NJ 07632 U.S.A Tel: +1-201-567-8266 Fax: +1-201-567-7339 Email: info@tmaxsoft.com Web (English): http://www.tmaxsoft.com Japan TmaxSoft Japan Co., Ltd. 5F Sanko Bldg, 3-12-16 Mita, Minato-Ku, Tokyo, 108-0073 Japan Tel: +81-3-5765-2550 Fax: +81-3-5765-2567 Email: info@tmaxsoft.co.jp Web (Japanese): http://www.tmaxsoft.co.jp xii JEUS JPA 안내서
China TmaxSoft China Co., Ltd. Beijing Silver Tower, RM 1508, 2# North Rd Dong San Huan, Chaoyang District, Beijing, China, 100027 China Tel: +86-10-6410-6145~8 Fax: +86-10-6410-6144 Email: info.cn@tmaxsoft.com Web (Chinese): http://www.tmaxsoft.com.cn 안내서에대하여 xiii
제 1 장소개 Java Persistence API( 이하 JPA) 는관계형데이터베이스에접근하기위한표준 ORM 기술을제공하며, 기존에 EJB에서제공되던 CMP Entity Bean을대체하는기술이다. JEUS는 JPA 스펙의기능을모두지원한다. JPA는 JSR 220에서정의된 EJB 3.0 스펙의일부로정의가되어있지만, JPA는 EJB 컨테이너에의존하지않으며 EJB, 웹모듈및 Java SE Standalone 클라이언트에서모두사용이가능하다. 또한, JPA 는사용자가원하는 Persistence 프로바이더 (Provider) 구현체를선택해서사용할수있다. JEUS 에서는기본적으로 GlassFish 프로젝트의 TopLink Essentials 구현체를제공한다. 그리고 Fix#7부터는 TopLink 를기반으로오픈소스화한 EclipseLink 구현체를시스템라이브러리로제공하고있다. 그리고필요에따라다른구현체를선택해서사용할수있다. 이에대한자세한사항은 3.1. Persistence 프로바이더변경 을참고한다. 실제 JPA를사용할때는 JPA 스펙에서제공하는기본적인 API나설정과프로바이더의특성을함께고려해야한다. 특히, Caching과같은것은중요한특성으로이를모르고애플리케이션을개발하면원하는결과를얻지못할수도있다. 따라서, JPA를환경에따라적절하게구성해서개발해야한다. 이러한것들은앞으로다양한패턴을통해소개될것이므로 GlassFish 프로젝트나 TopLink JPA 사이트를계속참조하기를권장한다. GlassFish 프로젝트 http://glassfish.dev.java.net TopLink JPA Resources http://www.oracle.com/technology/products/ias/toplink/jpa/resources-index.html 본안내서는 JEUS 의기본프로바이더인 TopLink Essentials 를 JEUS 에서사용하는데필요한설정에대 해서만설명한다. JPA 기술자체나프로그래밍방법에대해서는다루고있지않기때문에이에대해서는 본안내서의참고자료부분을참고한다. 제 1 장소개 1
제 2 장프로바이더설정 본장에서는 JEUS 의기본프로바이더인 TopLink Essentials 에대한설정을설명한다. 이러한설정은 JPA 스펙에서정의되지않는기능을구현하기위해필요한부분으로, 각애플리케이션에맞게정확하게설정 되어야한다. 2.1. 데이터베이스설정 사용환경, 데이터베이스타입에따른데이터베이스설정과자동으로데이터베이스스키마를생성하는설 정에대해설명한다. 2.1.1. 사용환경별설정 사용환경에따라데이터베이스의설정방법이달라진다. Java EE 환경 여기에서 Java EE 환경 ( 혹은모드 ) 이라고하는것은 JPA가 JEUS의컨테이너에서사용될때를의미한다. 즉, 웹모듈이나, EJB 모듈, 애플리케이션클라이언트모듈에서 JPA를사용할때이를 Java EE 모드에서사용한다고말한다. 사용할데이터베이스대상에대한설정은 persistence.xml Descriptor에설정한다. 이때, 사용할트랜잭션의종류에따라서 <jta-data-source> 와 <non-jta-data-source> 값을설정한다. 글로벌트랜잭션을사용하는경우 <transaction-type> 의값을 JTA로지정하고, <jta-data-source> 에해당 Data Source의 JNDI 이름을설정한다. 로컬트랜잭션을사용하는경우 <transaction-type> 의값을 RESOURCE_LOCAL로설정하고 <non-jta-data-source> 에해당 Data Source의 JNDI 이름을설정한다. [ 예 2.1] Java EE 모드에서데이터베이스설정예 <?xml version="1.0" encoding="utf-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="em" transaction-type="jta"> <jta-data-source>jdbc/mydb</jta-data-source> </persistence-unit> </persistence> 제 2 장프로바이더설정 3
참고 1. Java EE 환경에서는 <transaction-type> 값을지정하지않을경우, 기본적으로 JTA 트랜잭션으로설정한다. 2. JEUS에서 DB 데이터소스를설정하는방법은 JEUS Server 안내서 의 8.3. JDBC 데이터소스설정 을참고한다. Java SE 환경 Java SE 환경 ( 혹은모드 ) 은 Java EE 컨테이너에서사용하지않는경우이다. 예를들어 Java stand-alone 클라이언트와같은환경에서사용하는경우를말한다. 이때는로컬트랜잭션만사용할수있으며, 사용되는데이터베이스의 JDBC 설정을프로퍼티로설정해야한다. 다음의예제와같이 <transaction-type> 의값을 RESOURCE_LOCAL로설정한다. [ 예 2.2] Java SE 모드에서데이터베이스설정예 <?xml version="1.0" encoding="utf-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="em" transaction-type="resource_local"> <properties> <property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.clientdriver"/> <property name="toplink.jdbc.url" value="jdbc:derby://localhost:1527/testdb"/> <property name="toplink.jdbc.user" value="app"/> <property name="toplink.jdbc.password" value="app"/> </properties> </persistence-unit> </persistence> 다음은프로퍼티값에대한설명이다. [ 표 2.1] Java SE 모드데이터베이스프로퍼티 프로퍼티값 toplink.jdbc.driver toplink.jdbc.url toplink.jdbc.user toplink.jdbc.password 설명대상데이터베이스의 JDBC 드라이버클래스이름이다. 대상데이터베이스의 JDBC URL이다. 대상데이터베이스의사용자명이다. 대상데이터베이스의패스워드이다. 4 JEUS JPA 안내서
2.1.2. 데이터베이스타입설정 기본적으로해당데이터베이스타입을 JDBC 커넥션정보를통해자동으로감지한다. 하지만, 자동감지기능이제대로동작하지않거나, 별도의다른데이터베이스를사용하는경우라면 toplink.target-database 프로퍼티를설정할수있다. 참고 데이터베이스타입은 JDBC 드라이버의 DatabaseMetaData.getDatabaseProductName() 을이용하 여, 데이터베이스벤더이름을 regular expression 으로비교하는방식을사용한다. [ 예 2.3] 데이터베이스타입설정예 <?xml version="1.0" encoding="utf-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="em"> <jta-data-source>jdbc/mydb</jta-data-source> <properties> <property name="toplink.target-database" value="db2"/> </properties> </persistence-unit> </persistence> 다음은지원되는데이터베이스타입값에대한설명이다. [ 표 2.2] toplink.target- 데이터베이스프로퍼티 값 Auto Attunity Cloudscape DB2 DB2Mainframe DBase Derby HSQL Informix JavaDB MySQL4 Oracle PointBase 설명 (Default) 자동감지 Attunity DBMS Cloudscape DBMS IBM DB2 DBMS IBM DB2 Mainframe DBMS DBase DBMS Apache Derby DBMS HSQL DBMS Informix DBMS JavaDB DBMS MySQL DBMS Oracle DBMS PointBase DBMS 제 2 장프로바이더설정 5
값 PostreSQL SQLAnyWhere SQLServer Sybase TimesTen Customized class name 설명 PostreSQL DBMS SQLAnywhere DBMS Microsoft SQLServer DBMS Sybase DBMS Oracle Timesten DBMS 기본적으로지원되지않는 DBMS를추가할때사용한다. 기본적으로지원되지않는 DBMS 의경우별도로 DBMS 지원기능을구현하여사용할수있다. 이때는해 당클래스이름을지정하면된다. 이에대한자세한정보는본안내서의참고자료부분을참고한다. 2.1.3. 스키마자동생성설정 자동으로 DB 스키마를생성하는기능을이용하는경우설정한다. 이를이용하면애플리케이션을디플로이할때 DB 테이블및제약사항 (Constraints) 을자동으로생성한다. 관련된프로퍼티설정은다음과같다. toplink.ddl-generation 스키마 DDL(Data Descriptor Language) 을어떤식으로생성할지설정한다. 옵션 none create-tables drop-and-create-tables 설명아무것도하지않는다. ( 기본값 ) 존재하지않는테이블을생성하며, 기존테이블은그대로남겨둔다. 기존에존재하는테이블을삭제하고다시생성한다. DDL 을생성할때기본적으로다음과같이 Java 타입을해당데이터베이스 SQL 타입에맞게생성한다. [ 표 2.3] Java Type to SQL Type Mappings Java Type Derby, Oracle DB2 Sybase SQLServer MySQL JavaDB, Cloudscape boolean, SMALLINT NUMBER(1) SMALLINT BIT BIT TINYINT(1) Boolean int, Integer INTEGER NUMBER(10) INTEGER INTEGER INTEGER INTEGER long, Long BIGINT NUMBER(19) INTEGER NUMER NUMER BIGINT IC(19) IC(19) float, Float FLOAT NUMER FLOAT FLOAT(16) FLOAT(16) FLOAT IC(19,4) 6 JEUS JPA 안내서
Java Type Derby, Oracle DB2 Sybase SQLServer MySQL JavaDB, Cloudscape double, Dou FLOAT NUMER FLOAT FLOAT(32) FLOAT(32) DOUBLE ble IC(19,4) short, Short SMALLINT NUMBER(5) SMALLINT SMALLINT SMALLINT SMALLINT byte, Byte SMALLINT NUMBER(3) SMALLINT SMALLINT SMALLINT SMALLINT ja DECIMAL NUMBER(38) DECIMAL(15) NUMER NUMER DECIMAL(38) va.lang.num IC(38) IC(28) ber java.math.big BIGINT NUMBER(38) BIGINT NUMER NUMER BIGINT Integer IC(38) IC(28) ja DECIMAL NUMBER(38) DECIMAL(15) NUMER NUMER DECIMAL(38) va.math.bigdec IC(38) IC(28) imal ja VAR VAR VAR VAR VAR VAR va.lang.string CHAR(255) CHAR(255) CHAR(255) CHAR(255) CHAR(255) CHAR(255) char, Charac CHAR(1) CHAR(1) CHAR(1) CHAR(1) CHAR(1) CHAR(1) ter byte[], Byte[], BLOB(64000) LONG RAW BLOB(64000) TEXT TEXT TEXT(64000) java.sql.blob char[], Char CLOB(64000) LONG CLOB(64000) TEXT TEXT TEXT(64000) acter[], ja va.sql.clob java.sql.date DATE DATE DATE DATETIME DATETIME DATE java.sql.time TIME DATE TIME DATETIME DATETIME TIME ja TIMESTAMP DATE TIMESTAMP DATETIME DATETIME DATETIME va.sql.times tamp 2.2. Caching JPA에서는기본적으로 Persistence Context라고하는 1st-level Caching을지원하고있다. 하지만, 일반적으로 Persistence Context는트랜잭션별로새로생성되기때문에 (Extended Persistence Context는이에해당하지않음 ) 트랜잭션간에 Caching을지원하지않는다. 이를보완하기위해 TopLink Essentials에서는 2nd-level Caching 기능을제공한다. 2nd-level Caching은 EntityManagerFactory 레벨에서지원되기때문에, 동일한 EntityManagerFactory에서생성된모든 EntityManager의경우이공유 Cache를사용하게된다. 즉, Persistence Context에없는 제 2 장프로바이더설정 7
Entity를가져올때 2nd-level Caching을참고하여존재하는경우에이를가져온다. 따라서반복적인 Read 작업의경우성능향상을가져오게된다. Caching에관련된옵션은다음을참고한다. toplink.cache.type.default Caching 방식을설정한다. 옵션 Full HardWeak SoftWeak Weak NONE 설명객체를 Hard reference로 Caching한다. 따라서 Entity가삭제되기전까지항상 Cache에존재하게된다. Weak와유사하며, 자주사용되는객체는 Hard reference로 Caching한다. Weak와유사하며, 자주사용되는객체는 Soft reference로 Caching한다. 자주사용되는객체는메모리가부족할때사라진다. ( 기본값 ) 객체를 Weak reference로 Caching한다. Garbage Collection(GC) 이되면사라진다. 객체를 Cache에저장하지않는다. 사용을권장하지않으며 Caching 기능을이용하고싶지않다면, toplink.cache.shared.xxx 프로퍼티를설정하기를권장한다. toplink.cache.size.default Cache에저장될최대객체수를설정한다. ( 기본값 : 1000) toplink.cache.shared.default 공유 Cache를사용할지여부를설정한다. 옵션 true 설명 객체가공유 Cache 에저장된다. 모든 EntityManager 는 Caching 을사용하게된다. ( 기본값 ) false 객체가공유 Cache 에저장되지않는다. 따라서, EntityManager 별로 Cache 를공유하지 않는다. 이를사용하면 2nd-level Caching 을하지않는효과가있다. toplink.cache.type.<entity> Entity 별로 Caching을하는방식을지정한다. <ENTITY> 는 Entity 이름혹은 fully-qualified 클래스이름이될수있다. 해당 Entity와관계를가지는모든 Entity는같은설정을가져야한다. toplink.cache.type.default [8] 의값설명과동일하다. toplink.cache.size.<entity> Entity 별로 Cache 사이즈를지정한다. <ENTITY> 는 Entity 이름혹은 fully-qualified 클래스이름이될수있다. toplink.cache.size.default [8] 의값설명과동일하다. toplink.cache.shared.<entity> 8 JEUS JPA 안내서
Entity 별로공유 Cache 를사용할지를지정한다. <ENTITY> 는 Entity 이름혹은 fully-qualified 클래스이 름이될수있다. 해당 Entity 와관계를가지는모든 Entity 는동일한설정을가져야한다. toplink.cache.shared.default [8] 의값설명과동일하다. 주의 2nd-level Caching이사용될때주의할것은외부애플리케이션에의해혹은직접데이터베이스의데이터를변경하는경우해당내용이 Caching에반영되지않는다는점이다. 이런경우, 데이터베이스의최신값이아닌 Caching된값이리턴되기때문에애플리케이션에이를고려해야한다. Caching 옵션을애플리케이션환경을고려하여적절히설정하거나, EntityManager.refresh(), toplink.refresh Query 힌트혹은 locking(pessimistic/optimistic) 등을사용하여이런문제를피할수있다. 2.3. Query 힌트 Query 힌트는 Query 객체를사용할때프로바이더에서제공하는기능을사용할수있도록한다. Query 힌트는다음예제와같이 Query를실행할때설정할수도있고, Named Query를사용하는경우 @QueryHint Annotation을사용하여지정할수도있다. [ 예 2.4] Query 힌트사용예제 List employees = em.createquery("select e FROM Employee e WHERE e.name = :name").setparameter("name", name).sethint("toplink.refresh", true).getresultlist(); 제공하는 Query 힌트는다음과같다. toplink.pessimistic-lock SELECT 할때 Pessimistic Locking 을사용할지여부를설정한다. 옵션 NoLock Lock NoLockWait 설명사용하지않는다. ( 기본값 ) SELECT... FOR UPDATE 문을이용해 Locking을한다. SELECT... FOR UPDATE NO WAIT 문을이용해 Locking을한다. toplink.refresh 데이터베이스에서최신값을가져와 Caching 을업데이트할지여부를설정한다. 옵션 true 설명 최신값을가져오고 Caching 을업데이트한다. 제 2 장프로바이더설정 9
옵션 false 설명 Cache 에있는값을사용한다. ( 기본값 ) 2.4. Logging 설정 좀더자세한로그를보고싶다면 Logging 레벨을설정할수있다. 기본적으로 Logging 레벨은 JEUS 서버에전체적으로적용되는레벨 ( 기본적으로 INFO) 을따르게되지만, 이를 Persistence Unit별로변경할경우 toplink.logging.level 프로퍼티로설정할수있다. Logger의경우 Java EE 모드에서는기본적으로 JEUS에서제공되는 Logger(JEUS Logger) 를사용하게되며, Java SE 모드에서는 standard output으로출력되는 DefaultLogger를사용하게된다. 이를변경하려면 toplink.log ging.logger 프로퍼티로설정할수있다. 다음은설정에대한자세한설명이다. toplink.logging.level Logging 레벨을지정한다. OFF: Logging을하지않는다. SEVERE WARNING INFO( 기본값 ) CONFIG FINE: SQL 관련정보를보고싶다면, 이레벨로설정한다. FINER FINEST toplink.logging.logger 사용할 Logger를지정한다. 옵션 JEUSLogger DefaultLogger JavaLogger Custom class name 설명 JEUS에서제공되는 Logger이다. (Java EE 모드인경우기본값 ) 기본 standard output Logger이다. (Java SE 모드인경우기본값 ) java.util.logging Logger이다. 별도의 Logger를구현한경우지정한다. 참고 TopLink Essentials 에대한자세한설정은 TopLink JPA Extensions Reference 를참고한다. http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-extensions.html 10 JEUS JPA 안내서
제 3 장프로바이더변경 본장에서는 JEUS 의기본프로바이더를변경하는방법에대해서설명한다. 3.1. Persistence 프로바이더변경 JEUS에서기본적으로제공되는프로바이더 (TopLink Essentials) 가아닌다른프로바이더를사용하려면 JPA 스펙에따라서이를지원한다. 먼저필요한라이브러리들을 JEUS_HOME\lib\application에복사하거나또는각애플리케이션별로패키징한다. 그리고해당프로바이더클래스이름을 persistence.xml의 <provider> 값에설정하면, Persistence Unit 별로설정한프로바이더를사용하게된다. 프로바이더클래스이름과관련프로퍼티값들도각프로바이더별로다르므로해당문서를참고하여설정해야한다. 예를들어, Hibernate를사용하는경우다음과같이설정한다. [ 예 3.1] Persistence 프로바이더변경예 <?xml version="1.0" encoding="utf-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="em"> <provider>org.hibernate.ejb.hibernatepersistence</provider> <jta-data-source>jdbc/mydb</jta-data-source> <properties> <!-- add Hibernate properties here --> </properties> </persistence-unit> </persistence> JEUS 6 Fix#7부터시스템라이브러리 (JEUS_HOME/lib/system/eclipselink.jar) 로 EclipseLink를제공하고있다. 만약 EclipseLink를사용하려면 <provider> 값으로 org.eclipse.persistence.jpa.persistenceprovider 를설정한다. 위와같이 Persistence Unit별로프로바이더를변경할수도있지만, JEUS의디폴트프로바이더를변경할수도있다. JEUS를구동시킬때시스템프로퍼티 jeus.persistence.defaultprovider를해당프로바이더클래스이름으로설정하면프로바이더가지정되지않는모든 Persistence Unit의경우해당디폴트프로바이더를사용하게된다. 참고 JEUS 시스템프로퍼티설정은 "JEUS Server 안내서 " 나 "JEUS Reference Book" 을참고한다. 제 3 장프로바이더변경 11
3.2. 사용가능한 Persistence 프로바이더 다른 Persistence 프로바이더에대해서는다음의각사이트를참고한다. EclipseLink http://www.eclipse.org/eclipselink Hibernate EntityManager http://www.hibernate.org OpenJPA http://openjpa.apache.org BEA Kodo http://www.bea.com 12 JEUS JPA 안내서
용어해설 글로벌트랜잭션여러 XA 자원 ( 데이타베이스 ) 들을포괄하는트랜잭션을말한다. 분산트랜잭션이라고도고하며, 보통 2 Phase Commit을통해트랜잭션을단일성을보장한다. 로컬트랜잭션글로벌트랜잭션과달리하나의자원에만범위를가지는트랜잭션을말한다. EJB Enterprise Java Beans이다. EntityManager javax.persistence.entitymanager 객체이다. EntityManagerFactory javax.persistence.entitymanagerfactory 객체이다. JPA Java Persistence API 약자이다. named query Java Persistence API에서 XML Descriptor나 Annotation으로지정된 Query이다. ORM Object Relational Mapping 약어이다. persistence 프로바이더 Java Persistence API를지원하는구현체이다. persistence context Java Persistence API에서현재관리되고있는 Entity Instance의집합이다. persistence unit Java Persistence API에서관리되는논리적인단위로, Entity 클래스와매핑정보를포괄한다. 용어해설 13
색인 Symbols 2nd-level Caching, 7 C Caching, 7 L Logger, 10 P Persistence Provider, 1, 11 Persistence 프로바이더, 3 T toplink.cache.shared.<entity>, 8 toplink.cache.shared.default, 8 toplink.cache.size.<entity>, 8 toplink.cache.size.default, 8 toplink.cache.type.<entity>, 8 toplink.cache.type.default, 8 toplink.ddl-generation, 6 toplink.jdbc.driver, 4 toplink.jdbc.password, 4 toplink.jdbc.url, 4 toplink.jdbc.user, 4 toplink.logging.level, 10 toplink.logging.logger, 10 toplink.pessimistic-lock, 9 toplink.refresh, 9 색인 15