2013-02-07

2012-11 今月の参考資料


Spring Data - Modern Data Access for Enterprise Java
Mark Pollack, Oliver Gierke, Thomas Risberg, Jon Brisbin, Michael Hunger
O'Reilly Media, Oct 2012
Print ISBN:978-1-4493-2395-0
Ebook ISBN:978-1-4493-2394-3
[O'Reilly] [Amazon]

これまで読んだSpring Dataに関する資料の中で、最もわかりやすく、役に立った。説明と例だけでなく、英語の文章もわかりやすい。網羅的で、Spring Dataの一般論から、JPA, MongoDB, Neo4j, Redisなどの個別のデータストアまで広く説明している。中でも、Querydslについて1章を割いて丁寧に説明している点は、他に例のない資料といえる。


2012-11-06

XML datetime and Java Date

XML Schema datetime 型の値を Java プログラムで扱う場合、どうすればよいか? 例えば、"2012-09-25T18:55:00.753-04:00" という文字列である。 

すぐに思いつくのは、java.text.SimpleDateFormat クラスだ。 このクラスは、フォーマット文字列を使って日時文字列のパターンを指定できる。 例えば、次のような具合だ。


問題は、XML Schema datetime 型(xs:datetime と表記する)と Java SimpleDateFormat ではタイムゾーンの表記が異なることである。"-04:00" と "-0400" で ':' の有無が異なり、SimpleDateFormat オブジェクトでは xs:datetime の値をパースできない。


先達の方法を検索してみると、パース前に ':' を削除する、という方法があった。さらに調べると、Java 1.5 で導入された XMLGregorianCalendar クラスがあるではないか!

以下のように、アブストラクトファクトリを使ってインスタンスを生成する。妥当な xs:datetime 型の値であれば、タイムゾーンのない短い表記でも問題なくパースできる。


さて、速度とメモリ使用量はどうだろうか?


リソース:



2012-09-25

Maven and Google Code

Maven を使い始めた。Ant と違い、依存関係を宣言的に記述するだけで、簡単にビルドできてしまう。すばらしい。必要なプラグインを正しく設定できれば。

Google Code にプロジェクトをホスティングしているが、自分の作ったアーティファクトもこのサイトにデプロイしたい。そうすれば、ちょっとした POM の記述で成果物を配布できるし、依存関係も Maven が解決してくれる。リポジトリは Subversion を使っている。

さて、先達も同様のことをやっているのを目にしているので簡単なことだと思っていたが、そうはいかなかった。Google Code のいくつかのプロジェクトの POM を参考にしたり、Google で検索してみたら、いくつかの方法が見つかった。
  • com.google.code.maven-svn-wagon:maven-svn-wagon
  • org.jvnet.wagon-svn:wagon-svn
  • org.apache.maven.wagon:wagon-webdav


サンプルの数が多かったので、まず2番目を試した。



mvn deploy を実行すると、メタデータの XML ファイルをダウンロードし始めたきり、先に進まない。Maven のサイトから Wagon を手繰り JIRA をチェックしたり、POM の記述をいろいろと変えてみたが、一向に解決しない。


続いて、1番目の方法を試す。


mvn deploy したら、以下の例外がスローされた。
Caused by: org.apache.maven.wagon.authorization.AuthorizationException: svn: Authentication required for '<https://xxx.googlecode.com:443> Google Code Subversion Repository'
認証失敗。settings.xml に指定したユーザ名とパスワードで間違いなく Google にログインできることは確認した。

この確認方法は、間違っている。なぜならば、ここで要求されるパスワードは Google アカウントのパスワードではないからだ。正しくは、Google Code のセッティングページに表示されるパスワードを使わねばならない。

さて、settings.xml でパスワードを正しく設定したら、問題なくメタデータや JAR ファイルをアップロードして、BUILD SUCCESS!


pom.xml (snippet):



setting.xml (snippet):

リソース:




2012-09-22

Chrome での SyntaxHighlighter の行番号表示

最近、Blogger (Blogspot) での SyntaxHighlighter の表示がおかしいことに気付いた。行番号が二桁以上の場合におかしくなる。どのようにおかしくなるかは、下のリンクを参照されたい。IE と Chrome とを併用しているが、IE の表示には問題がない。

下の先達の手法を取り入れて解決した。感謝。


参考:

2012-09-19

Maven in Eclipse

これまで Java プログラムの開発は Eclipse と Ant を使ってきた。Ant はすばらしいツールだが、依存するライブラリ、つまり JAR ファイルの管理が面倒だ。ビルドツールを今時の Maven に乗り換えることにした。

まずは、Maven をインストールして、Eclipse から使えるようにする。その前に、Eclipse を 3.7 Indigo から 4.2 Juno にアップグレードした。

さて、Maven 用のプラグイン m2eclipse (m2e) を以下の URL からインストールする。


Eclipse を再起動すると、以下のワーニングが...






The Maven Integration requires that Eclipse be running in a JDK,
because a number of Maven core plugins are using jars from the JDK.
Please make sure the -vm option  in eclipse.ini is pointing to a JDK and
verify that Installed JREs are also using JDK installs.


eclipse.ini の -vm オプションで JDK を指定せよとのこと。


-vm は -vmargs よりも前に指定すること、改行に注意すること。

これだけではまだ不足、Preference で Installed JREs の設定が必要である。JRE ではなく、JDK を指定すること。


次に Maven をインストールする。ZIP ファイルを解凍し、コマンドパスに bin ディレクトリを追加する。この時点での最新バージョンは 3.0.4 であった。

最後に、m2e から使う Maven を指定する。デフォルトでは Eclipse 組み込みの Maven を使うようになっている。Eclipse のメニュー Window - Preference - Maven - Installations から、インストールした Maven のパスを追加し、これを選択する。


さて、Maven の使い方をマスターしなければ。


リソース:




2012-08-30

MongoDB 2.2 released

2012-08-29 付けで MongoDB 2.2 がリリースされた。


リリースノートの変更点を見ると、Aggregation Framework と TTL Collections が新機能として加わった。前者は、MapReduce を使わずに、SQL の group by に相当する演算を行う機能。後者は、時間制約の付いたコレクション。Capped Collections は要素の数に制約を付けているが、TTL では生存時間に制限をかけられる。

認証を使っている場合はアップグレードに注意が必要とのこと。

Windows XP はサポートされなくなった。

2012-06-22

MongoDB Java Driver 2.8.0 released

2012-06-18 付けでリリースされた。




ローカルホストの mongod にアクセスする場合に、ホスト名 "localhost" を使えなかった問題 (JAVA-249) が解決している。この解決以前は、"127.0.0.1" を使わねばならなかった。