JavaEEではデータベースとの設定情報はpersistence.xmlに記述します。
(ユーザー名、パスワード、ポート、driver名、データベース名などの情報はglassfish-resource.xmlに記述します。)
最初のころはわけもわからず書いていましたが、最近少しずつプロパティの意味が分かってきました。
サンプルコードを例にちょっと説明したいと思います。
ちなみにDBとつながっていることが前提ですので、JavaEEで動かしている方はDBとつなげましょう。
わからない方はこの記事を参考にしてくださいね→GlassfishでDB接続
Contents
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="hogehogehoge" transaction-type="JTA"> <jta-data-source>jdbc/sample</jta-data-source> <exclude-unlisted-classes>false</exclude-unlisted-classes> <shared-cache-mode>NONE</shared-cache-mode> <properties> <property name="javax.persistence.schema-generation.database.action" value="create"/> <property name="eclipselink.logging.parameters" value="true"/> <property name="eclipselink.logging.level.sql" value="FINE"/> </properties> </persistence-unit> </persistence> |
IDEを使っていると自動生成されたりしますが簡単な意味などは分かっているとやはり困った時やカスタマイズするときに自分を助けてくれます。
各種プロパティ
persistence-unit
name
永続化ユニットの名称。要するに「データベースを識別するユニークな名称」です。大抵はEJBのソースに
@PersistenceContext(unitName = “XXXXXXX”)と記述してあるとおもいますので、これがユニット名になります。
なにはともあれこれがないとデータベースとそもそも接続できないので、始まりません。
transaction-type
EntityManagerの使用するトランザクションタイプを指定します。
ディフォルトではJTAになっていると思いますし、ほぼそれで問題ないかと思います。
これを自分で設定することもできます。
JavaEEの場合、自動でトランザクション処理をglassfishが行いますので例えばデータ入力時にエラーが起こると自動でロールバックされます。
jta-data-source
glassfishで定義しているデータソースのことです。大体はjdbc/XXXになると思います。
class
上のサンプルにはありませんが、バッチ処理などでJPAを使用する場合(つまりJavaEEではない場合)エンティティをここに登録しておかないと動きません。
JavaSEでJPAを使う場合はここにエンティティを登録しておきましょう。
exclude-unlisted-classes
現在、調べ中ですがどうやらJPAの対象化でないもののチェックを行うようです。
JPAは自動でキャッシュ機能がついてます。
ここをNONE以外にしていると処理が残っていて、意図した処理と違う動きをすることがあります。
ちなみにキャッシュについては↓ここが詳しいです。
property
key=>value式で様々なプロパティを設定できます。ここはプロバイダの実装に依存するみたいですね。
私が使ったことがあるのがEclipseLinkのみなのでご了承ください。
javax.persistence.schema-generation.database.action
これを使用するとプログラム実行時やデプロイ時にテーブルを自動生成してくれたりします。
create・・なければ作成
drop-and-create・・常にドロップし、エンティティからテーブルを作成
eclipselink.logging.parameters
プロパティがtrueのときにJPAで実行されるSQLをログに吐き出してくれます。
eclipselink.logging.level.sql
プロパティの値に応じたログを出力してくれます。プロパティの詳細な説明は下記リンクに記載してあります。
Eclipse How To Configure Logging
まだまだpersistence.xmlの応用範囲は広いですね。ちなみに参考にしたのは下記リンクです。