2008年11月11日火曜日

Open JPAを試す(1)

久しぶりにお勉強ネタです。

まずJPAとは。

EJB3.0には以下の仕様がある。
# EJB Core Contracts and Requirements
# EJB 3.0 Simplified API
# Java Persistence API
三番目がJPA。EJB3.0の一部で、これを使えばPOJOでDBにアクセスできる。以上。

Apache OpenJPA User's Guideを見るともっと詳しく書いていますが、まあいいでしょう。面倒臭いので。Hibernateみたいなもんだろ?という認識で取り組んで見ます

一通り付属のexampleを動かした後、MYSQLで動かしてみました。AntなしでEclipseに移し変えてみましたが問題なし。ドキュメントにも情報がありました。

■メモ
example付属のbuild.xmlの"run"タスクで指定されている以下の記載は
<jvmarg value="-javaagent:${javaagent}"/>
java -javaagent:C:\path\to\openjpa-1.2.0.jar

に対応するわけですが、ビルドパスにopenjpa-1.2.0.jarが入っていれば不要のようです。
<sysproperty key="openjpa.ConnectionDriverName" value="${dbdriver}"/>
などなど

はpersistent.xmlで指定することが出来ます。
※ eclipse の Run → Run configuration → Environment に環境変数を通してみたが期待通りには動きませんでした。

■以下の手順で動きました。
1.MySQLのJDBCドライバをビルドパスに通す
2.OPENJPAのJDBCドライバをビルドパスに通す
3.persistent.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="1.0">
<!--
複数のpersistence-unitが存在する場合は最初にリストアップする必要あり。
openjpaのバグ。
-->
<!--
<persistence-unit name="none" transaction-type="RESOURCE_LOCAL">
<class>hellojpa.message</class> </persistence-unit>
-->
<persistence-unit name="hellojpa" transaction-type="RESOURCE_LOCAL">
<class>hellojpa.message</class>
<properties>
<!-- hellojpaは実在するDB -->
<property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost/hellojpa" />
<property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver" />
<property name="openjpa.ConnectionUserName" value="root" />
<property name="openjpa.ConnectionPassword" value="root" />
<!-- テーブルを作成する -->
<property name="openjpa.jdbc.Synchronizemappings" value="buildSchema" />
<!-- SQLトレースログ -->
<property name="openjpa.Log" value="DefaultLevel=WARN,SQL=TRACE"/>
</properties>
</persistence-unit>
</persistence>

以上
.

0 件のコメント: