今日はイベントの告知です。
12/8(Fri) 13:00-19:15にSun Software Showcaseというイベントが開催されます。Sunのソフトウェア関連技術の最新動向,ソリューションについてまとめて情報収集できる良い機会ですので,是非,ご活用ください。
Java,SOAに関心を持っている方にお奨めのセッションを挙げてみますと,
- C-1: Java コアテクノロジーの最新動向
- C-2: Sun Java CAPSによるビジネスプロセス管理事例集~BPM導入のポイントと効果~
- D-2: これで解決! Webサービス相互運用性 WindowsとJava
- D-3: Sun Java CAPS最新テクノロジー・オーバービュー
- A-4: SOA進化論
というところでしょうか。
# 「SOA進化論」には不肖ながらわたくしめも登壇いたします。
先日,とあるお客さんにJava EEやSOA関連のテクノロジー,製品を紹介した際,「Javaを使わなければならないことは障壁になる場合もある」というようなコメントをもらいました。Javaを否定されることはあまり無かったのでちょっと新鮮な経験でした。
「Java」とひとくちに言っても,そこには大きく,Java VM,Javaライブラリ,Java言語という3つの要素があります。これまではこれら全てをひっくるめて「Java」として語られるケースがほとんどでしたが,最近ちょっと状況が変わりつつあります。例えば,
先日のSun Tech Daysのキーノートでもこんなスライドがありました。

「Java VM + Javaライブラリ + Java*以外*の言語」という組み合わせが特にスクリプト言語の周辺で話題になっています。現状,Java VM上で動く言語が
"Languages for the Java VM"というサイトにまとめられていますので,興味のある方は参照してみて
ください。
Comet=サーバからクライアント(Webブラウザ)にイベントドリブンでデータをpushする技術。Ajaxの周辺でHotです。
以下,アーキテクト必見の情報です。
現在,Sunの開発者向けイベント
Sun Tech Daysのワールドツアーが始まっています。
日本での開催が予定されていないのはちょっと残念ですが。
プレゼンテーション資料を参照できますので,是非チェックしてみてください。技術的な内容が詳しく解説されているのでお勧めです。
例えば,
Seattleで実施されたセッションのタイトルには,以下のような興味深いキーワードが並んでいます。
- Java EE and Glassfish
- Java SE
- NetBeans
- JAX-WS and WSIT
- BPEL and SOA
- Java Scripting
- AJAX and Web 2.0
- etc.
個人的には,キーノートにあったこんなスライドに受けてしまいました。
ebXML Registry実装のオープンソースプロジェクト
freebXML Registry (OMAR: Object, Metadata and Artifacts Registry)の
v3.0 Finalがリリースされました。
レジストリはSOAのガバナンスで重要な役割を果たすものとして,最近特に注目を集めています。レジストリの概要については
sourceforgeのページで分かり易く説明されていますので,是非,この機会に情報収集してください。
freebXML Registry 3.0のページでインストール手順等が解説されていますので,動かしてみると更に理解が深まると思います。
ちなみに,Sunのレジストリ製品である
Sun Service Registryも,このfreebXML Registryをベースにしています。
みなさんは
Web Services Interoperability Technologies (WSIT, a.k.a. Project Tango)をご存知でしょうか。これは,JavaプラットフォームとWindows Communication Foundation (WCF, a.k.a. Indigo)との間でのWebサービスの相互運用性を確立,検証するプロジェクトで,SOAでの課題であるプラットフォーム間の相互運用性の確保に重要な役割を果たします。
WSITには,JAX-WSとJAXBをベースとして,様々な追加機能が組み込まれています。
(概要については,
Harold Carr's Blogや,
Arun Guptaが一覧をまとめている
JavaOne 2006での関連セッションを参照してください。JavaOneの資料は
ここからダウンロードできます。)
現在,
WSITのページからバイナリをダウンロードして試すことが出来ます。前提となる環境は,Glassfish V2 b08以降,NetBeans 5.5 Beta 2です。
インストール手順や
チュートリアルもありますのでお試しください。
私は,WSIT Milestone Release 1,
Glassfish V2 Milestone 1,
Java EE 5 Tools Bundle (NetBeans 5.5 Beta 2対応に更新されている)の組み合わせで,
NetBeansを使ったチュートリアルを試してみました。
なお,1箇所だけ不具合があったので回避策をメモしておきます。
WSITのライブラリを解凍し,
>
ant [ -Das.home= ] -f wsit-on-glassfish.xml installのようにして,Glassfish V2 Milestone 1の環境にWSITをインストールすると,Glassfishが起動しなくなってしまいます。
これは,[glassfish_dir]/domains/domain1/config/domain.xmlの中で
<java-config classpath-prefix="${com.sun.aas.installRoot}/lib/jaxws-update.jar" classpath-prefix="${com.sun.aas.installRoot}/lib/webservices.jar${path.separator}${com.sun.aas.installRoot}/lib/webservices-tools.jar" ...>
のように,同じ名前classpath-prefixの属性が2つ指定されてしまっているのが原因のようです。
テキストエディタでdomain.xmlを開いて,以下のように1つの値に結合してください。
${path.separator}を間に挟むのをお忘れなく。
<java-config
classpath-prefix="${com.sun.aas.installRoot}/lib/jaxws-update.jar${path.separator}${com.sun.aas.installRoot}/lib/webservices.jar${path.separator}${com.sun.aas.installRoot}/lib/webservices-tools.jar"
...>
ここさえクリアすれば,あとはチュートリアルどおりに動きます。
あまりタイムリーではありませんが,今週月曜(8/14)に発生した停電について。
そのとき私は自宅にいました。出社の準備をしていると,明かりが二,三度明滅した後,完全に消滅。もしかして電気を使いすぎたかなと思いブレーカーを確認しましたが,落ちている様子はなかったので,停電だなと判断。夏にしては比較的涼しい朝だったので,電気の使いすぎによる大規模停電ではないだろうから,じきに復旧するだろうと思いつつ自宅を出ました。
自宅周辺の信号は消えていましたが,駅のエスカレータや電車は動いているようだったので,そのままいつもどおり乗車。車内では「銀座線と日比谷線は運転を見合わせています」とのアナウンスがあり,これらの路線を使わない私はラッキーと思っていたのですが,実はラッキーではなかった…。私が乗っていたのは東西線。何駅か進んだ先の駅間で急停車。アナウンスは「現在,安全確認を行っています。しばらくお待ちください。」から,「復旧の見込みはたっていません。」に…。結局,電車が動き始めたのは約50分後。お盆ということで比較的社内が空いており,エアコンも動き続けていたので何とか耐えられましたが,体調の悪い人には厳しい状況だったと思います。
次の駅までは進んだものの,そこから発車する見込みは依然として立ってないということで,途中下車。動いていた他の路線に乗り換えて,会社へ向かいました。
なぜ,タイトルが「グリッドコンピューティングと…」かというと,自宅周辺の信号が消えているのを見た瞬間,グリッドコンピューティングの語源になったといわれている,電力網(あるいは送電網。英語ではPower Grid)が頭に浮かんだからです。「うちの近所への電力供給には迂回路がないんだな…。」
後の
報道でも分かるように,迂回路はちゃんと存在していました。ただ,「復旧は、担当者が各変電所で安全を一つ一つ確認しながら手動で行うため、それなりの時間がかかった。」とのこと。自動で速やかに切り替えられるとばかり思っていたのですが,これほど大規模だと,手動の方が安全性が高いということですかね。自宅にいた妻によると,我が家では20分後くらいには電気が復旧していたらしく,手動での切り替えにしては,まぁ早く復旧した方だろうと思います。バックアップの電線が同じ鉄塔のすぐ隣にあるというのはどうかと思いますが…。
これを機に,自分の中で曖昧だった,グリッドコンピューティングとユーティリティコンピューティング,スーパーコンピューティングについて調べてみました。私なりの単純な理解をまとめて見ると,(私はこの辺りのエキスパートではないので,業界の正しい定義とは異なるかもしれませんが…)
- グリッドコンピューティング
以下の2つの要素で構成されるテクノロジー。
- 複数のコンピュータ資源を集約して仮想的に扱えるようにする。
これにより, - 全体として大きなコンピュータ資源を提供できる
- 複数のコンピュータ資源を,偏りなく,有効活用できる。
- 一部のコンピュータ資源に不具合が生じても,全体としては安定してコンピュータ資源を供給できる
パターンとしては,比較的少数の大規模なコンピュータ資源の集約により実現するパターンと,比較的多数の小規模なコンピュータ資源の集約により実現するパターンの2種類がある。(電力の業界では,後者のような方式を特に「マイクログリッド」と呼んでいるらしい。)- コンピュータ資源をユーザに届けるルートを冗長化する。
これにより, - 一部のルートに不具合が生じても,全体としては安定してコンピュータ資源を供給できる。
IT業界では,こちらの側面は比較的一般的ということもあり,あまり語られていないが,「グリッド(格子,網)」というからには,こちらも不可欠,重要な要素と思われる。
- ユーティリティコンピューティング
コンピュータ資源を,電気,ガス,水道のように,「いつでも」,「どこでも」,「使いたいだけ」,「従量課金で」利用できる仕組み。
グリッドコンピューティングにより実現可能(上記(1-a), (1-c), (2-a)の効果による)。
他の方法でも実現可能かもしれないが,現在のところ,グリッドコンピューティングが最も現実的なソリューションと思われる。
- スーパーコンピューティング(グリッドコンピューティングのコンテキストで)
大きなコンピュータ資源を利用できる仕組み。
グリッドコンピューティングにより実現可能(上記(1-a)の効果による)。
他の実現方法の方が主流と考えられるが,最近,特に,電力業界で呼ぶところの「マイクログリッド」による実現方法が注目されている。
という感じになります。グリッドコンピューティングは供給者サイドから見た用語,ユーティリティコンピューティング,スーパーコンピューティングは使用者サイドから見た用語と言えそうです。
と,ここまで整理したところで疑問に思い始めたのが,我が社のユーティリティコンピューティングのプログラムである
Sun Gridの名前。ユーザにとって見れば,ユーティリティコンピューティングという使用者サイドのモデルが重要であり,裏でGridのテクノロジーが使われているかどうかは知ったこっちゃないのですが(だって,東京電力は電気のサービスのことを「東京電力グリッド」とは言いませんよね)。まぁ,Sunはテクノロジーの会社ですから,Gridというテクノロジーをアピールしている訳です。
Java EE 5の時代のJavaフレームワークの展開についてもう1つのヒントになるのが,Rod Johnson率いるSpring陣営と,Hibernateの開発者であり,現在,JBossでSeamの開発に携わっているGavin Kingの間でやり取りされた
ディスカッションです。
Springは軽量コンテナの代名詞ともいえるフレームワークで,POJOベースの開発,Devendency Injection (Inversion of Control),AOPのサポートを特徴としています。
JBoss Seamは,Java EE 5 (JSF, EJB 3.0)をベースに開発されたフレームワークです。
SpringのJava EE 5 (EJB 3.0)に対するスタンスは,SpringをWebLogicのJava EE 5実装のベースとして利用するためのオープンソースプロジェクト
Pitchforkの
FAQで明記されています。
- SpringをEJB 3.0のサポート手段として使用することをお勧めする。SpringとEJB 3.0のプログラミングモデルをmixして使うことがより良い選択肢になる。
- EJB 3.0はSpringを代替するものではない。なぜなら,EJB 3.0のDependency InjectionやInterceptionは,Springに比べて機能が限定されているからである。
- EJB 3.0のうち,JPA (Java Persistence API)に関してはO/R Mappingの標準仕様として歓迎する。
Gavin Kingはこれに対する以下のような意見を,上記のディスカッションで述べています。
- Springが提供する(AspectJ式の)AOPは,その複雑さに比べると,実現できることが少ない。(EJB 3.0の)interceptorとannotationで大抵は事足りる。
- (EJB 3.0で実現可能で)Springでは簡単に実現できないこともある。例えば,SFSB, optimistic transactionなど。
- SunやJCPの仕事は,可能なことを何でも標準として規定することではない。
- Springが,EJB 3.0の標準仕様を前提にして拡張機能を提供するのであれば,歓迎する。
- Spring/BEAによる擬似EJB 3コンテナ(quasi-EJB3 container)は,Springへのロックインを助長する,誤ったアイディアである。
今後,各社からJava EE 5準拠のアプリケーションサーバが次々とリリースされると思われます。本当の意味で可搬性を確保する(ベンダーロックインを回避する)には,やはり標準仕様への準拠というのが有効なソリューションだと思います。