2009/10ぼちぼちやります。ネタを中心にぼちぼち書いてます。近い人はご存知と思いますが、ワタクシは紙が大っ嫌いです。起業してからというもの、すっかり役所周りの紙で埋もれてしまっています。ペーパーレスと言われて久しいですが、減るどころか世界の紙の需要は増えるばかり。謄本とかオンラインで取得できるんですが、届くのは紙が郵送で送られてきます。登記するときも電子認証できるんですが、結局1部は紙の定款を残すことになります。必要な紙とそうでない紙があると思いますが、特に役所周りでペーパーレス化が進むことを切に望みます。良い内容でごめんなさい。Beansが改名されました。http://www.seamframework.org/Weldで、1.0.0.CR1がリリースされました。名前変わっちゃうと翻訳大変そうです・・・。Weldって溶接とか密着とか。してもSeamじゃ駄目なんだね。お試し前から気になってたので、今更ですが試してみました。小規模ならギリギリ・・・・セーフ?中規模以上ならLarge以上のスペックにしないと厳しい。2m:9s:265msだったので、一応は我慢できるレベル。これもLargeにすれば問題無さそう。他の人も書いてるけど、画像とかを国内サーバーに置けば我慢できるかも?安いのは安いと思うけど、やっぱり「うーん」となってしまう感じ。Sunのクラウドが気になるところ。新しいノートに環境作成をしていて丁度良かったので、今日は、Railsの環境作成について書いてみようかと。自分のためのメモなのであしからず。Installerをダウンロード&インストールする。RubyGemsを一緒に入れるのを忘れないように。1.8.6かぁ・・・・まぁいっか。updateで、構成をバージョンアップしてから、Railsを入れる。1.2.3′として完了。SQLiteのDLLを別途落としてRubyのパスに突っ込んでおきます。Installerには余計なものがたくさん入ってる・・・・まぁいっか。動作確認だけしておこう。script/serverで、Bookmarkプログラムのインストールが完了。最後に、開発環境としてNetBeansを入れます。Ruby版でオーケー。Javaとは違ってWindows上で検証したものが本番環境(Linuxとかの別OSのサーバー)上で同じように動くかどうかは別問題なので、注意。Railsauthenticatorさて、もうひとつ早めに説明しておいた方が良いですかね。苦笑Seam標準のログイン認証機能の説明です。false;}}Seamコンポート名として、authenticatorが宣言されていますので、JSF等からこのインスタンス名でアクセスされます。実行し、戻り値がtrueであればログイン成功だよ、という事です。ツꀀUsernameの値が「admin」だったらログイン成功・・・・なるほど。wまぁ、そんなわけで実際の開発時にはこのauthenticate()をカスタマイズするだけで、DBと普通に認証しても良いし、LDAPと認証しても良いし、ActiveDirectoryと認証しても良いし、という具合になります。Droolsを使ってロールの概念を持たせると権限の概念の定義も可能です。(そこまで書く元気があるのかしら)login.xhtmlやmenu.xhtmlを見るとログインしているかどうかで表示を分けていたりするので、参考にしてください。フレームワークとしてログインしているかどうかというのがちゃんと認識されていますので、特定のメソッドをログインしてなかったら実行できないようにする、というような事がアノテーション一行で定義可能です。これもどこかで説明したいと思います。最後に、恒例(うそ)のアノテーション解説して終わります。ステートレスセッションBeanであることを示します。ちなみに、SeamでステートレスセッションBeanを使うのは一般的にはログイン画面と(層を作りたい場合に)純粋なDAOを作るような場合くらいですかね。通常ステートフルセッションBeanを使うことになります。org.jboss.seam.log.Logのインスタンスを使います。これを書いておくと、Log4Jを使うときの非常に冗長なif文を書かなくてもSeamがよしなにしてくれることになっています。画面からの値をクラスの属性で受け取るのに使います。ログイン画面の例なので最初はしんどいかもしれませんが、logins.xhtmlと見比べれば分かると思います。Seamgenerate-entitiesにより作られたクラス2続いて、C:\Projects\myproject\src\hot\com\mydomain\myproject\action\MyprojectList.javaこれは所謂セッションBeanに相当するものです。MyprojectはエンティティBeanだったので、これに対するビジネスロジックを定義する場所と考えてください。相当するものと書いたのは、EntityQueryを継承してしまうことで、一般的なセッションBeanの書き方とは異なるから。セッションBeanを使う場合は、EntityManagerに関する記述を書いたり、セッションBeanであることを宣言したりすることが必要。myproject;}}ここでもアノテーションが出てくるので、簡単に。これはSeamアノテーションで、Seamコンポート名というのを指定します。書くと分からないのですが、ここで宣言した名前でJSFから直接呼び出せることになっています。要はその時のクラスのインスタンス名を書いてって事なので、普通はクラス名の先頭を小文字にしたのを書いとけば十分です。あれ?SQL変じゃね?って思った人がいるかもしれませんが、これはEJB3.0規格のEJB-QLという独自のSQL文になっています。何でそんなことを・・・と思うかもしれませんが、EJB-QLが間に挟まっているおかげで開発者はその先にあるデータベースの方言について一切意識する必要が無いのです。それは本来開発者の仕事ではなく、フレームワークの仕事だろってのがEJB3.0の思想になるわけです。#{myprojectList.myproject.val}はJSF側の該当パラメータが直接入ります。部分一致検索の条件パラメータが入ります。普段、何層にも層を作って開発をされている方には気持ち悪いですが、本来これくらいシンプルじゃないと。setMaxResults(25);は検索結果の最大件数が25行までですよ、と宣言しています。こんなこともSQLだけでやろうと思うと、あれ?このDBの場合はどうやるんだっけ?って絶対迷うので、EJB-QLの場合そういうのが無いだけで精神衛生上良いです。(EJB-QLでどう書くんだっけ?とはなるわけだけど・・・・それは仕方ない。同様にEntityQueryを継承していますが、こちらは今見てもさっぱり意味が分からないと思うので、スルーしましょう。MyprojectHomeがどのように使われているのかを見ておくと良いです。ものすごくすっきりしてますが、正直何やってるか分かんないというのが実情ではないかと。table)からgenerate-entitiesで出力されたCRUDするためのコードがどのように動いているのか、もう少し上手に説明したいところですが、余り使われてないEntityQueryのせいでちょっと分かりにくくなってしまっているんです。一通り全体が分かるようになったところでもう一度おさらいしてみて下さい。Seam2009年10月6日火曜日generate-entitiesにより作られたクラス1前回の投稿からだいぶ時間が空いてしまいました。誰も観てないからいいか。ここから先は当面ローカルホストで動かすことを前提とします。(ごめんっ)さて、generate-entitiesによりテーブルから自動的にクラスとJSFを作成して貰うことで、前回はプログラムコーディングが1行も無しでCRUDできてしまいました。RailsにしてもSeamにしてもここまでは皆さん喜ぶんですが、当然これでは仕事にはなりません。深みに嵌らないといけませんが、今回はまずgenerate-entitiesで作成されたクラスを見ていきましょう。エンティティBeanというのは、DBのテーブルとのインターフェースに使うマッピングクラスのようなものです。EJB3.0ではエンティティBeanPOJOでなければいけません。EJB3.0の事を知りたくなければこういうのを作るんだ位で読み流してよいでしょう。要はSeamで開発できるようになることが大事。注釈されたクラスがEJB3のエンティティBeanであることを示します。注釈されたエンティティBeanがDB側のテーブルに関連付けられることを示します。ここでは、public.myprojectに対するエンティティBeanであるという宣言。DBのテーブル名」と見なされます。注釈された属性がテーブルの主キーに関連付けられることを示します。基本的にはエンティティBeanに毎に1回しか使えません。エンティティBean毎に必ず一度利用しなければなりません。複数キーに対応する方法はありますが、複雑なので今は割愛します。理由が無ければ単一カラムで主キーを宣言しておいたほうが楽です。属性のゲッターに付与することもできます。注釈された属性がテーブルの項目に関連付けられることを示します。ここでは、属性idとpublic.myproject.idが関連付けられ、idはユニークで、NULLは許容されない、という意味です。テーブルの項目名」と見なされますが、実際には、どのみちnullableを書かないといけないので都度都度宣言が必要です。属性のゲッターに付与することもできます。注釈された属性がNULL許容されないことを示します。これはJPAのアノテーションではないので、Hibernate環境でなければ使えませんが、SeamにはHibernateが同梱されているのでほかの環境に乗り換える予定が無ければ付けておきます。属性のゲッターに付与することもできます。アノテーションを理解すれば何が書かれているかが何となくわかります。自動生成だけあって、いくつか問題があります。・シーケンスに対応されていない。・アノテーションが冗長でメンテしづらい。前者については問題ありありなので、解決しなければなりません。後者については、常にテーブルからエンティティBeanを作るという一方通行なら無視して良いでしょう。逆にエンティティBeanからテーブルを作るという一方通行が好みなら何とかしないと生産性に響きます。僕の場合は後者ですが、話をできるのは少し先。エンティティBeanはシンプルですが、奥が深いので都度都度追加で説明しますが、1つのテーブルにこのようなものを1つ作ることになるんだというのを今回は押さえてください。Worksというベンチャー企業の代表をやってます。JBoss関連はできるだけ新しい情報を配信したいと思ってますが、なかなか時間は無いもので。趣味はドラムとギターです。最近は、YAMAHAの赤ラベル・グリーンラベル中心にオールドギターの収集癖が止まりません。あとは、バイク弄りとか。オールドMac収集とか。髪も髭も伸び続けてます。