Grailsでテーブル毎にシーケンスを自動生成する方法

参考 http://grails.1312388.n4.nabble.com/One-hibernate-sequence-is-used-for-all-Postgres-tables-td1351722.htmlむかしJIRAにもチケット上がっていたみたいですが、 http://jira.grails.org/browse/GRAILS-3138 GrailsとうかHibernateの問題なのでclose…

GrailsのValidationMessageでクラス名とかプロパティ名のi18n対応をどこでやっているのか

grails2.1.0での情報。org.codehaus.groovy.grails.validation.AbstractConstraint#rejectValueWithDefaultMessageで処理している。 ... final Locale locale = LocaleContextHolder.getLocale(); final Class constrainedClass = (Class) args[1]; final St…

Groovy2.0で追加された@NotYetImplemented

元ネタ http://blog.andresteingress.com/2012/03/04/using-notyetimplemented-in-test-cases/@NotYetImplementedとそのテストメソッドは失敗しなくてはいけなくて、逆に成功してしまうと検証エラーとして扱われるみたい。 class EchoService { def echo(arg…

Groovy2.0で追加されたMatcher#matchesPartially

元ネタ http://mrhaki.blogspot.fr/2012/06/groovy-goodness-partial-matches.htmlAPIはこのへん。 http://groovy.codehaus.org/groovy-jdk/java/util/regex/Matcher.html#matchesPartially()なかなか説明が難しいのですが、とある文字列があって、その文字…

Groovy2.0でListに追加されたwithDefault、withEagerDefault、withLazyDefault

withDefaultはwithLazyDefaultのエイリアスなので機能的にはwithEagerDefault、withLazyDefaultが追加されました。今までmapには似たようなのがありましたが、今回Listにも追加されました。それぞれ要素を取得した際の要素のパディング方法や、nullの扱いが…

Groovy2.0のtakeWhileとdropWhile

元ネタ http://blog.bloidonia.com/post/26065074691/whats-new-in-groovy-2-0-takewhile-and-dropwhile特定の条件を満たしている間までの要素をコレクションとして取得するtakeWhileと、特定の条件を満たしている間までの要素を落としたコレクションを取得…

Groovy2.0でinject

元ネタ http://blog.bloidonia.com/post/26065857945/whats-new-in-groovy-2-0-inject-with-defaultgroovy2.0からinjectの初期値の指定を省略するとCollectionの先頭要素を初期値として処理してくれるようです。 def items = [1, 2, 3, 4, 5] // 1.8.6まで a…

IntellijでEclipseの"Assign statement to new local variable”

Eclipseでずっと便利に使ってた機能で、最初にクラスをnewしてからCtrl+1からのローカル変数にするとかそういうやつです。Intellij IDEAでもいくつかやり方があったのですが、一番近い感覚で使えるのがリファクタリングの"Refactor This..."を使用する方法で…

GORMでのコンポジション

リファレンスの内容そのままですが、同じ項目群を複数持つだとか、DB上の項目が多いからグルーピングしたいといった時にコンポジションが使えます。この場合テーブル上は1テーブルで表現されますが、アプリケーション側からは対応するクラスに分割して扱えま…

GORMでの継承とデータベーススキーマ

GORMでの継承によってデータベース上でどのようにスキーマ定義するかというお話です。Grailsのデフォルトの継承戦略はtable-per-hierarchyになっています。例えば次のようなドメインがあったとします。 class Parent { String name } class Sub1 extends Par…

自己参照っぽいツリーぽいあれをGORMで表現する

こういうやつです。それぞれがひとつのNodeというインスタンスで表される。 class Node { String name static belongsTo = [parent: Node] static hasMany = [children: Node] static mappedBy = [children: "parent"] } belongsToとhasManyしてしてマッピン…

Grailsでtest-app実行時の標準出力はどこいってしまったんやー

デフォルトだとtest-appした際に標準出力は、どこかいずこへもっていかれコンソールに表示されません。ちょっとした機能確認の為にUnitTestを使って学習テストなどやっていると、ついついprint使いたくなってしまうのですが、なぜかコンソールに出力してくれ…

GrailsでHibernateのSQLログを出す

DataSource.groovyでloggingSqlをtrue、formatもしたい場合はformatSqlをtrueに。 dataSource { ... loggingSql = true formatSql = true } おなじDataSource.groovyで hibernate { show_sql = true format_sql = true ... } としても同じ。こんな感じで出る…

Spockを使ってGrailsのドメインクラスのConstraintsを華麗にテストする

Spockのwikiでも https://code.google.com/p/grails-spock-examples/wiki/Overview#Testing_constraints というのが紹介されているのですが、もうちょっとカッチョいい方法が http://www.christianoestreich.com/2011/11/domain-constraints-grails-spock/ …

Programming GrailsのEarly Release editionが出ています

先日かなり割引していたんですが少し高くなっちゃいましたが買えます。 http://shop.oreilly.com/product/0636920024750.do'Best Practices for Experienced Grails Developers' とかかなり実用的な内容になりそうな予感。ちまちまと読んでいこうと思います…

GrailsでBeanFactoryPostProcessorを使ってSpringBeanの初期化をごにょごにょする

元ネタ: http://www.intelligrape.com/blog/2012/05/12/overriding-properties-in-a-spring-bean-with-beanfactorypostprocessor/BeanPostProcessorの実装クラスを登録すると、SpringBeanの初期化時に処理をフック出来るみたいです。結構簡単。BeanPostProce…

Spock+GebでGrailsのFunctionalテストをしよう

ニーズがあったら書く

Collateでサブリストを作る

1.8.6からListにcollateのメソッドが4つ追加されています。 http://groovy.codehaus.org/groovy-jdk/java/util/List.html#collate(int)これを使うと簡単にサブリストが作れる。

Intellij IDEA の GroovyShell が便利

ちょっと今更感がありますが11.1からGroovyShellがIntellij上で使えます。 http://blogs.jetbrains.com/idea/2012/04/groovy-support-improvements-in-intellij-idea-111/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+jetbrains_intellijid…

Grails2.xで依存関係のsource、javadocを取得する

http://grails.org/doc/latest/ref/Command%20Line/refresh-dependencies.html に書いてあるとおりですが grails refresh-dependencies --include-source --include-javadoc とやると$HOME/.grails/ivy-cacheの中にうにうに落ちてきます。というのもコード書…

Groovyで合成関数

http://d.hatena.ne.jp/Kazuhira/20120415/1334486571 によるとgroovyで合成関数ができるらしい。って思ったら青い本にちゃんと書いてあった。プログラミングGROOVY作者: 関谷和愛,上原潤二,須江信洋,中野靖治出版社/メーカー: 技術評論社発売日: 2011/07/06…

grailsでcoffee-scriptを使う

https://github.com/edvinasbartkus/grails-coffeescript-resources で簡単に出来た。とりあえず入れる。 grails install-plugin coffeescript-resources後はresource pluginと同じように使える。ApplicationResources.groovyにcoffeeのモジュールを追加して…

authorized_keysのコマンド

authorized_keysにcommandってのを書くとその公開鍵でログインしてきたユーザにそのコマンドを実行させることが出来るということを知った。きっと知らなかったのは私だけでしょう。 command="~/env.groovy" ssh-rsa xxx な感じで #!/usr/bin/env groovy Syst…

Spring 3.1 新機能 - AnnotationConfigContextLoader

3.0 から Javaconfig という XML でなく Java のコードで Spring の設定が記述できる機能が追加されていましたが、この機能が Test でも使えるようになりました。従来 3.0 のテストケースは @ContextConfiguration を使用してこんな定義をしていました。 @Ru…

Spring 3.1がやってくる

先日 Spring 3.1 の RC1 が出ました。新機能は以下のとおり。http://static.springsource.org/spring/docs/3.1.0.RC1/spring-framework-reference/html/new-in-3.1.html3.1 GA release を11月末にリリース予定で、その間にRC2を出すとのことです。

Spring 3.1 新機能 - Bean Definition Profiles と Environment XML版

3.1からProfileという仕組みを使ってBeanの定義を簡単に切り替えられました。RailsとかGrailsだとかSeasar2とかにも似たのがありますね。それです。やり方はXMLで定義する方法と、Javaのクラスに対してアノテーションを設定する方法がありますが、まずはXML…

Spring Data JPA で遊んでみる まとめ

いろいろ紹介してきましたが、全部以下に書いてあるので、ざっと目を通すといいかなぁと思います。http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/#repositories.custom-implementations色々触ってみた感想は、Spring で…

Spring Data JPA で遊んでみる 〜その11〜

ここまで紹介てきたクエリの発火方法で、恐らくほとんどのことができるんじゃないかと思います。ただ、どうしても自分で実装を持ちたくなるような時もあります。Spring Data JPA では定義したリポジトリのインタフェースに対し、独自の拡張クラスを作成する…

Spring Data JPA で遊んでみる 〜その9〜

昨日のSpecificationの続きでSpecificationを複数組み合わせて使う際に便利な、Specificationsというヘルパークラスが用意されている。 public class Specifications<T> implements Specification<T> { private final Specification<T> spec; private Specifications(</t></t></t>…

Spring Data JPA で遊んでみる 〜その10〜

Spring Data JPA では Querydsl なるものがサポートされています。 http://www.querydsl.com/色々機能があるみたいですが、カンタに言うとEntityクラスからAPTでメタ情報のクラスを生成して、そのクラスを利用してタイプセーフで流れるようにクエリが書ける…