著作一覧 |
著者の橋本さんからJRuby on Railsシステム構築入門を頂きました(謝辞のところを見ると僕の名前が出ているので、まあそういうことです)。
JRuby on Railsシステム構築入門 (DB Magazine SELECTION)(橋本 吉治)
この本は、チュートリアル形式による、JRuby on Railsの解説書です。
題材は蔵書管理アプリケーションで、蔵書の書影のドラッグアンドドロップで状態を変えるUIを使うところが見た目上のミソになっています。が、本書の特徴は後半からでしょう(前半はActiveRecoredの説明が詳しい)。
たとえば、第9章は「Railsにおける他システム連携」で、バッチ連携(ファイル連携とDB連携)の説明から、リアルタイム連携に進んで、リアルタイム連携を同期型で実現する方法(内部はRPC形式としてCORBAからSOAPまでと、リソース指向としてREST)、非同期型としてMOM連携までの各アーキテクチャの図説と、ではRailsではどれが向いているのか(当然、バッチ連携はここで落ちることになる)といった内容となっています。
そこから先の章では、10章がEJBとの連携(別に存在するアプリケーションサーバへJRuby on Railsからインタラクトする)、11章がSOAPとMOMを利用したアプリケーションサーバ連携、12章がRESTfulサービスとしてJRuby on Railsを構成してクライアントと連携する方法、13章がデプロイ方法でwarblerを利用したwarの作成方法がメインのトピックといった具合です。
また、本書の特徴として、開発の部分(サンプルプログラムの実行ということになる)がNetBeansで行われていることが挙げられます。
本書の対象読者は、帯の「既存のJava資産を活かしながら企業システムの開発でRailsを使おう!」に端的に示されていますが、SIerや企業情報システム部門のアーキテクチャ決定者、システムの仕様検討者が主となると思います(DBもOracleを利用するように書かれています)。
というのは多くの説明に図を使うことで、JRuby on Railsがどういう仕組みでどうシステムに組み込まれるのかがわかりやすく説明されているからです。すいすい読めて、ああ、こういうものなのか、と理解するのは容易です。逆に、本書を片手にバリバリ実装できるかというと詳細のところでちょっと困るかも知れません(が、Javaの既存資産とインタラクトすれば良いから問題ないという言い方もできそう)。
そのほかGAE/Jについてもちょっと触れていたり(ちょっとの先の部分は参考文献へ飛ぶことになるが、参考文献の1/3はURLなところが現実的な感じがする。本が62冊並んでいても、本書のターゲット読者がそれをすべて参照するのは無理だろう)目配せもきいています。
あと、ちょっとびっくりというか、2ページに及ぶ推薦の言葉を書いているのが、Thomas E. Enebo。お前、読まずに推薦しているだろうとは思うけれど(そこは素直に、Rubyは良い言語で、JRubyは本当におもしろいから、みんなばりばり使ってくれよ、こういう本が出るのは良いことだ、という書き方をしている)、JRubyチームのThomasとしては、JRubyを使え本は、そりゃ推薦の対象となるだろうな。
おもしろいのは良いが、なぜだ? Float problem
irb# VERSION => "1.8.6" RUBY_RELEASE_DATE => "2007-09-24" RUBY_PLATFORM => "i486-linux" 1.1.to_s => "1.1" require 'rubygems' require 'rjb' => true 1.1.to_s => "1.1" Rjb::import("java.io.FileNotFoundException") 1.1.to_s => "1.1" Rjb::import("Java.io.FileNotFoundExecption") 1.1.to_s => "1,1"
2回importしているのが原因か、というより先にJavaはよいとして、Ruby1.8のFloat#to_sはロケールを意識しているんだっけ?
I'm on a French linux, and in french we puts comma to split decimal.
でも、最初のFloat#to_sはデシマルポイントは'.'なんだよな。
import2回ではなく(それはコピペミス)、JVMがロードされるとロケールが変わるということなのかなぁ。
ジェズイットを見習え |
sprintf(3)の実装依存かつruby自身がロケールをセットしたりすることもないので、拡張ライブラリでロケールをセットされると影響されます。gtkあたりでもそういう話があったような。
なるほど。すると、Rjbでどうこうするより、Rjb経由でJVMを操作してもらう方向かな。
と思ったらRjbの中でsetlocale(LC_ALL, "");とやっていたのが原因だった(らしい)。setlocale(LC_ALL, "C");とすれば直るよ、と報告者が教えてくれていた。