Spring勉強会に行ってきました。

SpringJDBC、SpringJPA

SpringJDBC

TemplateクラスとSupportクラスというのを使う。
Templateはデータソースをプロパティにセットしてくれて、
プログラマ的にはSupportクラスを使えば、Templateを扱うのが簡単になる。
(らしい。こればっかりはやってみないとわかりません)
トランザクションは設定ファイルのみの制御でできるし、
型のキャストもいい感じにやってくれるっぽい。


SpringがJDBCのコードをどう扱っているのかが気になりました。
フェッチのサイズ変えられるようなインタフェースがあるのか、とか。
カーソル開きっぱなしで1件1件フェッチしたりできるのか、とか。


個人的にはSQLはバンバン書きたい派なので。
こういうのもあるんだな〜といった印象。

SpringJPA

JPA自体はJavaEEの標準仕様。
EJB3.0の一部だが、コンテナがなくてもJPAは動かせる、
っていうので勉強しようかなと思ってたもの。
(2年目の頃やってた案件で、コンテナにデプロイする時は、
近所のカフェにお茶しに行ったりしてました。。)


扱うものは基本的に以下の3つ。
・永続化対象オブジェクト(Entity)
・↑を管理するクラス(EntityManager)
・↑の動きを定義する(persistence.xml)


JPAもそれをそのまま使うのではなく、
Springがいい感じに吸収してくれて。
これもTemplateとSupportクラスを使う感じ。

その他

1対Nがどうたらこうたらでレイジーロードが〜っていうのがよくわからず。
話についていけなかった。何やら画面に表示する際に、
ServletのFilterを使ってあーだこーだっていう話らしい。
そういえば前にS2のカンファレンスに行った時もそんな話題が出てた。

ライトニングトーク

SpringExperienceに行ってきたよ

SpringExperienceというアメリカで開催された
Springフレームワークに関するカンファレンスに行ってきたという話。


参加者は700人くらいだったそう。
Spring単体の講演だけではなく、
Hibernateの人や、Sunの人とかの講演もあったそうだ。
世界中からいろんな人が来ていたらしい。


世界のGeekの中では、
"日本=Ruby"というイメージらしい。


海外行くときはRubyを勉強してから行くようにした方が
よいかもしれません。


JDBCのコードを新人に教えるより、
iBATISを教えた方がいいんじゃないか?
なんていう小話も。

Google Guice

Googleが作ったDIコンテナである、Google Guice(ジュース)の話。
とにかく型付けにこだわりがあるらしく。
全てがソースコードアノテーションでできている。(XMLファイルはなし)
AOPアライアンスに準拠。

インジェクションする時は@injectionっていうアノテーション
バインドするときはbind(Hoge.class).to(Hage.class)って感じでHogeをHageにバインド
でもってIngector.getInstance(Hoge.class)って感じでHogeインスタンスを取得

こんな流れみたい。


大人数で固い開発をするために、とにかくタイプセーフで。
そんなノリらしい。

SpringでDAO

SpringでS2DAOを動かす〜なんていう試み。
使ったことがないのでよくわからないが、
Hibernateよりも、S2DAOはいろんなところで
開発者に優しい工夫がされているようだ。


EasyMockを使った、実際データベースにアクセスせずに
モックを使ってDBアクセスまわりの自動テストをやろうというデモ。


大規模な開発になると、ビジネスロジックを書く人と、
データアクセスまわりを書く人がわかれるらしい。


デーアクセスまわりができてないから、
ビジネスロジックが書けませんでしたっていう、
チーム間の依存性を下げたり、
あとは、全ての自動テストを流す際に、
非常に時間がかかるので、現場でそういう工夫をしている、と。


自分が今までやってきた開発は、
機能ごとに人がアサインされていたので、あまりイメージ湧かず。
ビジネスロジックわかってないやつに、SQL書けるのか?とか。
それこそ一発のSQLで取ってこれるのに、
設計書に2回クエリ投げるって書いてあったら、
そうしなきゃイケなくなっちゃうんじゃないか?とか思ったり。


O/Rマッパーを使って、大きなテーブルから全レコードを取ってくる際に、
Finderで大きなListオブジェクトを扱うことになり、
OutOfMemoryエラーが出てしまうのを回避するために、
Iteratorというメソッドを使いましょうといったTipsの紹介も。


他には、MySQLではPreparedStatementが使用できず、
SQLインジェクションに注意が必要なんていう話もありました。

感想

すごい時代に取り残されているような感じがしました。
参加している人達が実感を持って、
質問したり、それにうなずいたりしているところに、
結構ポカーンとしてしまいました。


JNDIからデータソースひっぱってきたり、
ResultSetMetaDataを使って、
カラムの名前で取ってきたデータをコレクションにつっこんだり、
トランザクションの管理をフレームワークの中に隠蔽したり、
そういう実装を今までしたことがあるので、
どこら辺が便利で、どういう実装になっているかは大体把握できたが、
なかなか敷居は高いんじゃないかと思いました。


ゴールデンウィークあたりで1回動くもの作って、
次の勉強会も出てみたいなと思いました。