@PersistenceContext の行方

<< 戻る   トップ >>

TomEE を使ってみている。Eclipse に引き取られた GlassFish は、当然 Eclipse IDE との親和性が増すと思われたのだが、まだ過渡期なのか連携がうまくいっていないように見える。無理して最先端に立つ必要もないし、TomEE なら、これまで鴨乃嘴南蛮で使ってきた Tomcat だから、取扱やすい(だろう)し、ということだ。

さっそく、JPA を使おうとしているのだが、@PersistenceContext で指定する unitName の行方がわからなくなった。unitName は、JTA (Java Transaction API) で使用する JTA Unit の名前…と理解している。この unitName は、WEB-INF/classes/META-INF/persistence.xml の persistence-unit の name 属性に登場し、ユニット配下の class やオプションが記述される。ただし、この段階では具体的な Database と結びつくわけではない。

これらを結びつけるのは、$TOMEE_HOME/conf/tomee.xml または WEB-INF/resources.xml の役割だ。したがって、persistence.xml と resources.xml が正確に記述されていれば TomEE での JPA 作動はなる…はずなのだが、さてどうだろう。

WEB-INF/classes/META-INF/persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2" 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_2.xsd">
	<!-- persistence-unit name="HelloTomee" -->
	<persistence-unit name="HelloTomee" transaction-type="JTA">
		<jta-data-source>nanban-webJtaDataSource</jta-data-source>
    		<non-jta-data-source>nanban-webNonJtaDataSource</non-jta-data-source>
		<class>model.Article</class>
		<class>model.Category</class>
	</persistence-unit>
</persistence>

WEB-INF/resources.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources>
	<Resource id="nanban-webJtaDataSource" type="DataSource">
    	JdbcDriver = com.mysql.jdbc.Driver
    	JdbcUrl    = jdbc:mysql://localhost/nanban_web
    	UserName   = bocomoco
    	Password   = stepByStep
	</Resource>

	<Resource id="nanban-webNonJtaDataSource" type="DataSource">
    	JdbcDriver  = com.mysql.jdbc.Driver
    	JdbcUrl     = jdbc:mysql://localhost/nanban_web
    	UserName    = bocomoco
    	Password    = stepByStep
    	JtaManaged  = false
	</Resource>
</resources>

動かしてみたら、JdbcDriver がないと言われた。そりゃそうか、というわけで $TOMEE_HOME/lib/ にcom.mysql.jdbc.Driver のシンボリックリンクを張って無事サンプルが動作した。

開発環境が整うまでの紆余や曲折が多かったが、これでなんとか開発環境が整ったことになる。ところで、persistence.xml を使わずとも、Entity class を自動検索する方法があったように思ったのだが、どうやら JAX-RS の Application サブクラスと(どこをどうしたものか)勘違いしていたようだ。


作成: 2021-11-12 08:17:28更新: 2021-11-12 08:17:28
https://museo-anonimo.jp/nanban/?id=1571,https://museo-anonimo.jp/nanban/tr/1571