EJB3.0 を使ったプログラミング覚書です。EJB3.0は SpringFramework の良いところを取り入れた、次期バージョンのの EJB です。
EJB3.0 は、EJB2.1 の問題点をいろいろと改善し、ほぼデフェクトスタンダードと言える Hibernate や SpringFramework などのフレームワークを参考にした機能を、標準化しています。
また、POJO の採用によるテストの効率化アップなど、 Ease of Development(EoD : 易しい開発)を追求しています。
Ejb3.0 は、次のような特徴を持っています。
- Java Persistence API(JPA : 永続化 API )による永続化フレームワークの標準化
- アノテーションの採用
- デフォルト値の多用
- POJO のサポート、EJB インターフェースからの開放
- Dependency Injection(DI : 依存性の注入)の採用
Ejb3.0 の覚書をチョコチョコと書いていこうと思います。
覚書
環境
- JDK1.5.0_06
- JBoss-4.0.4.GA-Patch1
- HSQLDB1.8.0
ハマった点
JBoss4.0.4RC1 で NullPointerException が出る
JBoss4.0.4RC1 で JPA を使ったサンプルを動かそうとしたら、下のような例外がでました。
[java] 21:38:11,820 INFO [Environment] Hibernate 3.1.2 [java] 21:38:11,836 INFO [Environment] hibernate.properties not found [java] 21:38:11,836 INFO [Environment] using CGLIB reflection optimizer [java] 21:38:11,852 INFO [Environment] using JDK 1.4 java.sql.Timestamp handling [java] 21:38:12,070 DEBUG [Ejb3Configuration] Trying to find persistence unit: SamplePersistenceUnit [java] 21:38:12,102 FATAL [PersistenceXmlLoader] SamplePersistenceUnit RESOURCE_LOCAL [java] javax.persistence.PersistenceException: java.lang.NullPointerException [java] at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:173) [java] at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:103) [java] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:37) [java] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:27) [java] at com.hamasyou.ejb3.client.Client.execute(Client.java:40) [java] at com.hamasyou.ejb3.client.Client.main(Client.java:31) [java] Caused by: java.lang.NullPointerException [java] at org.hibernate.ejb.packaging.PersistenceXmlLoader.deploy(PersistenceXmlLoader.java:68) [java] at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:139) [java] ... 5 more
Persistence-Unit のルックアップのところで NullPointerException
が出てしまいました。原因はよくわかりませんが、JBoss4.0.4-RC1 は ejb3.deployer が無いそうなので、そのあたりが原因なのかなぁと・・・。
対処方法は、JBoss をアップグレードすること。JBoss-4.0.4.GA-Patch1 に入れ替えたら動くようになりました。