leftovers...

about grails groovy

Grails 1.1から1.2へ ザックリアップグレードテスト

今回の検証。
Grails-1.1で簡単な認証付きアプリを作って、Grails-1.2.0にアップグレードしてみる。
Grails 1.1 (1.1.xではなくて、1.1)
プラグイン acegi 0.5.2
grails 1.1でのプラグインはzipファイルを直に指定してインストール。(なんとなく)
https://svn.codehaus.org/grails-plugins/grails-acegi/tags/RELEASE_0_5_2/grails-acegi-0.5.2.zip

最初に、grails-1.1で簡単なアプリを作成

grails create-app v11acegi
cd v11acegi
grails install-plugin https://svn.codehaus.org/grails-plugins/grails-acegi/tags/RELEASE_0_5_2/grails-acegi-0.5.2.zip

grails create-auth-domains
grails generate-manager

データが既にあることにしてテストしたいので、データが保存されるように設定。

DataSource.groovy
environments {
     development {
          dataSource {
               dbCreate = "update" // one of 'create', 'create-drop','update'
               url = "jdbc:hsqldb:file:devDB;shutdown=true"
          }
     }
 //..省略..//
}

起動!

grails run-app

動作確認、authority登録、person登録、requestmap登録、でログイン確認
問題なく動作。(ここは動いてあたりまえか・・・。)

grailsを1.2.0に変更
では、grailsを1.2.0に変更。
とりあえず、そのまま起動!(run-app)
もちろんバージョンが違うメッセージが出る
Application expects grails version [1.1], but GRAILS_HOME is version [1.2.0] -
use the correct Grails version or run 'grails upgrade'

アップグレードコマンドを実行。
※実際のGrailsアプリケーションを使う場合は必ずバックアップをした方が良い。

grails upgrade

途中taglibとかがどうとか聞いてくるので、とりあえず"y"と答える。
最新のtomcatプラグインhibernateプラグインインストールとか勝手にやってくれる。
更新完了で、そのまま起動してみる。

grails run-app

見た目(デザイン的に)は1.2にならないけど、そのまま動きました!
問題なく動くのだね!
Grails 1.0.x系のからの移行は昔のポストを参考にしてほしいです。
Grails-1.0.*からGrails-1.1への〜 Pt.3 まだ最終版じゃないから何とも言えないけど・・・GORM・・・ - leftovers...

OSCacheProviderは何処へ?
キャッシュは、OSCacheProviderから、EhCacheProviderに変更されてる。
※OSCacheProviderは短い命だった!?
以下のようなWARNINGが出るのです。

[main] ERROR spring.BeanBuilder  - WARNING: Your cache provider is set to 'com.opensymphony.oscache.hibernate.OSCacheProvider' in DataSource.groovy, however the classes for this provider cannot be found.
Using Grails' default cache provider: 'net.sf.ehcache.hibernate.EhCacheProvider'

cache.provider_classを'net.sf.ehcache.hibernate.EhCacheProvider'に変更すれば、エラー出なくなります。

hibernate {
    cache.use_second_level_cache=true
    cache.use_query_cache=true
    cache.provider_class='net.sf.ehcache.hibernate.EhCacheProvider'
}

パッケージの話:デフォルトパッケージのクラスが動かなかったことがあったけど?
Grails 1.2からは、ドメインクラスなどアーティファクトを生成するコマンドを実行すると、パッケージが指定されてないけど、パッケージ付けるのを推奨するよ!っと聞いてくる。強引に"y"でパッケージ無しで生成するのも可能。
今後のGrailsでは、デフォルトパッケージを受け付けないのか?
パッケージ付けないで仕事してはいけないとか言われると思うが、
Grailsの今までの流れでは、ただの飾りだったんですよ!偉い人にはそれがわからんのです
半年間のマイルストーンやRC、そして、1.1.1->1.1.2 のどの辺でなのか忘れたけど、一時期パッケージの無いクラスが読みこまれない等(バグでしょ)があったが修正された?っぽい(未確認)。(バグがまだ出る人教えてください!)


アップグレードでの注意点 - i18n対応。
あたりまえと言えばあたりまえだが、どうやらupgradeコマンドでは、messages.propertiesを更新しないっぽい。
なので、def scaffold = Memo とかしている内容は、見た目がおかしくなる。
これを修正する方法は、grails-1.2.0のmessages.propertieをコピーするとOK。
あるいは、
http://gist.github.com/258601
ここに日本語対応を貼っておいたので、messages_ja.propertieに上書きするとOKです。