Date:  Wed, 28 Feb 2007 16:54:59 +0900
Subject:  【オブジェクト倶楽部: 2007-08号】
X-Mail-Count: 00183

       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
       ┃                         ■┃
      ●┃● ● オ ブ ジ ェ ク ト 倶 楽 部   ■ ┃
       ┃                       ■  ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
                          No.177 2007/02/28

■ I N D E X
┃
┣【プログラミング】Cayenne で始めるO/Rプログラミング[9]
┣【コラム】Geekのオシゴト
┗【アンケート】気になるシステム業界 ホントのところ

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━1 s t ■━
■
┗【プログラミング】Cayenne で始めるO/Rプログラミング[9]

スティーブジョブスが2/24に52歳の誕生日を迎えました。向こうの誕生日では
家族でハッピーバースディとか歌っちゃうんですかね〜。ちなみにボクも誕生
日にはハッピーバースディを歌います・・・(欧米かっ!)
それはそうと、マックワールドUKの記事[*1]で、3G版の「iPhone」を2008年1月
に発売?という噂記事が流れています。もし3G版の「iPhone」が事実だとする
と、日本での展開も現実味をおびてくるのかな?なんて思っています。

これまではCayenneを使って、ベーシックなアプリケーションが作れるような機
能を紹介してきました。しかし実際に開発で利用すると、ちょっと凝ったアプ
リケーションで関数やプロシージャを使いたかったり、パフォーマンスアップ
のためSQLを直接書かなければいけない場面に遭遇します。
そこで今回は、Cayenneを使ってこのような問題に対応する方法ついて、紹介し
たいと思います。
Cayenneでは独自のSQLを記述したい場合、以下の方法から選択することができ
ます。

1)GUIツールからSQL文を直接記述して、名前付けする
2)SQLTemplateクラスを使って、SQLを定義する
3)標準Queryクラスを継承して、差分を実装する

1)の方法は、Cayenne GUIモデラーを使った方法です。GUIモデラーで、データ
ベースを選択し、[Project]->[Create Query]を選択します。すると以下のSQL
定義を選択できます。

a)Object Select Query
b)Raw SQL
c)Stored Procedure Query

a)を選択すると、MS-ACCESSでクエリを定義するような感覚で、SQLを定義する
ことができます。検索結果として返却するのは、Cayenneで定義(管理)されて
いるテーブルとマッピングされているJavaオブジェクトです。

b)を選択すると、SQLを直接記述することができます。検索結果はテーブルとマ
ッピングされているJavaオブジェクトにもできますし、そうでなければJDBCの
ResultSetから取り出すのと同じ方法になります。どうしてもSQLをチューニン
グしなければならない場合などに役立ちます。

c)を選択すると、ストアドプロシジャを呼び出すことができます。検索結果は、
b)と同じように選択することができます。このGUIモデラーから作成したSQLを
Javaから呼び出すには、

     Map<String, String> parameters = new HashMap<String, String>();
     parameters.put("PRM_ID",   condition.getId());
     parameters.put("PRM_NAME", condition.getName());
     DataContext context = DataContext.createDataContext();
     List list = context.performQuery("mysql", parameters, true);

のように記述します。performQueryの第一引数がGUIモデラで割り当てた、SQL
定義の名前で、第二引数にパラメータをマップで指定します。検索結果がマッ
ピングされているJavaオブジェクトでない場合は、以下のようにします。

     for(Iterator it = list.iterator(); it.hasNext(); ){
         Map map = (Map)it.next();
         map.get("ARTIST_NAME");

検索結果はマップのリストで戻ります。この方法はJDBCのプログラムに近いの
で、問題ないでしょう。

2)の方法は、Javaのコードを使って、1の方法を実現すると思っておけば良いで
しょう。詳しくは下記URLの「Indirect Queries」サンプルが役に立ちます。
http://cayenne.apache.org/doc12/customizing-queries.html

3)の方法は、これまでとはちょっと趣向が異なります。1と2の方法は、チューニ
ングしたSQLを使いたい場合などに役立ちます。こういった場合は検索条件が固
定化されていると思います。しかし先ほどのURLで紹介されているCountQueryク
ラスを実装して使ってみると、Cayenneの利点がまったく使えないことに気づき
ます。ある検索条件にヒットする件数を取得したい、といった場合、検索には
Cayenneの高い検索機能を使うことができますが、同じ条件(Expression)を使っ
て件数を取得することはできません。つまり検索はExpression、件数はSQLとい
うことになり、これなら検索もSQLで良い、ということになるでしょう。

そこで標準のSelectQueryを継承して、Expressionが使えるCountQueryクラスを
作ってみたいと思います。
SelectQueryを継承して作るには、同様のQueryクラスのソースコードを読むの
が一番参考になります。

今回は紙面の都合上、どういったクラスを作るかだけ紹介し、次回に具体的な
コードの記述を紹介したいと思います。
・CayenneのSelectQueryを継承した、CustomQueryクラス
・CayenneのSelectActionクラスを継承した、CustomSelectActionクラス
・CayenneのSelectTranslatorクラスを継承した、CustomSelectTranslatorクラス
・CustomQueryクラスを継承した、CountQueryクラス

上記の3クラスはCustomという名称であらわすとおり、CountQuery以外にも、
SumQueryなどを作りたい場合に有効となります。
次回までに時間がありますので、Cayenneのベースクラスである、SelectQuery、
SelectAction、SelectTranslatorのコードを読んでおくと役に立ちますのでオ
ススメします。(きしだ)

[1]以下のURLを参照ください。
http://www.macworld.co.uk/news/index.cfm?RSS&newsID=17320
でも噂の元がAppleInisderですので、真偽のほどは・・・・
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E010-8&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E010-8&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E010-8&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2 n d ■━
■
┗【コラム】Geekのオシゴト

こんにちは、オブジェクト倶楽部の炭水化物、やっとむです。
炭水化物は命の元!食えば主食で使ってエナジー、貯まると下腹部体脂肪。
やっとむイロイロお仕事するけど、燃えてこなしてなんぼのもんです。

いきなりごめんなさい!本日はPythonの話じゃありません。岸田さんの連載と
「言語の記事が2つかぶるとアレだよね」という恐ーい編集人の命令一下、急遽
レポートに変えねばならぬ!書かねばならぬ!なさねばならぬ、なにごとも!

なんのレポートかと言いますと、海外のお話です。米国は西海岸であります。
偉い人のお供でシリコンバレーに行ってきたのであります。と言ってもあくま
でお仕事でありますので、その話を書き立ててもつまらんのであります。そこ
で、現地でお会いした有名人とその著書のお話をいたしますのであります。

Geek Salon、そういうイベントに参加させていただきました。直訳すれば「オ
タクの集い」ですが、日本人で、日本からシリコンバレーに行って仕事をして
いるエンジニアの集りです。アメリカ語のgeekは「すごい専門技能を持ってる
有能な人」的なニュアンスが強いそうですよ(特にシリコンバレーでは。使え
ないほうのオタクはnerd)。

主催はブログ「On Off and Beyond」[*1]や「ヒューマン2.0」[*2]でも有名な
渡辺千賀さん。日本人や日本企業がシリコンバレーでもっと活躍できるような
支援をされています[*3]。デブ猫(失礼な!)ムスビちゃん[*4]の飼い主でもあ
らせられます。

印象的だったのは、参加した技術者(geek!)のみなさんが、おしゃべりなこと。
今回のテーマは「Rubyのまつもろゆきひろさんを囲もう」だったのですが、参
加者みんなしゃべりたくってうずうずしている、感じ。日本では「理屈っぽく
て議論好きだと煙たがられていた」という人が、シリコンバレーではごく普通
の人になってしまうそうな。みんなそうだから。

煙たがられなくてつまんない、という説もあるかもしれないけど、濃ゆい突っ
込んだ議論にまわりがみんな付き合ってくれる環境ってちょっとすごくない?
「みんな」というのがポイントで、シリコンバレーの労働人口の3分の1がエン
ジニアだそうです。会社でもレストランでもパーティーでも、大体みんな技術
話で盛り上がってるとか。

渡辺さんの本やブログを読んでいると、

・技術が好きで好きで好きで大好きで、かつ優秀
・まとわりつく人間関係や逃れられぬしがらみが嫌い
・自信過剰。リスクテイカー。自己主張が強い。
・いままでの生活をひっくり返せる
・田舎暮らしもけっこういいかも?って思う

ような人がシリコンバレーに行くと、幸せになっていい仕事もできるような気
がします。そもそも、技術者が一番高級で高給な職種だという。エンジニアが
一番エライんですって。日本ではありえないよね。仕事の能率と人生の品質を
高めるための「究極のライフハック」として、あなたもおひとついかが?

あ、でもイロイロと落とし穴、というか、やっぱ大変だったりすることもあるっ
ぽいのでお気をつけて。そのあたりのいいことやら(新卒年収750万円から。経
験者なら軽く1500万円とか)よろしくないことやら(ひとつの会社に平均3年未満。
レイオフも突然やってくる。つねに職探しに備えよう)は、今回ご紹介の
「ヒューマン2.0」でビシシと押さえられてるのでさあ読んでみよう!ブログに
はさらにこまごました生活感あふれるネタが載ってるので面白いよ!
(ビジネスのレポートやシリコンバレーの時事ネタも載ってて勉強になります。
念のため。)

シリコンバレーのエンジニアたち、その人々の仕事ぶりを知ることで、翻って
自分の仕事ぶりはどうか、日本の業界はどうなのか見比べてみると、新たな発
見があるかもしれません。そう考えたときに、自分はどこで仕事をしたいのか、
突き詰めるとなにをしたいのか ― 見直すきっかけにも、なるかもしれません。
(やっとむ)

[1] http://www.chikawatanabe.com/
[2] http://www.amazon.co.jp/dp/4022731222/xpjp-22
[3] http://www.jtpa.org/
[4] http://www.chikawatanabe.com/blog/2007/02/post.html
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=H003-24&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=H003-24&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=H003-24&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━3 r d ■━
■
┗【アンケート】気になるシステム業界 ホントのところ

今週は「海外で仕事したいですか?」のホントのところ。今週のやっとむの記
事をきっかけに、かつては「海外で仕事するのも良いな・・・。」と思ってい
たことを思い出しました。みなさんはどうですか?

  絶対にいや!
     http://www.ObjectClub.jp/special/kininaru/vote?vol=143&choice=0
  お給料が上がるなら。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=143&choice=1
  国によっては。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=143&choice=2
  家族や大切な人と一緒なら。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=143&choice=3
  ひとりで行けるなら。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=143&choice=4
  やってみたい仕事ができるなら。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=143&choice=5
  日本語で仕事ができるなら。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=143&choice=6
  帰国後の心配がないなら。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=143&choice=7
  もちろん行くさ!
     http://www.ObjectClub.jp/special/kininaru/vote?vol=143&choice=8
  それは秘密です。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=143&choice=9
  ちょっと語らせて!
     詳細をこのメールに返信ください!!

アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「普段やっている会議のなかで、一番困ることは?」の結果は公開
中。ぜひご覧下さい。
⇒http://www.ObjectClub.jp/special/kininaru/vol142/PlonePopoll_results2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
■
┗編集後記

こんにちは、編集人です。オブジェクト倶楽部ではファッション業界のごとく、
すでに春イベントや夏イベントの話が出ています。今年もやりますよ!
このコーナーではどこよりも最新の情報を数少ない編集後記ファン爐世鵜瓩
お届けします。またまたどうぞよろしくなのです!
ちなみに3月28日(水)の夜には何かが起こるかも!ふふっ。

今週の強引な一言
*** 鳥無き里の蝙蝠(ことわざ)***
鳥がいない所では、空を飛べる蝙蝠が威張るという意味で、優れた者がいない
所では、つまらない者が幅を利かすということのたとえ。会社の外に出てみな
いと出会えない人がいます。コミュニティーに来てみないと、自分がどちらか
なかなか解りにくいものです。そんなときは、オブジェクト倶楽部へぜひどう
ぞ!(上田雅美)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
● ご意見、ご感想は         ⇒このメールに返信ください
〇 配信中止、アドレス変更は ⇒http://www.ObjectClub.jp/community/object_ml/help/
〇 免責事項、過去の記事は   ⇒http://www.ObjectClub.jp/community/object_ml/
■ 発行:オブジェクト倶楽部 ⇒http://www.ObjectClub.jp/
■ 編集代表:平鍋  健児
Copyright (c)2003-2007 オブジェクト倶楽部. All Rights Reserved.
powered by Eiwa System Management, Inc.