JEUS JPA 안내서 JEUS v7.0 Fix#1 Copyright 2013 TmaxSoft Co., Ltd. All Rights Reserved.
Copyright Notice Copyright 2013 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 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 Some modules or files of this product are subject to the terms of the following licenses. : APACHE2.0, CDDL1.0, EDL1.0, OPEN SYMPHONY SOFTWARE1.1, TRILEAD-SSH2, Bouncy Castle, BSD, MIT, SIL OPEN FONT1.1 Detailed Information related to the license can be found in the following directory : ${INSTALL_PATH}/lib/licenses 본제품의일부파일또는모듈은다음의라이선스를준수합니다. : APACHE2.0, CDDL1.0, EDL1.0, OPEN SYM PHONY SOFTWARE1.1, TRILEAD-SSH2, Bouncy Castle, BSD, MIT, SIL OPEN FONT1.1 관련상세한정보는제품의다음의디렉터리에기재된사항을참고해주십시오. : ${INSTALL_PATH}/lib/licenses 안내서정보안내서제목 : JEUS JPA 안내서발행일 : 2013-04-30 소프트웨어버전 : JEUS v7.0 Fix#1 안내서버전 : v2.1.2
내용목차 안내서에대하여... ix 제1장 소개... 1 제2장 프로바이더설정... 3 2.1. 데이터베이스설정... 3 2.1.1. 사용환경별설정... 3 2.1.2. 데이터베이스타입설정... 5 2.1.3. 스키마자동생성설정... 6 2.2. Caching... 8 2.3. Query 힌트... 10 2.4. Logging 설정... 11 제3장 프로바이더변경... 13 3.1. Persistence 프로바이더변경... 13 3.2. 사용가능한 Persistence 프로바이더... 14 색인... 15 JEUS iii
표목차 [ 표 2.1] Java SE 모드데이터베이스프로퍼티... 4 [ 표 2.2] eclipselink.target-database 프로퍼티... 5 [ 표 2.3] Java Type to SQL Type Mappings... 7 JEUS v
예목차 [ 예 2.1] Java EE 모드에서데이터베이스설정예... 4 [ 예 2.2] Java SE 모드에서데이터베이스설정예... 4 [ 예 2.3] 데이터베이스타입설정예... 5 [ 예 2.4] 스키마자동생성설정예... 6 [ 예 2.5] Caching 방식설정예... 8 [ 예 2.6] Query 힌트사용예제... 10 [ 예 2.7] Logging 설정예... 11 [ 예 3.1] Persistence 프로바이더변경예... 13 JEUS vii
안내서에대하여 안내서의대상 본안내서는 JEUS 에서 Java Persistence API(JPA) 를사용하여개발하고자하는개발자를대상으로하고 있다. 안내서의전제조건 본안내서를원활하게이해하기위해서는다음과같은사항을미리알고있어야한다. JEUS 소개 JEUS 설치및시작하기 안내서의제한조건 본안내서에서는 Java EE 표준에대한것은설명하지않고, JEUS 관련내용만설명한다. 따라서 Java EE 표준에대한자세한내용은해당자료를참고한다. 안내서구성 본안내서는총 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 안내서
시스템사용환경 본안내서의모든예제와환경구성은 UNIX의스타일에준하여작성되어 Microsoft Windows ( 이하 Windows) 와같이다른환경에서작업하는경우몇가지사항을고려해야한다. 예를들어경로구분자의경우 UNIX 스타일인 / 를 Windows 스타일인 \ 로바꿔서사용한다. 또한환경변수도 Windows 스타일로변경해서사용하면된다. 문서의내용은 Java 표준을고려해서작성했기때문에대부분의내용은동일하게적용된다. 관련안내서 안내서 JEUS 소개 JEUS 설치및시작하기 JEUS Server 안내서 설명 JEUS 서버에대한전반적인소개와 JEUS의아키텍처를포함하여각구성요소들에대해설명한안내서이다. JEUS에대한소개와설치및시작방법에대해기술한안내서이다. JEUS 시스템과서버의개요와시스템관리를위한안내서이다. 참고자료 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 Pro JPA 2 Mastering the Java Persistence API, Mike Keith and Merrick Schincariol, Apress 안내서에대하여 xi
연락처 Korea TmaxSoft Co., Ltd 272-6, Seohyeon-dong, Bundang-gu, Seongnam-si, Gyeonggi-do, 463-824 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 317에서 JPA 2.0 스펙으로정의되어있으며, EJB 컨테이너에의존하지않고 EJB, 웹모듈및 Java SE Standalone 클라이언트에서모두사용이가능하다. 또한 JPA는사용자가원하는 Persistence 프로바이더 (Provider) 구현체를선택해서사용할수있다. JEUS 에서는기본적으로 Eclipse Persistence Services Project의 EclipseLink 구현체를제공한다. 필요에따라다른구현체를선택해서사용할수있다. 이에대한자세한사항은 3.1. Persistence 프로바이더변경 을참고한다. 실제 JPA를사용할때는 JPA 스펙에서제공하는기본적인 API나설정과프로바이더의특성을함께고려해야한다. 특히, Caching과같은것은중요한특성으로이를모르고애플리케이션을개발하면원하는결과를얻지못할수도있다. 따라서 JPA를환경에따라적절하게구성해서개발해야한다. 이러한것들은앞으로다양한패턴을통해소개될것이므로 EclipseLink JPA 사이트를계속참조하기를권장한다. EclipseLink http://www.eclipse.org/eclipselink/ 본안내서는 JEUS 의기본프로바이더인 EclipseLink 를 JEUS 에서사용하는데필요한설정에대해서만 설명한다. JPA 기술자체나프로그래밍방법에대해서는다루고있지않기때문에이에대해서는본안내 서의참고자료부분을참고한다. 제 1 장소개 1
제 2 장프로바이더설정 본장에서는 JEUS 의기본프로바이더인 EclipseLink 에대한설정을설명한다. 이러한설정은 JPA 스펙에 서정의되지않는기능을구현하기위해필요한부분으로, 각애플리케이션에맞게정확하게설정되어야 한다. 2.1. 데이터베이스설정 사용환경, 데이터베이스타입에따른데이터베이스설정과자동으로데이터베이스스키마를생성하는 설정에대해설명한다. 2.1.1. 사용환경별설정 사용환경에따라데이터베이스의설정방법이달라진다. Java EE 환경 Java EE 환경 ( 또는모드 ) 은 JEUS 의 Managed Server( 이하 MS) 위에서웹컨테이너, EJB 컨테이너, 애플 리케이션클라이언트컨테이너를의미한다. 참고좀더정확하게는각컨테이너에서컨트롤하는 Thread를의미한다. 예를들어웹엔진에설정하는 Web Thread Pool의 Thread이다. 만약애플리케이션이직접생성한 Thread Pool의 Thread처럼컨테이너가관리하지않는 Thread 상에서는 Java SE 환경과똑같다. 사용할데이터베이스대상에대한설정은 persistence.xml Descriptor에설정한다. 사용할트랜잭션의종류에따라서 <jta-data-source> 와 <non-jta-data-source> 값을설정한다. 글로벌트랜잭션을사용하는경우 <transaction-type> 의값을 'JTA' 로설정한다. <jta-data-source> 에해당데이터소스의 JNDI 이름을설정한다. 로컬트랜잭션을사용하는경우 <transaction-type> 의값을 'RESOURCE_LOCAL' 로설정한다. <non-jta-data-source> 에해당데이터소스의 JNDI 이름을설정한다. 제 2 장프로바이더설정 3
[ 예 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> 참고 1. Java EE 환경에서는 <transaction-type> 값을지정하지않을경우기본적으로 JTA 트랜잭션으로설정한다. 2. JEUS에서 DB 데이터소스를설정하는방법은 JEUS Server 안내서 의 제6장 DB Connection Pool과 JDBC 를참고한다. Java SE 환경 Java SE 환경 ( 또는모드 ) 은 Java EE 컨테이너에서사용하지않고 Java Standalone 클라이언트와같은환경에서사용하는경우를말한다. 이때는로컬트랜잭션만사용할수있으며, 사용되는데이터베이스의 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="eclipselink.jdbc.driver" value="org.apache.derby.jdbc.clientdriver"/> <property name="eclipselink.jdbc.url" value="jdbc:derby://localhost:1527/testdb"/> <property name="eclipselink.jdbc.user" value="app"/> <property name="eclipselink.jdbc.password" value="app"/> </properties> </persistence-unit> </persistence> 다음은프로퍼티값에대한설명이다. [ 표 2.1] Java SE 모드데이터베이스프로퍼티 프로퍼티값 eclipselink.jdbc.driver eclipselink.jdbc.url 설명 대상데이터베이스의 JDBC 드라이버클래스이름이다. 대상데이터베이스의 JDBC URL 이다. 4 JEUS JPA 안내서
프로퍼티값 eclipselink.jdbc.user eclipselink.jdbc.password 설명 대상데이터베이스의사용자명이다. 대상데이터베이스의패스워드이다. 2.1.2. 데이터베이스타입설정 기본적으로해당데이터베이스타입을 JDBC 커넥션정보를통해자동으로감지한다. 자동감지기능이제대로동작하지않거나, 별도의다른데이터베이스를사용하는경우라면 'eclipselink.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="eclipselink.target-database" value="db2"/> </properties> </persistence-unit> </persistence> 다음은지원되는데이터베이스타입값에대한설명이다. [ 표 2.2] eclipselink.target-database 프로퍼티 값 Auto Attunity Cloudscape DB2 DB2Mainframe DBase Derby HSQL Informix 설명자동감지 ( 기본값 ) Attunity DBMS Cloudscape DBMS IBM DB2 DBMS IBM DB2 Mainframe DBMS DBase DBMS Apache Derby DBMS HSQL DBMS Informix DBMS 제 2 장프로바이더설정 5
값 JavaDB MySQL4 Oracle PointBase PostreSQL SQLAnyWhere SQLServer Sybase TimesTen Customized class name 설명 JavaDB DBMS MySQL DBMS Oracle DBMS PointBase DBMS PostreSQL DBMS SQLAnywhere DBMS Microsoft SQLServer DBMS Sybase DBMS Oracle Timesten DBMS 기본적으로지원되지않는 DBMS를추가할때사용한다. 기본적으로지원되지않는 DBMS 의경우별도로 DBMS 지원기능을구현하여사용할수있다. 이때는해 당클래스이름을지정하면된다. 이에대한자세한내용은본안내서의참고자료를참고한다. 2.1.3. 스키마자동생성설정 자동으로 DB 스키마를생성하는기능을사용하는경우설정한다. 이를사용하면애플리케이션을 deploy 할때 DB 테이블및제약사항 (Constraints) 을자동으로생성한다. [ 예 2.4] 스키마자동생성설정예 <?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="eclipselink.ddl-generation" value="create-tables" />... </properties> </persistence-unit> </persistence> 관련된프로퍼티설정은다음과같다. 항목 eclipselink.ddl-generation 설명 스키마 DDL(Data Descriptor Language) 을어떤식으로생성할지설 정한다. none : 아무것도하지않는다. ( 기본값 ) 6 JEUS JPA 안내서
항목 설명 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) 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 제 2 장프로바이더설정 7
Java Type Derby, Oracle DB2 Sybase SQLServer MySQL JavaDB, Cloudscape 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에없는 Entity를가져올때 2nd-level Caching을참고하여존재하는경우에이를가져온다. 따라서반복적인 Read 작업의경우성능향상을가져오게된다. [ 예 2.5] Caching 방식설정예 <?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="eclipselink.ddl-generation" value="create-tables" /> <property name="eclipselink.cache.type.default" value="none" /> <property name="eclipselink.cache.size.default" value="999" /> <property name="eclipselink.cache.shared.default" value="false" />... </properties> </persistence-unit> </persistence> 다음은 Caching 에관련된옵션에대한설명이다. 8 JEUS JPA 안내서
항목 eclipselink.cache.type.default 설명 Caching 방식을설정한다. Full : 객체를 Hard reference로 Caching한다. 따라서 Entity가삭제되기전까지항상 Cache에존재하게된다. HardWeak : Weak와유사하며, 자주사용되는객체는 Hard reference로 Caching한다. SoftWeak : Weak와유사하며, 자주사용되는객체는 Soft ref erence로 Caching한다. 자주사용되는객체는메모리가부족할때사라진다. ( 기본값 ) Weak : 객체를 Weak reference로 Caching한다. Garbage Col lection(gc) 이되면사라진다. NONE : 객체를 Cache에저장하지않는다. 사용을권장하지않으며 Caching 기능을사용하고싶지않다면, toplink.cache.shared.xxx 프로퍼티를설정하기를권장한다. eclipselink.cache.size.default eclipselink.cache.shared.default Cache 에저장될최대객체수를설정한다. ( 기본값 : 1000) 공유 Cache 를사용할지여부를설정한다. true : 객체가공유 Cache에저장된다. 모든 EntityManager는 Caching을사용하게된다. ( 기본값 ) false : 객체가공유 Cache에저장되지않는다. 따라서, Entity Manager별로 Cache를공유하지않는다. 이를사용하면 2ndlevel Caching을하지않는효과가있다. eclipselink.cache.type.<entity> Entity 별로 Caching 을하는방식을지정한다. <ENTITY> 는 Entity 이름또는 fully-qualified 클래스이름이될수있다. 해당 Entity와관계를가지는모든 Entity는같은설정을가져야한다. eclipselink.cache.type.default의값설명과동일하다. eclipselink.cache.size.<entity> Entity 별로 Cache 사이즈를지정한다. <ENTITY> 는 Entity 이름또는 fully-qualified 클래스이름이될수 있다. eclipselink.cache.size.default 의값설명과동일하다. eclipselink.cache.shared.<entity> Entity 별로공유 Cache 를사용할지를지정한다. <ENTITY> 는 Entity 이름또는 fully-qualified 클래스이름이될수있다. 해당 Entity와관계를가지는모든 Entity는동일한설정을가져야한다. eclipselink.cache.shared.default의값설명과동일하다. 제 2 장프로바이더설정 9
주의 2nd-level Caching이사용될때주의할것은외부애플리케이션에의해또는직접데이터베이스의데이터를변경하는경우해당내용이 Caching에반영되지않는다는점이다. 이런경우데이터베이스의최신값이아닌 Caching된값이리턴되기때문에애플리케이션에이를고려해야한다. Caching 옵션을애플리케이션환경을고려하여적절히설정하거나, EntityManager.refresh(), eclipselink.refresh Query 힌트또는 locking(pessimistic/optimistic) 등을사용하여이런문제를피할수있다. 2.3. Query 힌트 Query 힌트는 Query 객체를사용할때프로바이더에서제공하는기능을사용하도록한다. 다음예제와같이 Query를실행할때설정할수도있고, Named Query를사용하는경우 @QueryHint An notation을사용하여지정할수도있다. [ 예 2.6] Query 힌트사용예제 List employees = em.createquery("select e FROM Employee e WHERE e.name = :name").setparameter("name", name).sethint("eclipselink.refresh", true).getresultlist(); 제공하는 Query 힌트는다음과같다. 항목 eclipselink.pessimistic-lock 설명 SELECT 할때 Pessimistic Locking 을사용할지여부를설정한다. NoLock : 사용하지않는다. ( 기본값 ) Lock : SELECT... FOR UPDATE 문을사용해 Locking을한다. NoLockWait : SELECT... FOR UPDATE NO WAIT 문을사용해 Locking을한다. eclipselink.refresh 데이터베이스에서최신값을가져와 Caching 을업데이트할지여 부를설정한다. true : 최신값을가져오고 Caching 을업데이트한다. false : Cache 에있는값을사용한다. ( 기본값 ) 10 JEUS JPA 안내서
2.4. Logging 설정 좀더자세한로그를보고싶다면 Logging 레벨을설정할수있다. 기본적으로 Logging 레벨은 JEUS 서버에전체적으로적용되는레벨 ( 기본적으로 INFO) 을따르게되지만, 이를 Persistence Unit별로변경할경우 eclipselink.logging.level 프로퍼티로설정할수있다. Logger의경우 Java EE 모드에서는기본적으로 JEUS에서제공되는 Logger(JEUS Logger) 를사용하게되며, Java SE 모드에서는 standard output으로출력되는 DefaultLogger를사용하게된다. 이를변경하려면 eclipselink.logging.logger 프로퍼티로설정할수있다. [ 예 2.7] Logging 설정예 <?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="eclipselink.logging.level" value="fine"/> <property name="eclipselink.logging.logger" value="defaultlogger"/>... </properties> </persistence-unit> </persistence> 다음은설정에대한자세한설명이다. 항목 eclipselink.logging.level 설명 Logging 레벨을지정한다. OFF: Logging을하지않는다. SEVERE WARNING INFO( 기본값 ) CONFIG FINE: SQL 관련정보를조회하려면이레벨로설정한다. FINER FINEST eclipselink.logging.logger 사용할 Logger 를지정한다. JEUSLogger : JEUS에서제공되는 Logger이다. (Java EE 모드인경우기본값 ) DefaultLogger : 기본 standard output Logger이다. (Java SE 모드인경우기본값 ) 제 2 장프로바이더설정 11
항목 설명 JavaLogger : java.util.logging Logger 이다. Custom class name : 별도의 Logger 를구현한경우지정한다. 참고 1. EclipseLink에대한자세한설정은 http://wiki.eclipse.org/eclipselink/userguide/jpa를참고한다. 2. TopLink에서 EclipseLink로전환할경우 http://www.eclipse.org/eclipselink/documentation/2.4/so lutions/migrnativetoplink.htm를참고한다. 12 JEUS JPA 안내서
제 3 장프로바이더변경 본장에서는 JEUS 의기본프로바이더를변경하는방법에대해서설명한다. 3.1. Persistence 프로바이더변경 JEUS에서기본적으로제공되는프로바이더가아닌다른프로바이더를사용하려면 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> 위와같이 Persistence Unit별로프로바이더를변경할수도있지만, JEUS의디폴트프로바이더를변경할수있다. JEUS를구동시킬때시스템프로퍼티 jeus.persistence.defaultprovider를해당프로바이더클래스이름으로설정하면프로바이더가지정되지않는모든 Persistence Unit의경우해당디폴트프로바이더를사용하게된다. 참고 JEUS 시스템프로퍼티설정은 "JEUS Server 안내서 " 나 "JEUS Reference Book" 을참고한다. 제 3 장프로바이더변경 13
3.2. 사용가능한 Persistence 프로바이더 다른 Persistence 프로바이더에대해서는다음의각사이트를참고한다. Hibernate EntityManager http://www.hibernate.org OpenJPA http://openjpa.apache.org BEA Kodo http://docs.oracle.com/cd/e13189_01/kodo/docs40/index.html 14 JEUS JPA 안내서
색인 P Persistence 프로바이더, 1, 13 Q Query 힌트, 10 Symbols 2nd-level Caching, 8 C Caching, 8 E EclipseLink, 1 eclipselink.cache.shared.<entity>, 9 eclipselink.cache.shared.default, 9 eclipselink.cache.size.<entity>, 9 eclipselink.cache.size.default, 9 eclipselink.cache.type.<entity>, 9 eclipselink.cache.type.default, 9 eclipselink.ddl-generation, 6 eclipselink.jdbc.driver, 4 eclipselink.jdbc.password, 5 eclipselink.jdbc.url, 4 eclipselink.jdbc.user, 5 eclipselink.logging.level, 11 eclipselink.logging.logger, 11 eclipselink.pessimistic-lock, 10 eclipselink.refresh, 10 eclipselink.target-database 프로퍼티, 5 J Java EE 환경프로바이더설정, 3 Java SE 모드데이터베이스프로퍼티, 4 Java SE 환경프로바이더설정, 4 Java Type to SQL Type Mappings, 7 JPA, 1 L Logger, 11 색인 15