leftovers...

about grails groovy

Grails 3.2 RC1リリース!!

Grails 3.2 RC1リリースです!!!!
正式版リリースが待ち遠しい!

Grails 3.2系の新機能は、公式サイトのWhat's NEWを参照!
http://docs.grails.org/3.2.x/guide/introduction.html#whatsNew

ザックリまとめるとこんな内容です。


GORM 6 Suite

  • GORM for Neo4j 3.0: Bolt Driver対応
  • GORM for MongoDB 3.2
  • RxGORM - GORM for RxJava
  • RxGORM for REST: RxNetty上に構築
  • RxGORM for MongoDB: MongoDB Rxドライバー上に構築
  • 新たなConnectionSources APIとユニバーサルマルチデータソース対応
  • Hibernate, MongoDB, Neo4jのマルチテナント対応
  • Springコンテナ無しでのブートストラッピング
  • Configuration APIの統合
  • Unitテストの向上

GORM6公式のWhat's Newに詳しい情報載ってます。
http://gorm.grails.org/6.0.x/whatsNew/manual/index.html


RxJavaサポート
RxGORM対応に追加として、RxJavaサポートもプラグインとして提供
https://grails.org/plugins.html#plugin/rxjava

RxJavaを使用したリアクティブコントローラ
RxJavaプラグインでは、コントローラからObservableのレスポンスとシームレスなRxGORMとの統合でノンブロッキングなリアクティブリクエストのハンドルを可能とします。

def show() {
    String author = params.author 
    Book.get(params.id).map { Book book ->
        rx.render view:"book", model:[book:book, author:author] 
    }
}

RxJavaでServer Sent Events
GrailsとRxJavaで簡単にServer Sent Eventsレスポンスを発行できます。

def index() {
    rx.stream { Subscriber subscriber -> 
       for(i in (0..5)) {
           if(i % 2 == 0) {
               subscriber.onNext(
                   rx.render("Tick") 
               )
           }
           else {
               subscriber.onNext(
                   rx.render("Tock")
               )
           }
           sleep 1000 
       }
       subscriber.onCompleted() 
   }
}

サンプルアプリケーションはコチラ:
https://github.com/grails-plugins/grails-rxjava/tree/master/examples/server-sent-event-example


AngularJS 1.0 Scaffolding
AngularJSプロファイルがリファインと新たにAngular Scaffoldingプラグインが追加されます。
Angular Scaffoldingプラグインでは、CRUDを実現するAngularJS 1.xのクライアントコードが生成可能な ng-generate-all コマンドが追加されます。
※Angular2用は将来のバージョンで実装予定。

JSON Views 1.1
Grails 3.2では、いくつかの新機能を追加したJSON Views 1.1プラグインが同梱されます。

テンプレート継承
例えばgrails-app/views/_parent.gsonを親gsonとして。

model {
    Object object
}
json {
    hal.links(object)
    version "1.0"
}

コレを継承するには以下のように記述します。

inherits template:"parent"
model {
    Person person
}
json {
    name person.name
}

グローバルとデフォルトテンプレート
どのGORMカスタム型に対してもグローバルテンプレートが作成できるようになります。
これによりJodaTimeライブラリ対応やMongoDBの用にカスタム型(GeoJSONなど)を提供しているデータストアの対応が可能となります。

グローバルテンプレートは、"_"にクラス名を指定した単純なJSONテンプレートです。例としてGeoJSONテンプレートを参照。
テンプレートが見つからない場合のフォールバックテンプレートとして、/object/_object.gson を提供できる機能も追加されています。

向上されたHALサポート
HAL対応拡張で、_embeddedと_linksのコントロールが対応されました。

model {
    Book book
}
json {
    hal.links(self: book )
    hal.embedded(authors: book.authors)
    hal.inline(book) {
        pages 300
    }
}

今回のHALサポート向上でHALページネーション対応も向上しています。

依存ライブラリー更新!
Grails 3.2では以下の依存ライブラリを更新しています。

その他の新たな機能!

日付データバインディングフォーマットに新たな既存値追加
日付フォーマット"1970-01-01T00:00:00.000Z"がデフォルトで正常にパースできるようになりました。


Grails2でのrun-scriptコマンドが戻ってきました!
run-scriptコマンド復帰です!Grails3でもGrailsコンテキストでラップされたGroovyスクリプトが実行できます。

$ grails run-script my-groovy-script.groovy

詳しくはrun-scriptのドキュメントを参照

RESTプロファイル改良
RESTプロファイルは、RESTアプリケーション専用に実用的なUrlマッピングMIMEタイプ定義が可能になります。

システムプロパティでBootstrapプロセスを省く指定
Grailsランタイム起動時の*Bootstrap.groovy実行を条件によって省くことが可能になります。
システムプロパティに grails.bootstrap.skip を指定する事で実行を省けます。

リクエストのボディでデータバインディングの仕様変更
よりHTTP/1.1仕様に近づけるためGETとDELETEリクエストのボディ内容はデータバインディングを無視するようになります。
コンテントの長さが0の場合もリクエストボディが無視されます。

プロファイル向上
リポジトリーのクレデンシャル定義はsettings.groovyで可能になります。詳しくはプロファイルセクションのドキュメントを参照。



相変わらずのザックリ意訳ですが、お役に立てれば幸いです。



Grails 3.2 RC1 公式リリースノート
https://github.com/grails/grails-core/releases/tag/v3.2.0.RC1
http://docs.grails.org/3.2.x/guide/introduction.html#whatsNew

https://github.com/grails/grails-core/issues?q=milestone%3Agrails-3.2.0.RC1
コミットリスト https://github.com/grails/grails-core/compare/v3.2.0.M2...v3.2.0.RC1?w=1
ダウンロード https://github.com/grails/grails-core/releases/download/v3.2.0.RC1/grails-3.2.0.RC1.zip
ドキュメント http://grails.github.io/grails-doc/3.2.x/