Changes between Initial Version and Version 1 of java/DataNucleus


Ignore:
Timestamp:
2010/10/12 23:26:30 (10 years ago)
Author:
yuna
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • java/DataNucleus

    v1 v1  
     1= DataNucleus = 
     2O/Rマッパーの1つであるDataNucleusを利用してJPAを利用する方法を紹介します。 
     3基本的には、他のJPAの実装と同じですが、DataNucleusでは、エンハンサによるエンハンス処理をエンティティクラスにかける必要があるので、注意してください。 
     4 
     5ここでは、下記のようなディレクトリ構造にファイルがあるものとします。 
     6{{{ 
     7src/ 
     8 +META-INF/ 
     9   +persistence.xml 
     10 +org/ 
     11   +ultimania/ 
     12      +entity/ 
     13        +Test.java 
     14 +TestRunner.java 
     15}}} 
     16 
     17以下、これらのファイルについて説明します。 
     18== persistence.xml == 
     19DataNucleusに関する設定は、他のJPA実装と同じくpersistence.xmlにて行います。 
     20{{{ 
     21<?xml version="1.0" encoding="UTF-8" ?> 
     22<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" 
     23    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     24    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
     25        http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" > 
     26 
     27    <persistence-unit name="dn-unit" transaction-type="RESOURCE_LOCAL"> 
     28        <provider>org.datanucleus.jpa.PersistenceProviderImpl</provider> 
     29        <class>org.ultimania.entity.Test</class> 
     30        <properties> 
     31           <property name="javax.persistence.jdbc.driver"  value="org.hsqldb.jdbcDriver"/>   
     32           <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:file:./test"/>   
     33           <property name="javax.persistence.jdbc.user" value="sa"/>   
     34           <property name="javax.persistence.jdbc.password" value=""/>   
     35           <property name="javax.jdo.option.Mapping" value="hsql"/>   
     36           <property name="datanucleus.metadata.validate" value="false"/>   
     37           <property name="datanucleus.autoCreateSchema" value="true"/>   
     38           <!-- don't create DELETEME table --> 
     39           <property name="datanucleus.fixeddatastore" value="true"/>   
     40        </properties> 
     41    </persistence-unit> 
     42 
     43</persistence> 
     44}}} 
     45DataNucleusを利用する場合、providerに 
     46{{{ 
     47org.datanucleus.jpa.PersistenceProviderImpl 
     48}}} 
     49を指定します。また、javax.jdo.option.MappingプロパティでDBのタイプを指定します。また、 
     50{{{ 
     51   <property name="datanucleus.fixeddatastore" value="true"/> 
     52}}} 
     53この一行を設定しないと、DataNucleusはDELETEMEテーブルを作成し、処理終了時に自動的にデータをロールバックします。処理結果をプログラム終了後もキープしたい場合は、必ずこの1行を入れてください。 
     54 
     55== Test.java == 
     56エンティティは、@Entityアノテーションを利用します。他のJPAと同じです。 
     57{{{ 
     58package org.ultimania.entity; 
     59 
     60import javax.persistence.Basic; 
     61import javax.persistence.Entity; 
     62import javax.persistence.GeneratedValue; 
     63import javax.persistence.Id; 
     64 
     65@Entity 
     66public class Test { 
     67        @Id 
     68        @GeneratedValue 
     69        int id; 
     70        String name; 
     71        public int getId() { 
     72                return id; 
     73        } 
     74        public void setId(int id) { 
     75                this.id = id; 
     76        } 
     77        public String getName() { 
     78                return name; 
     79        } 
     80        public void setName(String name) { 
     81                this.name = name; 
     82        } 
     83} 
     84}}} 
     85 
     86== Enhancerの実行 == 
     87DataNucleusは、エンティティクラスをエンハンサでエンハンスして利用する必要があります。エンハンサは、下記のようにして実行します。各jarの細かいバージョンはお使いのDataNucleusのバージョンに合わせてください。 
     88{{{ 
     89> set DN=<DataNucleusへのインストールパス> 
     90> java -classpath \ 
     91%DN%\lib\datanucleus-jpa-2.1.1.jar;%DN%\deps\asm-3.1.jar;%DN%\deps\geronimo-jpa_2.0_spec-1.0.jar;%DN%\deps\jdo-api-3.0.jar;%DN%\lib\datanucleus-core-2.2.0-m1.jar;%DN%\lib\datanucleus-enhancer-2.1.0-release.jar;bin;. \ 
     92org.datanucleus.enhancer.DataNucleusEnhancer -api JPA -pu dn-unit 
     93}}} 
     94-apiオプションでJPAを、-puオプションでpersistence-unitの名前(name属性で設定した値)を指定します。DataNucleusEnhancerは、META-INF/persistence.xmlで指定されたエンティティクラスを読み込んで、DataNucleus用の実行コードを埋め込みます。 
     95 
     96Eclipseを利用している場合、binディレクトリで上記のコマンドを実行してください。エンティティファイルを変更する都度、エンハンサは実行する必要があります。バッチファイルやシェルスクリプトで簡単に実行できるようにするとよいでしょう。 
     97 
     98== Entityの利用 == 
     99次のようにしてEntityを利用します。DataNucleusでは、トランザクションを明示的に利用する必要があるようです。 
     100{{{ 
     101        EntityManagerFactory emf = Persistence.createEntityManagerFactory("dn-unit"); 
     102        EntityManager em = emf.createEntityManager(); 
     103        em.getTransaction().begin(); 
     104        Test t = new Test(); 
     105        t.setId(1); 
     106        t.setName("okamoto"); 
     107        em.persist(t); 
     108        em.getTransaction().commit(); 
     109}}}