ゆーたんのつぶやき

株式会社ノークリサーチにてIT関連のシニアアナリストとして活動しています。

11/8速報&直撃インタビュー



ついに始まりましたJavaOne Tokyo、早速本日の
速報とインタビューをお送りしたいと思います。
セッション速報編
キーノートではJavaME(David Rivas氏)、JavaSE
(John Pampuch氏)、JavaEE(Mark Hapnete氏)の
それぞれの概説がありました。サプライズは特に
ありませんでした、過去から現在にいたるまでの
Javaの変遷を概観できました。
[Shale(The Next Struts)]
やはりサーバーサイドに携わる者として次世代の
strutsについては外せません。見た感じでは1.x
世代とは別物でJSFの知識は必要だなという印象
を受けました。またBacking BeanとしてSpring
のオブジェクトを参照できるなど、 昨今のDIに
関連した考え方の影響も強く受けています。
実際、生みの親であるCraig McClanahan氏は
Expression LanguageによってBacking Beanの
値を参照できる仕組みは一種のDIと考えており、
そういった意味でSpringとの連携は自然なこと
といえるかも知れません。JSFとDIとの関係に
ついては、下記の同氏のインタビューが参考に
なります。
http://www.theserverside.com/talks/videos/CraigMcClanahan2/interview.tss?bandwidth=dsl
ちょうど最終日にもJSFに関する同氏のセッション
がありますので、その前にこのインタビューを
チェックしておくと理解も深まるのではないかと
思います。
Shaleについては、別エントリであらためて詳細
を書きます。
[JBI]
今回のキーポイントでもあるJBIについてMark
Hapner氏直々のセッションです。
Service Component(BPEL Engine/XSLT Serverなど)
Normalized Message Router
Binding Component(WS-I/AS2/JMSなど)
といったJBIとその周辺の主要な構成要素に
ついてのわかりやすい解説がありました。
JBIは誤解を恐れずに言えば、「サービスのサービス」
ないしは「コンテナのコンテナ」といえる存在では
ないかと思います。
個人的に知りたかったポイントがあったのですが
それは下記の「インタビュー編」で記載したいと
思います。
[EJB3.0]
既にご存知の方も多いと思いますが、アノテーション
を使ってのEoDの実現を中心とした解説でした。
個人的にはEJB3.0でインターセプターが入ったことが
実は一番嬉しいことだったりします。EJBを使うことの
意義はパーシステンスやトランザクション、さらには
セキュリティといった個別実装が面倒なことをコンテナ
側でやってくれることではないかと捉えています。
それらはいずれもインターセプション的に挟み込まれる
ものであり、(実際にabstructとして開発者が作成した
Beanの前後にコードが挟み込まれて、実行時のクラス
が生成されているみたいです)さらにServletのFilter
のようにJavaEEの他のスペックでインターセプション的
なことができているにも関わらず、EJBでは開発者が自由
にインターセプターを挟むことができないのは個人的には
ずっと疑問に感じていました。
スペックリードであるLinda DeMichiel氏の今日のお話では
同一のインターセプターを複数のEJBに入れたい場合に現在は
個々にインターセプションのアノテーションを記述しないと
いけないのですが、デフォルトインターセプションというもの
が導入されて、重複して記述する必要がなくなるとのことです。
インターセプション周りが便利になるのは嬉しいことですね。
[AjaxJSF]
サーブレットのスペックリードである吉田豊氏によるAjax
JSFに関するセッションです。どういった場合にAjaxを使う
べきかというガイドラインと共にJSFAjaxの3つの連携
パターンの解説がありました。こちらの詳細についても別に
エントリを設けて詳しく書きたいと思います。
[LG3D]
川原英哉氏ご自身によるLooking Glassのセッションです。
LG3Dについては詳しく知らなかったので勉強になりました。
LG3D上でアプリを開発する場合のコードは予想よりもずっと
わかりやすく、AWT/SwingやSWT/JFaceを使ったことのある
方であれば、それほど難なく使えるのではないかという印象
を受けました。さらに現時点でもJava Web Startを使って
ネットワーク越しに導入可能な3Dアプリも存在するという
ことなので、「3Dリッチクライアント」としての可能性も
あるなぁと思いました。まずは下記のLG3D特集を読んで
勉強してみます(^^)
http://www.gihyo.co.jp/magazines/SD/archive/200510
[Mustangの乗りこなし方]
ブロガー座談会でもお世話になった櫻庭さんの人気セッションです。
実際に使い込んだ上でのMustangの注目ポイントに関する
解説はとても実用的でした。「Tiger 虎の穴」に続いて
「Mustang じゃじゃ馬ならし」もアップされるとのこと
ですので、こちらは要チェックです。
http://www.javainthebox.net/
[Java言語システムの未来]
Relaxerで著名な浅海智晴氏のセッションです。CBD(Component
Based Development)、AOPDSLといった観点からの開発手法や
それらとJavaとの関わりについての興味深いお話しでした。
これについてもあらためて詳しくレポートしたいと思います。
[Research&Collaboration on the next JDK]
Javaの各種ライセンスの解説の後、Q&Aにてライセンスに関する
質疑応答がありました。


インタビュー編
日頃はお会いできないキーマンに直接質問できるのは
カンファレンスの醍醐味の一つです。ということで、
キーマンの方々に直撃インタビューしてみました。


[JBIについて]
JBIについてMark Hapner氏にセッションの後にお話を伺いました。
Q: セッションの中で出てきた「コンポジットアプリケーション」
  というのは同一の物理サーバー内のアプリケーション連携で
  あるケースもあるんですよね?
A: そうですね、コンポジットアプリケーションの形態は様々です。
  わかりやすくいうとUNIXのパイプ処理を思い浮かべるといいと
  思います。
Q: なるほど、それで分岐とか、キューイングとかもできるパイプ
  なわけですね。
A: さらにメッセージの流し方も規定されているわけです。
Q: パフォーマンスについてはどうでしょうか?EJBを振り返ると
  最初はリモートインターフェースのみでしたが、ローカルの
  呼び出しでのパフォーマンスに問題が生じ、その解決策として
  ローカルインターフェースが追加され、結果としてEJBの仕様
  が複雑化してしまいました。同じことがJBIのNormalized
  Message Routerで起きてしまう心配はないですか?
A: それは大丈夫です。実際、JBIでのローカルメッセージングは
  高速で、既存のRMIやJMSといった手段よりも高速です。
ということで、JBIについての疑問に丁寧に応じてくださいました。
「コンポジットアプリケーション」の感覚的なイメージがちょっと
掴みづらかったのですが、「UNIXのパイプ」という例えはとても
わかりやすかったです。また、JBIのパフォーマンスについても
「Definitely faster」という力強い言葉で安心しました。まだ
本格的な実装面では各ベンダーの動きを待たなければなりませんが
少なくともスペックに関してはEJBの時のような懸念はなさそうです。


[AjaxJSFについて]
以前からJSFAjaxは相性がいいのではないかということで、
このBlogでも何度か触れてきました。
http://d.hatena.ne.jp/dufresne/20050523
この際に問題となるのが、JavaScriptによってクライアント側で
HTML要素を新たに追加した場合、JSFが保持しているUIコンポー
ネントツリーとの間に不整合が生じてしまうという点です。
吉田豊氏のセッションを聴いた時、すぐ隣にAjaxに詳しく、最終日
Ajax関連セッションのスピーカーとして登場するGregory Murray
氏が座っていたので質問をしてみました。
Q: AjaxJSFを組み合わせて、クライアント側で動的にHTML要素を
  追加した場合にJSFが保持しているUIコンポーネントツリーとの
  不整合が生じてしまう問題はどう回避すればいいでしょうか?
A: これはとても難しい問題ですね。現時点ではポーリングをする
  などして回避するしかありません。ですが、Faceletを使っての
  解決が模索されている最中です。
ということで、回避策はちゃんと検討されているとのことです。
FaceletといえばJSPに依存せずにJSFを使う手段として注目されて
いますが、確かにJSPに依存せずに直接JSFのライフサイクルの中で
全てを管理できればうまくクライアント側のHTML要素の変化と同期
できそうな気がしますね。
実は吉田豊氏のセッションの中でも解決策の一つが示されていました。
JSFAjaxの連携パターンの3つ目ではクライアント/サーバー間の
非同期通信も含めて全てのFacesListenerで管理し、さらにカスタム
のUIコンポーネントを使うことで全てのJSFの中で把握するという例
が挙げられていました。このようにすれば、ECサイトでの購買などで
配送先入力欄をAjaxを使って動的に数を増やしたとしても、それを
JSF側がUIコンポーネントツリーを辿ることで把握することができます。
実際、セッションのデモの中でも動物の写真データをサーバー内に保持
せずに敢えてサブコンポーネントとしてコンテンツの中に一つずつ記述
していたのはそうしたことを実演するためではなかったかと思います。
(時間がなくて、その部分のデモまでできなかったみたいですが)
要はHTMLの増減起きるような部分を丸ごとカスタムUIコンポーネント
して実装すれば、動的なHTML要素(実際にはUIコンポーネント)の追加も
対応できるということかと思います。実際、この方法で多くのケースは
カバーできそうです。そう考えると、やはりJSFAjaxというのは互いに
相性の良い技術といえるかと思います。


[Windowsレジストリ操作について]
WindowsJavaアプリケーションを開発する際にレジストリ操作をしたい
と思うことってありますよね。Preferencesクラスを使えば、特定のキー
以下への読み書きはできますが、任意のキーに対して読み書きすることは
できません。その点をJavaSEでデスクトップ周りの開発を担当されている
Joshua Marinacci氏(http://weblogs.java.net/blog/joshy/)に聴きました。
Q: Windowsレジストリを操作できるAPIが追加される予定はありますか?
  Mustangでシステムトレイも使えるようになったので、レジストリ操作
  も入るんじゃないかという期待があります。
A: 今のところはありません。システムトレイはどのOSにもありますが、
  レジストリWindows独自のものなので。
Q: うー、やっぱりそうですよね...ボクの場合はレジストリ操作をする
  プログラムをVCで書いて、それをRuntimeで呼び出しているのですが、
  他になにか良い方法とかありますか?
A: JDICプロジェクトを調べてみるといいでしょう。ネイティブの機能を
  上手く呼び出すことを目的としています。
ということで、JDICは下記からアクセスできます。
https://jdic.dev.java.net/
システムトレイやJNLPなどもこのプロジェクトが出所みたいですね。


速報といいつつも、かなり長くなってしまいました....
明日以降も速報&直撃インタビューを盛りだくさんに書いていきたいと
思いますので、どうぞご期待ください!