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 に入れ替えたら動くようになりました。