NetBeans JPA環境整理

NetBeans5.5でJava Persistenceの開発環境の整理。運用環境に近い形、Tomcat5.5+Hibernate EM+PostgreSQL8.1で、検証しました。

以前、Java Persistence APIのチュートリアルを紹介しました。NetBeansがあれば、(仕組みこそ違えど)Railsのような手軽さでWeb+DBアプリが作れることを実感できます。
まだの方は、ぜひ一度やってみてください。

このチュートリアルで使ってる技術と実装は、次のようになってます。

技術構成実装(すべて Sun Java 9.0 に同梱)
JSF WebコンテナSun Java 9.0 [GlassFish]
Java Persistence APITopLink (Essential)
データベースJava DB [Derby]

運用環境を考えてみると、Derbyが不安で、できれば使い慣れたネイティブDBを使いたいところ。
そこで、DerbyからPostgreSQLに切り替えたところ、相性が悪いのか、Exception吐きまくりでした・・・イライラ・・・。確かに、Oracle製のTopLinkが、オープンソースDBで検証している気がしないw

もう一つ整理したかったのは、使いもしないJMSやEJBコンテナを立ち上げたくないので、GlassFishやJBoss ASは使いたくないぞっと。

そこで、軽量Java&エンタープライズDBな構成を整理して、次のように、NetBeansに開発&運用環境を作ってみました。

技術構成実装(変更前)実装(変更後)
JSFGlassFishTomcat 5.5-20
JPATopLinkHibernate EntityManager
DBDerbyPostgreSQL8.1

以下、手順を書いておきます。一度はチュートリアルをやった方むけに、差分だけご紹介します。


手順

■1.各ソフトウェアをインストールする
 (割愛します。上表のリンクからどうぞ。)
tomcat/common/lib に、hibernate EntityManagerとJDBCのライブラリをコピーしておきます。その他、hibernateのREADMEを読んで、必要に応じて追加します。

  antlr-2.7.6.jar
  asm-attrs.jar
  asm.jar
  cglib-2.1.3.jar
  dom4j-1.6.1.jar
  ejb3-persistence.jar
  hibernate-annotations.jar
  hibernate-entitymanager.jar
  hibernate3.jar
  javassist.jar
  jboss-archive-browsing.jar
  jta.jar
  postgresql-8.1-407.jdbc2ee.jar

■2.NetBeansにJDBCをインポートする

RuntimeタブのDatabases-Driversを右クリックで「New Driver」。PostgreSQL JDBCをインポートします。



■3.NetBeansで新しいWebプロジェクトを作る

「New Project」で「Web Application」。
Serverの「Manage」をして、Tomcat5.5-20を追加します。



「Source Level to Java1.4」はチェックを外します(Java5に対応しなければならないので)。これをしないと、アノテーションを使う機能を利用できません。

■4.接続ユニット(Persistence Unit)を作る

デフォルトではTopLinkしか選べませんが、「New Persistence Library」で、次のJARをインポートするとHibernateが使えるようになります。



「New Database Connection」で、先にインポートしたPostgreSQLが選択できるようになっているので、接続URLを入力します。



2006/12/15追記:
生成されたpersistence.xmlに、手作業で以下を追加します。
<property name="hibernate.dialect" \
value="org.hibernate.dialect.PostgreSQLDialect"/>

■5.あとは、チュートリアルどおり

Entityを作って、JSF from Entityを作って、動作確認。


変更前と違う点

GlassFishを使う場合は、APサーバにデプロイされてるデータソース(コネクションプール)を、NetBeansから直接参照できます。※しかも、作成や管理もできて、ちょっと感動しました。

Tomcatでは、それができませんので、persistence.xmlの設定はJDBCを生で参照しています。ここは、手動で設定しなければならないようです。でも、persistence.xmlをいじるだけですから、慣れてる人にとっては、さほどの手間ではないでしょう。

結構苦労しました

ザザっと書いてますが、JBoss試したり、MySQL試したりと、整理できるまでいろいろごちゃごちゃでした。今の構成でも、どれだけ良い結果になるかは、まだまだこれからです。

何はともあれ、TopLinkとHibernateの対応DBの幅の違いが、大きく影響してる気がします。自分にとってはHibernateの方が安心できる。でも、もしかしてDerbyがめちゃめちゃ良いDBだとしたら、余計なこと考えずとも、Sun JavaでOK!なのかもしれませんね(この辺りのケーススタディあるのかな?)。

この構成で残念なのは、前述のように、NetBeansとAPPサーバの連携が若干劣ってしまうことなので、いらない機能を許せるなら、

 NetBeans+GlassFish+Hibernate+好きなDB

が、最強かも。でも私は、許せないw


コメント
nn
2007/02/08
こういう手順で、application serverはうごいたのでしょうか?
entity classをアクセスするまでは、うまくいきましたが、web content(JSP)から、databseをアクセスしようとすると、わたしの場合、MySQLをアクセスしようとしたのですが、そこにはアクセスせずに、defaultのderbyをアクセスしていました。ちょっと目には、mySQLにアクセスしているようで、紛らわしいので、始めのうちは、MySQLはまともにサポートしていないのかと疑問に思いました。

結果的には、Galssfishのadminサイトを使って(これもへんな話ですが)、DataSourceを作ってやると、それが、netbeans 5.5のツールの中で認識されDataSourceの設定につかえるようになります。これで、web applicationから、mySQLがアクセスできるようになり、それ以前の、不可思議なエラーはでなくなり、寸なりとうごきました。

NetBeansはDefautのderbyでけでうごかすぶんには容易でしょうが、こうした、それ以外のデータベースの動かしかたの説明や、ツール自体の挙動が、まだ、あまり、整備されていないきがしました。
武田ソフト
2007/02/08
nnさん、コメントありがとうございます。

#こういう手順で、application serverは
このエントリは、「デフォルトからTomcatに変更する手順」ですので、よろしくお願いします。どんなアプリで試されたのかわからないのでアレなのですが、

#結果的には、Galssfishのadminサイトを使って
それで良いんだと思います。または、NetBeansのRuntimeタブから、GlassFishのデータソースを設定できたのではなかったでしょうか?

#まだ、あまり、整備されていないきがしました。
そうですね。今のところ、いろいろ試していくしかなさそうです。
でも、使いやすいと思いますよ。私はもう、手放せないです。
匿名さん
2007/02/09
#アプリで試されたのか..
具体的には、データベーススキームから、entity beans
を作り、これから、JPS(Face)を生成するという、Railsのscaffoldのようなことをして、動作をみてみたときです。

#galssFishのデータソースを設定できた..
NetBeansのなかのDataSourceの設定をしても、うまく、DataSourceをつくれませんでした。(これは、わたしの環境設定の問題もあるかもしれませんが。)そこで、このポストにあるように、手でpersistence.xmlを変更して、直接jdbcの参照情報を入れたところ、上のような経験をしました。

この辺は、データベースを変更する場合必ず、遭遇する問題だとおもいますが苦労しましたね。もう少し、楽になっている必要があるでしょう。ちょっとした、ドキュメントでの説明でもいいですが。(ツールでdatasourceを設定できればそれでもいいんですが、これは、bugでしょうかね?)

このJEEは、ようやく、Javaでもserver開発のまともな環境がでてきた感じで、よい方向だとおもいます。
ただ、entity benasや、web servieにくらべて、server face/JSPなどの方向はそれ程、変わっていないようにおもいますね。Stripesとか評価されたことはありますか?




武田ソフト
2007/02/09
Stripesは、触ってはいませんが、URLバインドな感じが分かりやすいので気になっていました。Strutsを徹底的に簡単にした感じですね。いずれお世話になるような気がしてますw

コメントしてください

closed.