Eclipse+JSF+JPAで作るアプリ(4)―JPA persistence.xmlとEntity

今回からJPAサイドです。
JPAを設定するpersistence.xmlを記述します。
とっかかりやすいよう、persistence.xmlJDBCドライバを直接記述する方法をとります。
JPAプロバイダも、toplinkとeclipselinkが使えますが、ログファイルが簡単に出せるeclipselinkを使用します。

GlassfishJDBCリソース、JDBCコネクションプールは使用しません。
これらについては別途設定する方法を書いたセクションに書こうと思います。

今回の範囲は、以下の通りです。

  • persistence.xmlの記述
  • パッケージングと命名規則
  • アプリケーションの全体像

Persistence.xmlの記述

<?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="YourLibrary">
		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
		<exclude-unlisted-classes>false</exclude-unlisted-classes>
		<properties>
			<property name="javax.persistence.jdbc.driver"
				value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
			<property name="javax.persistence.jdbc.url"
				value="jdbc:sqlserver://localhost:1433;databaseName=YourLibrary" />
			<property name="javax.persistence.jdbc.user" value="yourlibrary" />
			<property name="javax.persistence.jdbc.password" value="yourlibrary" />
			<property name="javax.persistence.schema-generation.database.action"
				value="create" />
			<property name="javax.persistence.schema-generation.create-source"
				value="metadata" />
			<property name="eclipselink.logging.level" value="FINE" />
			<property name="eclipselink.logging.file" value="output.log" />
			<property name="eclipselink.logging.timestamp" value="true" />
			<property name="eclipselink.logging.session" value="true" />
			<property name="eclipselink.logging.thread" value="true" />
		</properties>
	</persistence-unit>
</persistence>
  • org.eclipse.persistence.jpa.PersistenceProviderでeclipselinkを指定しています。
  • javax.persistence.jdbc.driver ~ javax.persistence.jdbc.passwordは、ドライバ、URL、ユーザ、パスワードです。
  • javax.persistence.schema-generation.database.action, javax.persistence.schema-generation.create-source で、データベースにソースを元にテーブルを作成するよう指示しています。
  • eclipselink.loggingは、ログの設定です。output.logはglassfish4\glassfish\domains\domain1\configに作成されます。

パッケージングと命名規則

先回りになりますが、

  • JSFの画面情報は、pagesかview,おそらくview
  • データベースのエンティティはentity
  • ロジックはlogic

というパッケージに入れます。

XxxDAOや、XxxServiceといったクラスは作りません。
UserLogicかUserManagerという名前のクラスを作る予定です。
データベースアクセスとロジックの分離は発生しそうな場合に検討します。

アプリケーションの全体像

このブログで作成するアプリケーションの設計を行うと

  • ユーザの登録管理ができる。
  • 書籍を登録管理ができる。
  • 書籍の貸出管理ができ、貸出履歴がユーザ、書籍別に参照できる。

という感じでしょうか。
エンティティ候補は、ユーザ(利用者と管理者)、書籍、著者、カテゴリ、貸出履歴などです。

  • entity: User, Book, Author, Category, LendHistory
  • logic: UserManager, BookManager, LendHistoryManager

といったクラスでよいでしょう。