カスタム検索
ラベル Hibernate の投稿を表示しています。 すべての投稿を表示
ラベル Hibernate の投稿を表示しています。 すべての投稿を表示

2009年4月21日火曜日

Grails+HiberObjectsでJPAなモデリング

HiberObjectsというEclipseのPluginでHibernate+JPAをGUIモデリングで作れるのですが、これがGrailsに対応していると言う事で使ってみました。

公式サイトはコチラ

最新のEclipseをダウンロードしてきてpluginをセット、Grailsは1.1を使いました。
公式の説明にしたがってHiberObjectsを有効にしていきます、公式のは少し古いみたいでオプションが一部違いましたが、
特に気にするような項目もなかったのでそのまま続行。

公式には Deselect Add Hibernate libraries とありますが、後でHibernate関係でライブラリが見つからないよとエラーが出るのでチェックを入れておきました。
(1.1からはHibernateが完全なPluginとなり、GRAILS_HOMEのlibフォルダにHibernate系のライブラリが入らなくなった為)

設定画面はこんな感じです。




HiberObjectsを有効にしたら、クラスダイアグラムを作ってUMLを描いていくとJavaコードと、hibernate.cfg.xml が生成されます。


あとは generate-all なり、scaffold=true なりして run-app すると普通に CRUD が出来ま、、、、せんでした |-`)
Create,Read,Deleteとリレーション系はちゃんと実装されてるんですが、Editでエラーになります。
ソース見たら自動生成されるファイルに version がありませんでした(´・ω・`)
(クラスに手動で Long version フィールドを追加してやれば CRUD できました)

他にもクラスダイアグラムで削除したクラスやインターフェースが生成され続けるとか、まだまだ微妙な所もあります・・・
Groovyで普通のドメインみたいに作ってくれてUMLが描けるのかと思ってwktkしてたのでちょっと残念、でもGrailsに対応しようとしてくれる辺りが素敵です、今後に期待!

2008年3月11日火曜日

GrailsでHibernate+C3P0のpooling

Grailsでpoolingをする場合、grails-app/conf/DataSource.groovy の pooled = true にしてやる事で pooling されるようですが、
これはHibernateのbuilt-in poolingを使っている(?)気がします。

で、built-in poolingは
Using Hibernate built-in connection pool (not for production use!)
ということで、本番では推奨されていません。

ここでHibernateが対応しているサードパーティのpoolingの出番です。
C3P0とApache DBCPとProxoolが使えるらしいのですが、今回はC3P0を使います。

grails-app/conf/spring/resources.xml というファイルを作成し、以下のように設定します。


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass"><value>oracle.jdbc.OracleDriver</value></property>
<property name="jdbcUrl"><value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value></property>
<property name="user"><value>username</value></property>
<property name="password"><value>password</value></property>
</bean>
</beans>


driverClassとjdbcUrlはDBに合わせて調整して下さい、今回はOracleへ接続しています。
resources.xmlを記述する事で DataSource.groovy の driverClass などは無視されます。

ここで一つ注意事項です。
C3P0では use_second_level_cache と use_query_cache を true にしてやる必要があります。

DataSource.groovy に以下を追加します。


hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=true
cache.provider_class='org.hibernate.cache.EhCacheProvider'
}


追加しなかったり、falseにしても普通に動作してしまったりするのですが、環境によりエラーが出るので true にしておくのが良いみたいです。