Go to Contents Go to Java Page

JavaOne 2002 in SF Report

 
 

6/10 第 1 日

 
 

今日から JavaOne の本番です。本日のレポートをお届けしたいと思います。

今年から Keynote は General Session と名前は変わりましたが、内容はいつものとおり。

8 時ごろに General Session の待つ人たちでいっぱいになっていました。それも、Alumni と Press だけの列なのにです。普通の人たちは違う列に並ばされていましたが、こちらもかなり長い列になっているようです。

General Session のはじめはライブパフォーマンスから。3 人のグループが演奏しているのですが、2 人がヘッドセットディスプレイをつけています。また、手には VR などで使われるグラブもしているのです。テルミンの現代版のようなかんじで、彼らのディスプレイにはなにか映っていてそれを使っているようです。その他にも、スクラッチをするデバイスなどなかなか未来的なサウンドを作り出していました。ギターやベースなど普通の楽器も使っていることは使っているんですけど、あんな感じだとずいぶん違った雰囲気になります。

 

 
 

General Session

 
 

今回の JavaOne も初日のスピーチは午前が普通の Keynote 的なもので、午後が技術的なものになります。

いつもと同じように司会の John Gage 登場。

今年はそれほど喋らず、すぐに Jonathan Schwartz バトンタッチしました。

Jonathan Schwartz "Java is Everywhere"

550M のデスクトップで Java が動いているなど、さまざなデータを示して Java の優位性を示し、すでに Java はどこにでもあることを印象づけるという内容でした。

ゲストスピーカは Guy Laurence, Vodafon と Brian Debusk, GE Medical Systems です。

Guy Laurence は Vodafon の Java 戦略を示し、WAP から Java へシフトしていくことを示しました。特に Vodafon Live をアピールしていきました。

Brian Debusk は GE Medical の電子カルテのデモを行いました。単にカルテを電子化するだけでなく、それにリンクして脈拍や血圧をリアルタイムにグラフ化したり、CT の画像を一緒に扱うことも可能なようです。

また、医者にとって患者により近づくことが重要だとし、Tablet PC でも同じアプリケーションが動作することもデモしました。

Swing や Java2D を使っているのは当然ですが、どうやら Jini も使用しているらしいです。

最後に Schwartz が自分のザウルスを取り出して、これでも (部分的だが) 同じものが動作することを示し、CT の画像をザウルスでブラウズして見せました。

John Fowler

Evolving Java = +Power + Richness - Complexity + Tools だそうです。

J2EE, J2SE でこの流れを紹介し、特に J2EE の JSF (Java Server Faces) を Oracle の Ted Faurel がデモし、また Borland の Blake Stone が JBuilder のデモを行いました。

JSF はコンポーネントベースで Web アプリケーションに連動した HTML を作り上げるもので、デモでは車販売のサイトを作るものでした。

また、JBuilder では一緒に組みこまれているプロファイラの結果から最適化を行うために、やはり一緒に組みこまれた UML のツールを使ってコードを変更していくというものです。

その他にも新しい技術として JSR-175 Metadata, Jsr-223 Scripting, JSR-224 JAX-RPC 2.0 などを紹介しました。

次にコミュニティといことで新しいサイト java.net とゲームのコミュニティサイトを紹介しました。今回の JavaOne はゲームに非常に注力しているようです。

再び、Jonathan Schwartz が登場して、Java の新しいロゴのお披露目を行いました。

また、Java の新しいサイトとして java.com がオープンしたことが発表されました。

 

 
 

Technical General Session

 
 

午後はいつも通り Graham Hamilton と Tim Lindholm による Technical Genral Session です。

J2EE から J2ME まで幅広く説明されたのですが、ここでは Tiger (J2SE 1.5) に絞ってレポートしたいと思います。また、TS-1540 J2SE Update and Road Map の内容も一緒に反映させたものにしていきます。

Tiger で主要なテーマとして上げられたのが

Ease of Development (EoD)

です。さまざまな新機能はその延長線上にあります。ここで紹介されたのが

  • Metadata
  • Generics
  • Iterating
  • Enum type
  • Autoboxing
  • Simple Format I/O

これ以外に

  • JMX Management API
  • New Profiling API
  • Improving Diagnosticc Ability
  • Direct Support for OpenGL
  • JDBC Row Set
  • Standard API for javac
  • Concurrent Utility API

などがあります。

Metadata はクラス、メソッド、フィールドの注釈をつけるための使用です。このために言語仕様の変更まで行われたようです。

Metadata を記述するには @ に続けて書くようにします。

Old Style
public interface PingIF extends java.rmi.Remote {
    public void foo() throws java.rmi.RemoteException;
}
 
public class Ping inplements PingIF {
    public void foo() {
        ....
    }

}
New Style
public class Ping {
    public @remote void foo() {
.... } }

Metadata を使うと、foo メソッドは Remote インタフェースに由来するものだということを直接書くことができます。このため、わざわざ PingIF インタフェースのようなインタフェースクラスを書かなくてもすむわけです。

次に Generics です。

こちらはすでにいろいろなところで解説が出ているので、詳しいことは書きません。いうなれば、C++ のテンプレートを Java でも使えるようにしたということです。

これによって、面倒くさいコレクションのキャストを書く手間を省くことができます。

Iterating を使うと for ... each 文のようなことを実現することができます。

    ArrayList<Integer> list = new ArrayList<Integer>();
    
    for (Integer i : list) {
        ....
    }

これも言語仕様まで変えてしまった例です。

Enum は Effective Java の中で説明されている Type Safe Enum を言語に取りこんだようです。Type Safe なので、C の enum のように単に int の変わりということではなく、コンパイル時に型チェックもできるようです。

Autoboxing もうれしい新機能です。

ようするにプリミティブとそのラッパクラスとの変換を自動で行ってくれるというものです。

    Integer x = 5;
    
    int y = x;

なんてことができます。

Simple Formtatted I/O は C の printf と scanf のようなものです。例に出てきたのは printf の方なので、scanf はどうなっているのかよく分かりません (メソッド名も違うかもしれません)。

    out.printf("%s is string.", str);
    
    out.printf("%d", x);

例を見ていると可変長引数ができているようなのですが、本当かどうかよく分かりません。本当だとしても、どのように定義するのかもよくわかりません。

その他の API としては管理系がいろいろと盛り込まれているようです。SNMP をベースにした API や Profiling API の強化などが説明されました。

最後に J2EE と J2ME の話題をちょっとだけ。

J2EE 1.5 では EJB 3.0, JAX-RPC 2.0 JAXB 2.0 JDBC 4.0 などが盛り込まれるそうですが、おもしろそうなのが Scripting Language Support (JSR-223) です。特に Java + PHP が強調されていたので、PHP から Java、Java から PHP が実現できるようです。

J2ME では JSR-185 の JTWI (Java Technology for Wireless Industry) がメインに説明されていました。

 

 
 

Technical Session

 
 

今日、聴講したのは

  • TS-3130 Introduction to the Java 2 Platform, Micro Edition (J2ME) Personal and Personal Basis Profiles
  • TS-1540 Java 2 Platform, Standard Edition (J2SE) Update and Road Map
  • TS-2915 Project JXTA: Open P2P Architecture Platform
  • TS-1402 Java Technology Desktop Game Development

です。J2SE の Roadmap は General Session + α なので省略。また、JXTA もかなり一般的な話しかしなかったので、省略します。

ところで、本当は TS-3130 の時間は TS-3708 Concurrency Utilities を聞きたかったのですが、満席で会場から締め出しをくらってしまいました。私以外にも会場の外にはだいたい 100 人ぐらいの人が詰めかけていたのですが、あえなく退散。Doug Lea がスピーカだし、Tiger に含まれる新機能ということで、ぜひ聞きたかったのですが。Request Session で金曜日に再講演となることを望んでます。

TS-3130 Introduction to the Java 2 Platform, Micro Edition (J2ME) Personal and Personal Basis Profiles

CDC 版 MIDP が Personal Profile と Personal Basis Profile です。実際には Foundation Profile があって、その上に Personal Basis、さらに Personal Profile となります。

もともと、JDK1.1 の頃の Personal Java をおきかえるプロファイルなのですが、CLDC + MIDP に比べるとなかなか仕様が決まらず、やっと去年公開されたものです。

CDC の VM は CVM です。JIT も使用できるのですが、J2SE の VM に比べると組込み用に最適化されています。ただし、CLDC とは異なり、JNI やリフレクションも使用することができます。

Foundation Profile は J2SE 1.3 のサブセットでパッケージとしては以下のものが使えます。(同じパッケージでもJ2SE のクラスをすべて使えるわけではありません)

  • java.lang
  • java.util
  • java.net
  • java.io
  • java.text
  • java.security
  • javax.microedition.io

Foundation Profile は本当に基本的なところで、GUI に関する部分は含まれていません。

その GUI を含んだものが Personal/Personal Basis です。

もともと、Personal Profile だけで出発しました。しかし、AWT ほど高機能ではなくていいが GUI は必要 (例えば STB のようなものがターゲット) なものを Personal Profile だけでカバーすることができなくなってきたのです。

そこで、低レベル GUI の Personal Basis Profile と高レベル GUI の Personal Profile に分化したわけです。

Personal Basis Profile は AWT のようなコンポーネントベースの GUI を作れますが、フレームは 1 つだけ (ルートウィンドウ) になり、ヘビーウェイトなコンポーネントは提供されていません。

Personal Profile はマルチウィンドウでヘビーウェイトコンポーネントも使用できます。また、Applet も使用することができます。

Personal Profile のターゲットは Mobile 環境で使用するブラウザ、高機能 PDA、ネット通信可能な STB などです。

Personal Basis Profile は Applet を使用することはできませんが、その代わり Xlet を使用することができます。Xlet は GUI を持たなくてもいい Applet のようなものです。

また、Xlet 間通信も使用できます。これは IXC と呼ばれています。IXC は RMI のような使い方をしますが、あくまでも 1 つの JVM 上で動作する Xlet 間の通信のみをサポートします。

現状ではシャープのザウルス向けのリファレンスインプリメンテーションと Linux 向けのものが提供されています。

 

TS-1402 Java Technology Desktop Game Development

今年の JavaOne のメインテーマの 1 つにゲームがあります。MIDP のゲームだけではなく、Desktop 向けのゲームや Console 向けのゲーム、そしてネットゲームなどもターゲットになっています。イベントとして今日から木曜まで Video Game Summit が開かれていますし、javagaming.org も新装開店しました。

このセッションはそれらのベースになるような Java の機能についての紹介です。

2D と 3D に分かれており、2D の方で取り上げられたのが次の 2 つです。

  • Managed Image
  • Fullscreen

Managed Image はいわゆる VolatileImage のことです。現状で問題になっているのは Translucent 要するに半透明、もしくはアルファブレンディングが未サポートということです。

その他の Issue として Cursor のサポートや、フルスクリーンと通常のスクリーンを何度も切りかえることができない問題などがあります。

また、より Harware Acceralation を使用できることなどが上げられていました。

3D は現状で高レベルな Java3D がありますが、ゲームに使うにはパフォーマンス的につらいものがあります。そこで、OpenGL を直接 Java から使用するためのライブラリが開発されています。

特に JOGL はオープンソースで http://jogl.dev.java.net で開発されるということで、朝の General Session でも紹介されていました。

今後は次のような項目が上げられていました。

  • 2D と 3D の境目をなくす ... 多分、Direct X 9.0 で、2D も Direct3D で描画しているようなことを Java でも行うのだと思います。
  • ジョイスティックのような入力デバイスのサポート
  • ネットゲーム
  • Open AL とのバインディング
  • Open GL とのバインディング

入力デバイスは今後は USB になっていくと思うので、現在 JCP で一向に進んでいない USB を扱うためのライブラリが活性化していくことを望んでいます。

 

 
 

Birds of a Feather (BOF) Session

 
 

今年の BOF は Mariot や Palace ではなく、Argent Hotel が会場になっています。Argent といえば昔は ANA ホテルだった所です。

今日は次のセッションを聴講しました。

  • BOF-1207 Design and Implementation of Java Technology Flight-like Software
  • BOF-1219 A Reusable Java Technology Fault Protection Framework
  • BOF-3571 Java Technology on the Stealth Aircraft Flightline
  • BOF-2286 New Numerical Library Features in Tiger (J2SE 1.5)

BOF-1207 Design and Implementation of Java Technology Flight-like Software

JSR-1 で策定された Realtime Specification for Java (RTSJ) を使用して人工衛星のコントロールに使用した事例をベースにした、Realtime での Java の使用に関するセッション。

もっと、事例紹介に近いのだと思っていたのですが、結局人工衛星のコントロールはデモのときに見せてくれただけでした。

リアルタイムを必要とする場合、RTSJ を利用することでデスクトップでデバッグを行うことができ、また容易にスケジューリングを設計することができるなどの利点があります。スケジュールといっても周期的に行うものや、1 度だけの実行、またデッドラインをどう扱うかなどの考慮すべき点は多くあります。

その一方、Java でリアルタイムを扱うときの問題としてメモリがあります。特に GC が問題となります。RTSJ では Immotal Memory を導入して、この問題に対処しています。Immotal Memory はアロケートされたら、開放されない領域で、GC も行われません。

また、Scoped Memory も新たに導入されたメモリモデルです。C のスタックを一般的にしたものと考えることができます。Scoped Memory はヒープにも、Immotal Memory にもおくことができます。

次に取り上げられたのが、本題である Design Pattern です。ここで使用されたパターンは

  • State Pattern
  • Facade Pattern
  • Abstract Factory

です。デバイスなどの制御では状態によって振る舞いを変化させることが多々あります。例えば、Idle - Pre Process - Processing - Post Process と状態が変化し、その状態に応じて処理が変化します。

このように状態によって処理を変化させる場合、State Pattern は非常に有効です。

Facade や Abstract Factory を使うことで処理のアルゴリズムを変化させることなどができるようになります。例えば、デスクトップでシミュレーションを動作させるときと、実機上で動作させるときでも、設定を変更するだけで再コンパイルなどの手間をかけずに行うことができます。

デザインパターンは一般のアプリケーションだけでなく、リアルタイム性を求められるアプリケーションでも有効であるということが示されました。

最後にデモを行ったのですが、残念なことに RTSJ の JVM ではなく、普通の JVM でした。

 

BOF-2286 New Numerical Library Features in Tiger (J2SE 1.5)

JavaOne ではじめて OHP によるセッションを聴講してしまいました。どうやら、プロジェクターの調子が悪かったらしいです。

Tiger に入る前に Mantis (1.4.2) の話から。

Mantis では x86 の SSE がサポートされたそうです。特に Pentium 4 で Server VM を使っている場合は SSE2 もサポートされます。

また、1.3.1 では精度の悪かった Math#sin/cos も改善されます (x86 の場合のみ)。これは x87 の fsin/fcos の問題だそうで、-π/4 から π/4 以外の範囲では精度が落ちるようです。

1.4.2 では上記の範囲では fsin/fcos を使用して、それ以外の場合は使用しないようにすることで精度とパフォーマンスのバランスをとっているということです。

さて、Tiger ですが、サポートされる演算が増えます。また、浮動小数点の新たな表現方法が導入されるそうです。Hexadecimal FP というらしいのですが、C99 で使われている形式だそうです。

     1.0     ->   0x1.0p0
    -2.0     ->  -0x1.0p1
     0.25    ->   0x1.0p-2
     3.0     ->   0x1.8p1

何となく分かるのですが、正確には分かりません。

最後に BigDecimal クラスに関してです。Tiger では +, -, ×, ÷ の演算ルーチンを変更して、MathContext クラスのパラメータを使用するようになったそうです。

また、正確な divide メソッドや sqrt メソッドが新たに組みこまれるそうです。

 

 
 

おまけ

 
 

前回はザウルスとセットになった無線 LAN のおかげで、普通の PC でも無線 LAN を使用できたのですが、今年はだめそうです。パビリオンに行くといくつか 11b のアクセスポイントを見つけることができるのですが、どうやら展示企業が使っているもののようです。勝手に使わせてもらっていますが、それ以外の場所では使えなさそうです。残念。

今日、会場で日本の Sun の石原さん、鈴木さんにお会いしました。鈴木さんは JXTA や Jini のエバンジェリストをなさっている方で以前からお付き合いさせていただいていました。石原さんはお名前は存じ上げていたのですが、お会いするのは多分はじめてです。光栄なことに私のことを以前から知っていたそうです。とても驚いてしまいました。

ところで、スケールダウンした JavaOne ですが、こんなところにもしわ寄せが。何かというと、コーヒが出ない、おやつが出ないということです。去年までは Startbucks がサーブされていて、いつでも飲めたのですが... また、午後のセッションの休憩時間にはフルーツやお菓子がサーブされていたのですが、今年はないようです。

おやつはともかく、コーヒぐらいは出してもらいたかったです。

 

(2003.6.10)

 
 
Go to Contents Go to Java Page