leftovers...

about grails groovy

Grails 3.1 リリース!!

Grails 3.1 リリースです。
Grails 3.1の内容

  • Spring Boot 1.3 と Spring 4.2に更新!
  • Grails 3 プロファイルサポートの改良。必要なシーンに合わせた独自のプロファイルを開発
    • プロファイルをjarとして発行できmavenで配布可能
    • create-profileコマンドで簡単プロファイル作成
    • ビルドへの機能提供
    • 多数のfeatureの作成
  • 新たなRESTプロファイル("web-api"は"rest-api"に変更されました)
    • JSON/Markupビュー
    • RESTスカフォルド
  • AngularJSプロファイル
    • AngularJSを使用したSPA(シングルページアプリケーション)開発をサポート
  • GORM 5 suite
    • 従来のGORMをベースから再構築されたGORM5。今まで対応していたMongoDB,Hibernate(3,4,5),Cassandra,Redisに加えNeo4jにも対応。
  • プラグイン発行Gradleプラグイン

詳しくは http://grails.github.io/grails-doc/3.1.x/guide/introduction.html#whatsNew31 から詳細を!


Grails 3.0からの更新注意点
http://grails.github.io/grails-doc/3.1.x/guide/upgrading.html#upgrading3x

  • GORM 5への更新

GORM5では、Groovy traits等を使用して再構築されています。以前のGORMとはバイナリー互換がありません。
次のようなエラーが出る場合、使用しているプラグインで古いGORMを使用しているので、プラグイン側もGrails3.1とGORM5で再コンパイルが必要です。

Caused by: java.lang.ClassNotFoundException: org.grails.datastore.gorm.GormEntity$Trait$FieldHelper
    … 8 more

GORM5ではhibernateプラグインの名称がhibernate4となりました。(他のバージョンはそれぞれ、hibernate3とhibernate5)
build.gradleで指定しているプラグインを変更しましょう:

compile 'org.grails.plugins:hibernate4'
  • 静的リソースパス

src/main/resources/publicに配置されていたリソースは既存値で、URI /static/** となります。元々は /** でした。
例えばGSPで以下を指定した場合。

${g.resource(dir:'files', file:'mydoc.pdf')}

/files/mydoc.pdf では無く、/static/files/mydoc.pdfとなります。

元の状態が良い場合はapplication.ymlに以下を設定しましょう!

grails:
    resources:
        pattern: '/**'

Grails 3.0.xではフィルターの仕組みがInterceptorsに変更されましたが、内部的にプラグインを保持していました。 Grails 3.1.xからは無くなります。
フィルタープラグインが必要な場合は、以前のGrails 3.0.xで使用していたプラグインを依存管理から指定できます。

compile 'org.grails:grails-plugin-filters:3.0.12'

grails.transactional.TransactionalのAST変換でトランザクショナルサービスを提供しているため、従来の方法が必要なくなりました。
以下のように、transactionalで指定されている場合は、

class FooService {
    static transactional = true
}

以下のようになります。

import grails.transaction.Transactional
@Transactional
class FooService {

}

以前の状態に戻したい場合はapplication.ymlに以下を設定しましょう!

grails:
    spring:
        transactionManagement:
            proxies: true
  • JSONコンバータの変更

The default JSON converter no longer includes the class property by default. This can be re-enable with the following configuration:
デフォルトJSONは、デフォルトでクラスのプロパティを含まないようになりました。元の状態で使用したい場合はapplication.ymlに以下を設定しましょう

grails:
    converters:
        domain:
            include:
                class: true

※デフォルトのJSONコンバータはidのプロパティがnullの場合idをレンダリングしません。

  • JSON Builder Groovy Alignment

grails.web.JSONBuilderは、GroovyのJSONビルダーgroovy.json.StreamingJsonBuilderへ変更になり非推奨となりました。


例えば以下のようにJSONをビルドするrenderブロックは、groovy.json.StreamingJsonBuilderのシンタックスに書き直す必要があります。

render(contentType:"application/json") {
    title = "The Stand"
}

書き直すと、

render(contentType:"application/json") {
    title "The Stand"
}

今回非推奨となった、以前のJSONBuilderに戻す場合は、application.ymlに以下を設定しましょう。

grails:
    json:
        legacy:
            builder: true
  • JSONコンバータをJSONビューに変更

JSONビューが追加されたので、以前のJSONコンバータAPIを使用した実装はビューに置き換えることを推奨しています。
将来的にコンバータは外部プラグインとして切り離されます。JSONコンバータAPIはdeprecatedになりませんが、新たに追加されたJSONビューを使用した方が、機能的でエレガントなAPIが構築出来ます。

  • Spring Boot 1.3 と Spring 4.2

Grails 3.1 は、Spring Boot 1.3 と Spring 4.2に変更されているため、それに関連する外部ライブラリなどの更新は必要です。

Spring Boot 1.2と違い、Spring Boot 1.3では、Gradleアプリケーションプラグインを使用していません。もし使用している場合は変更が必要です。
そして、Spring Boot 1.3は、デフォルトでSpring Security 4.xを参照しています。プロジェクトがSpring Security 3.xに依存している場合は、以下の例のように、ライブラリの依存設定が必要です。

compile 'org.springframework.security:spring-security-core:3.2.9.RELEASE'
compile 'org.springframework.security:spring-security-web:3.2.9.RELEASE'

Grails 3.0.xでのResourceアノテーションが適用された、ドメインクラスのリソースはXMLでした。Grails 3.1.x移行はJSONがデフォルトとなります。
もしXMLレスポンスを使用する可能性が明日場合は、以下の様に指定しましょう。

import grails.rest.*
@Resource(formats=['xml', 'json'])
class MyDomainClass {}

GebHTMLUnitを使用している場合(※通常推奨されないしPhantomJSを使用した方が良い)は、ライブラリの依存管理の調整が必要です。

testRuntime 'org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1'
    testRuntime 'net.sourceforge.htmlunit:htmlunit:2.18'



Grails 3.1.0 の公式リリースノートはこちら。
https://github.com/grails/grails-core/releases/tag/v3.1.0
https://github.com/grails/grails-core/issues?q=milestone%3Agrails-3.1.0.GA
コミットリスト https://github.com/grails/grails-core/compare/v3.1.0.M3...v3.1.0?w=1
ダウンロード https://github.com/grails/grails-core/releases/download/v3.1.0/grails-3.1.0.zip
ドキュメント http://grails.github.io/grails-doc/3.1.0/




追記です!
Grails 3.0.13リリース情報
もろもろバグフィックスと!

  • スタートアップ速度向上

Grails 3.0.12から起動速度が向上しました。
簡単にまとめるとGrailsクラスのスキャン範囲を限定したっぽい。今後はApplicationクラスに関連したクラスだけをスキャンするようになりました。以前の状態に戻したい場合は、ApplicationのlimitScanningToApplicationをオーバライドしてfalseを返しましょう。

@Override
protected boolean limitScanningToApplication() {
    return false
}
  • 静的リソースの場所

https://github.com/grails/grails-core/issues/9430 の問題を解決するために、src/main/resources/publicに配置されていたリソースは既存値で、URI /static/** となります。元々は /** でした。
元の状態が良い場合は以下を設定しましょう!

grails.resources.pattern = '/**'


公式リリースノート https://github.com/grails/grails-core/releases/tag/v3.0.13
https://github.com/grails/grails-core/issues?q=milestone%3Agrails-3.0.13
コミットリスト https://github.com/grails/grails-core/compare/v3.0.12...v3.0.13?w=1
ダウンロード https://github.com/grails/grails-core/releases/download/v3.0.13/grails-3.0.13.zip
ドキュメント http://grails.github.io/grails-doc/3.0.x/