サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
yamkazu.hatenablog.com
次はメソッドの定義です。Spring Data JPA はメソッドからクエリを自動生成しますが、そのメソッド名には命名規則があります。 まず戻り値はRepositryに指定している総称型のエンティティのListか、もしくは、そのエンティティにします。Listの場合はJPAのgetResultListが、エンティティの場合はgetSingleResultが呼ばれるという感じですかね?中身見てないのでわかりませんが。定義はこんなんです。 Emp findByName(String name); List<Emp> findByDept(Dept dept); 次にメソッド名のprefixは、findBy、readBy、getByが使用出来ます。単にfind、read、getとか使えるような記述がマニュアルに書いてあったのですが、エラーになっちゃいました。ようわからん。次のメソッドはすべて同じ意
その2の続きです。 前回あった List<T> findAll(Sort sort); というSortという面白そうなのがあるので、使ってみます。基本は、Sortをnewして使うのですが、Orderクラスと絡ませたり、Stringでプロパティで食わせたりと、幾つかアプローチがあるので、掻い摘んで紹介します。 まず基本。 @Test public void findAll_初めてのソート() throws Exception { // 一番シンプルなやり方 List<Emp> emps = repository.findAll(new Sort(ASC, "name")); assertThat(emps.size(), is(not(equalTo(0)))); for (int i = 0; i < emps.size() - 1; i++) { if (emps.get(i).getN
※この記事はGrails 2.4.3を元に記述しています Grails 2.4からdoWithSpring、doWithConfigといったユニットテストの仕組みが導入された。 これを使うとユニットテスト内でSpringビーンを定義したり、コンフィグの値を変更したりできる。 doWithSpring、doWithConfigの使い方 まずは実際の使用例から。 import grails.test.mixin.TestMixin import grails.test.mixin.support.GrailsUnitTestMixin import spock.lang.Specification @TestMixin(GrailsUnitTestMixin) class DoWithSpringDoWithConfigSpec extends Specification { static d
※この記事はGrails 2.4.2をベースに記述しています 一見簡単にみえるが、意外と奥が深い。 次のようなドメインクラスがあったとする。 class Person { String username static constraints = { username unique: true } } この時、デフォルトのスキャフォルドは次のようなコントローラを生成する。 @Transactional(readOnly = true) class PersonController { ... @Transactional def save(Person personInstance) { if (personInstance == null) { notFound() return } if (personInstance.hasErrors()) { respond personInsta
この記事は毎年恒例の G* Advent Calendar 2013 の1日目の記事です。1日目担当のyamakzuです。こんにちは。 今日は、先月10月頭にリリースしたGaidenについて紹介します。 GaidenはGroovy製の軽量ドキュメンテーションツールです。 この手のドキュメンテーションツールではSphinxやAsciiDocが有名ですが、ちょっとしたドキュメントを記述するには少し大きすぎるツールに感じるときがあります。 Gaidenはもっと簡単に気軽にドキュメントを記述できるようなツールを目指しています。 シンタックスにはMarkdownを採用しています。 Markdownでさっと書いて、ドキュメントを生成できる。そんなツールです。 とかいう表向きのセールストークはありますが、正直なところはGroovy使いとしてG製なツールが欲しかっただけです。 開発は主に@gantawit
3.1からProfileという仕組みを使ってBeanの定義を簡単に切り替えられました。RailsとかGrailsだとかSeasar2とかにも似たのがありますね。それです。 やり方はXMLで定義する方法と、Javaのクラスに対してアノテーションを設定する方法がありますが、まずはXMLの方から見ていきます。 <?xml version="1.0" encoding="UTF-8" standalone="no"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http:
パスワードをハッシュで保存して置くのは当たり前ですが、レインボーテーブル使用した総当たり探索の対策として、ソルトとストレッチングを組み合わせ、より安全にパスワードを保存するのが一般的になってきました。 GrailsのSpring Security Core PluginはデフォルトではSHA-256のハッシュでパスワードを保存しますが、ソルトやストレッチングは使用されていません。しかし、そこは認証のデパートSpring Security、ソルトとストレッチングのサポートが組み込まれています。 まずはソルトのサポートから見て行きましょう。 usernameをソルトとする usernameをソルトとして扱うにはConfig.groovyに以下の設定を追加します。 grails.plugins.springsecurity.dao.reflectionSaltSourceProperty = '
DataSource.groovyでloggingSqlをtrue、formatもしたい場合はformatSqlをtrueに。 dataSource { ... loggingSql = true formatSql = true } おなじDataSource.groovyで hibernate { show_sql = true format_sql = true ... } としても同じ。 こんな感じで出る。 grails> Hibernate: select this_.id as id0_0_, this_.version as version0_0_, this_.bar as bar0_0_, this_.foo as foo0_0_, this_.hoge as hoge0_0_ from hoge this_ limit ? grails> Hibernate: sele
Struts1のEOLがアナウンスされました。 最後のリリースから長く時間が経過しており、実質開発は終了している状態でしたが、このタイミングでのアナウンスとなりました。 アナウンスの中では、次の乗り換え先として、Struts2・Spring Web MVC・Grails・Stripesといったフレームワークがお薦めされていますが、私はダンチな生産性を提供するGrailsをお勧めします。 私のフレームワーク遍歴は、Struts1、Wicket、Seasar2、Springと色々渡り歩いてきましたが、ここ1年はがっつり業務でGrailsを使用しています。 1年がっつり使ってみた経験から、Struts1ユーザにGrailsをお勧めする理由をいくつか考えてみました。 Grailsは既存Javaフレームワークの延長線上にある Grailsを支える基盤は、Spring・Hibernateといった、Ja
GradleのプロジェクトでGroovy Consoleを起動できると、gradleプロジェクトで依存するライブラリとプロダクトコードをクラスパスにロードした状態で、ちょっとしたコードの動作を試せるようになる。 build.gradleに以下を追加してgradle consoleを実行する。 task console(dependsOn: 'classes', type: JavaExec) { main = 'groovy.ui.Console' classpath = sourceSets.test.runtimeClasspath } classpathはsourceSets.main.runtimeClasspathでも問題ないが、testにしておくとtestスコープにspockなどを含んでおき、spockを使用して動作確認をしたい場合に都合が良い。 参考: http://pira
元ネタ Grailsではgrails-app/serviceディレクトリ配下などにクラスを置くと自動的にSpringのbeanとして認識されますが、src/groovyやsrc/javaといったディレクトリでは自動的にはbeanとして登録されません。 src/groovy、src/java配下のクラスをbeanとして登録したい場合はSpring Bean DSLを使用して登録することができますが、もう一つの方法としてSpringのcomponent-scanを使用する方法がGrailsでも提供されています。 component-scanを使用すると指定したパッケージ配下のクラスに対してアノテーションベースでbean登録ができるようになります。 設定の準備 Grailsでcomponent-scanを使用するにはConfig.groovyでgrails.spring.bean.package
G* Advent Calendar 2012 12日目担当のyamkazuです。こんにちは。 今日はみんな大好きSpockでビルトインされている機能拡張について、いくつかピックアップして紹介します。機能拡張にカテゴライズされないものもあるかもしれませんが、その辺はゆるやかに。 また、この記事はSpock0.7を元に記述していますが、バージョンが変わるとアノテーションが存在しないとかありますので、新しいバージョンが出た場合はそのへんを注意してお読みください。 それではさっそく。 @Ignore これは説明不要だと思いますが、Ignoreを付与すると指定したフィーチャの実行がスキップされます。アノテーションに理由を書くような使い方もできます。 @Ignore def "xxx"() { expect: true } @Ignore('hogehogeのため') def "yyy"() { e
いまだにprintfデバッグを卒業出来ません。 そんなことはどうでもよくてリモートデバッグしてみる。山本さんの http://d.hatena.ne.jp/mottsnite/20120705/1341495778 に書いてあるとおり2.1からデバッグする際は-debugオプションを使ったほうが良いとのこと。 そもそもIntellijからデバック起動すればいいじゃんって話はあるけど、IDE上からgrailsコマンド実行するとすごい動作が遅いし、操作性もあまり良くなく、結構つらいのでコマンドラインでgrailsコマンド使いつつIntellijでリモートデバッグするという方法を試してみる。 debugオプションの使い方は以下の様な感じ。 grails -debug grails -debug run-app grails -debug test-app インタラクティブモードでも問題ありません
元ネタ http://burtbeckwith.com/blog/?p=1604 grailsでSQLを出力する方法は2通りあってDataSource.groovyで dataSource { ... logSql = true } とするか、Config.groovyで log4j = { ... debug 'org.hibernate.SQL' } とするか。前者は標準出力で、後者はログとして出力される。これで出力されるSQLにパラメータは出力されない。 以下の様な感じ。 insert into book (id, version, title) values (null, ?, ?) 今までパラメータまで出力する場合は、後者のログの出力レベルを変更してやる方法でorg.hibernate.typeパッケージをtraceとして方法でやっていた。 log4j = { ... trace
Spock0.7でStubを作る機能が追加されました。 http://docs.spockframework.org/en/latest/interaction_based_testing.html#stubs Mockとの違いはデフォルトで返す値が違うとのこと。mockはnullを返しますがstubでは プリミティブ型以外の数字系は0 デフォルトコンストラクタを持つクラスの場合はそのインスタンス デフォルトコンストラクタを持たないクラスや、インタフェースなどはそのスタブ といった感じ。どんな値を返すかはorg.spockframework.mock.EmptyOrDummyResponseで定義されている。すごく小さいクラスなので、ざっとみるだけでもどんな動作をするのかわかると思う。 あとorg.spockframework.smoke.mock.StubDefaultResponses
前回の続き Database Migration Pluginのすごいところはロールバックが出来る事。ロールバックを行うコマンドは主に3つ種類がある。 dbm-rollback-count dbm-rollback-to-date dbm-rollback それぞれ個別に見ていく。 dbm-rollback-count dbm-rollback-countは指定した数分の変更履歴をロールバックするコマンド。例えばdatabasechangelogの状態が以下のようになっていたとする。 devDb=> select * from databasechangelog; id | author | filename | dateexecuted | orderexecuted | exectype | md5sum | description | comments | tag | liquiba
ずっと放置していたけどDatabase Migration Pluginを触ってみた。 やばい。これは使わないと。 実際にアプリケーションを作りながら説明してく。とりあえずプロジェクトを作成。 $ grails create-app database-migration-test 作成したらBuildConfig.groovyを覗いてみる。 plugins { ... runtime ":database-migration:1.1" ... } database-migrationがデフォルトで入っているのがわかる。今回はDatabaseにPostgreSQLを使用するのでdependencyに依存関係を追加。 dependencies { .... runtime 'postgresql:postgresql:9.1-901.jdbc4' } 次にDataSource.groovyを編
http://d.hatena.ne.jp/y_sumida/20120805/1344134360 をみてて~/.MacOSX/environment.plistでグローバルに設定できたよなと思いつつ、ローカルの環境を確認してみるとうまく動いていない... Mountain Lion以前までは以下の方法で回避していたのですが https://blogs.oracle.com/katakai/entry/netbeans_and_java_for_mac2 どうもMountain Lionからは~/.MacOSX/environment.plistを広なくなった模様(前からサポート停止されてた?)。いろいろぐぐってみると/etc/launchd.confに書けとのこと。 デフォルトではファイルすら存在しないので、ファイルを作ってOS再起動。 setenv JAVA_HOME /Librar
http://grails.org/plugin/cache がgrails 2.1からデフォルトでインストールされています。実態としてはSpringのCache Abstractionを薄くラップしたような形です。Serviceのメソッドや、Controller、またはGSPのレンダリングをキャッシュできます。 メソッドに付与する使い方は非常にシンプルで、grails.plugin.cacheパッケージにある以下の3つのアノテーションを使用します。 @Cacheable @CacheEvict @CachePut それぞれ個別に見ていきます。 @Cacheable このアノテーションを付与するとメソッドの戻り値をキャッシュします。例えば以下のような形です。 class BookService { @Cacheable('books') Book get(id) { Book.get(id
デフォルトだとtest-appした際に標準出力は、どこかいずこへもっていかれコンソールに表示されません。ちょっとした機能確認の為にUnitTestを使って学習テストなどやっていると、ついついprint使いたくなってしまうのですが、なぜかコンソールに出力してくれないため、毎回テストレーポートを開いて確認してました。 不便だなーと思っていたら http://d.hatena.ne.jp/mottsnite/20091204/1259944836 によると-echoOut 、-echoErrというオプションがあり、これをつけると、標準出力と、標準エラーをコンソールに出してくれるみたいです。 grails test-app -echoOut -echoErr どうも1.2のリリースノート http://www.grails.org/1.2+Release+Notes ぐらいにしか記述を見つけられな
ドキュメントのあたまを少しだけ訳してみた。 ほとんどグーグル先生頼り。 元ネタ: http://docs.jboss.org/netty/3.2/guide/html_single/index.html#preface The Problem 今日では、相互に通信するために汎用的なアプリケーションやライブラリを使用します。例えば、Webサーバから情報を取得するためにHTTPクライアントライブラリを使用して、Webサービスに対してリモートプロシージャコールを実施するといったものです。 しかし、汎用のプロトコルやその実装は、時にはうまくスケールしません。巨大なファイル、電子メール、または金融情報やマルチプレーヤーゲームのデータなど、ほぼリアルタイムでメッセージを交換するために、汎用的なHTTPサーバーを使用しない理由はそこです。何が必要なのでしょうか?それは、特別な目的のために高度に最適化され
SpringとHibernateの組み合わせで、データベースにH2を使用してインメモリDBで開発するとかなり便利です。ただインメモリは便利なもののどうしても直接DBのコンソールを触りたくなる時があります。そんなときはH2のWebServerを一緒に起動しておくといいです。 Springを使用している場合は以下の設定を追加するだけ。 <bean id="H2WebServer" class="org.h2.tools.Server" factory-method="createWebServer" init-method="start" destroy-method="stop"> <constructor-arg value="-web,-webAllowOthers,true,-webPort,8082" /> </bean> 普通にアプリ起動してhttp://localhost:808
3.0 から Javaconfig という XML でなく Java のコードで Spring の設定が記述できる機能が追加されていましたが、この機能が Test でも使えるようになりました。 従来 3.0 のテストケースは @ContextConfiguration を使用してこんな定義をしていました。 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "/META-INF/spring/*.xml") public class AccountRepositoryTest { 3.1 からは AnnotationConfigContextLoader を指定すると Javaconfig をロード可能なります。面白いのは内部クラスで @Configuration が付いているものを自動でロード
Specificationの話です。 SpecificationはDDDのパターンの一つですが、JPA2から導入されたCriteriaを利用して、Spring Data JPAではSpecificationパターンみたいなことが出来ます。 Specificationを使用するにはリポジトリの定義でJpaSpecificationExecutorを継承する必要があります。 public interface EmpRepository extends JpaRepository<Emp, Long>, JpaSpecificationExecutor<Emp> { //.. JpaSpecificationExecutorに定義されているメソッドは以下のようなもの。 T findOne(Specification<T> spec); List<T> findAll(Specification<
あまり誰も喋らないだろうなぁというところを探してネタにしてみました。 相変わらず外でしゃべることには慣れておらず、途中で何か桜庭さんに突っ込まれた気がするのですが(Throwable#addSuppressedあたり?)、緊張のあまり記憶がありません... とありあえず資料公開しときます! Project Coinより小さなCoinView more presentations from Kazuki YAMAMOTO. 寺田さんをはじめ、みなさまおつかれさまでした!
m2eの動作に色々泣かされることもありますが、このInsertなんちゃら系はすごい便利。 mavenでdependency追加するときはいつもhttp://mvnrepository.com/で検索してコピペとかしてたんですが、それが要らなくなった感じです。 元ネタ: http://www.sonatype.com/people/2011/01/inserting-artifacts-in-the-m2eclipse-pom-editor/ pom.xml上でctrl+spaceでInsert dependency なんか出てくるので、ほしいやつ入れるとインクリメントサーチされる。 ほしいバージョンを選択してOKを選ぶと入力される。 これは素晴らしい。いつからあったんだろう?
Mylynが新しくなってHudson/Jenkins Connectorなるものが登場しました。 http://www.infoq.com/jp/news/2011/03/eclipse-mylyn http://www.eclipse.org/mylyn/new/#hudson Eclipseからビルドのステータスを確認出来たり、通知してくれたり、テストの結果が普通のJUnitの結果のように参照出来たり、実行ログまでみれたりと、だいたい出来ます。 インストールはhttp://download.eclipse.org/mylyn/releases/latest/をアップデートサイトに追加してMylyn IntegrationsのMylyn Builds Connector: Hudson/Jenkinsを選択してインストール出来ました。 ※インストールしたあとにキャプチャしたから白抜きアイ
元ネタ http://ducquoc.wordpress.com/2010/11/06/eclipse-wtp-tomcat-hot-deploy/ EclipseでWebプロジェクトを作るときはWTPを使っています。tomcatプラグインなんてのもありますが、mavenでのライブラリ管理と相性がイマイチなので最近はもっぱらWTPです。 んでデフォルトままWTPにアプリケーションデプロイすると、tomcatのserver.xmlに <Context docBase="appname" path="/appname" reloadable="true" source="org.eclipse.jst.j2ee.server:network-application"/></Host> のような設定でデプロイされます。reloadable="true"とかあるのでクラスファイルに変更があったりす
次のページ
このページを最初にブックマークしてみませんか?
『Yamkazu's Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く