J2SE 1.3.0 は Java 2 SDK のアップグレード版です。このソフトウェアには、次のような新機能や拡張機能が組み込まれています。
パフォーマンスの向上
Java HotSpot 技術と最適化された実行時ライブラリにより、J2SE 1.3.0 は前回の Java 2 SDK のバージョンに比べ、多くの機能で高速化を実現しています。
Web への容易な展開
アプレットのキャッシュやオプションパッケージの自動インストールなど、J2SE 1.3.0 の Java Plug-In コンポーネントによる機能が新たに追加されたため、プログラムを Web 上に展開するときの時間が短縮され柔軟性が向上しました。
企業レベルでの相互運用性
J2SE 1.3.0 にRMI/IIOP と Java Naming and Directory Interface が追加されたため、Java 2 プラットフォームの相互運用性が向上しました。
セキュリティの強化
RSA 電子署名、動的信用管理、X.509 証明書、Netscape 署名ファイルの検証が新たにサポートされたため、開発者はさまざまな手段で電子データを保護できるようになりました。
Java サウンド
J2SE 1.3.0 には強力なサウンド API が新たに提供されています。これまでのプラットフォームのリリースでは、オーディオのサポートがオーディオクリップの基本的な再生に限定されていました。今回のリリースでは、低レベルのオーディオサポートに対する標準のクラスやインタフェースが、Java 2 プラットフォームによってはじめて定義されました。
拡張された API と開発しやすさの向上
開発側からの要望に応えて、J2SE 1.3.0 は Java 2 プラットフォームに多彩な機能を追加しています。追加された機能によって、プラットフォームの機能性がさらに向上し、一層強力なアプリケーションが開発できるようになりました。また、新規の機能の多くは、開発工程の短縮や効率化を実現する機能です。
それぞれの機能について、次に詳しく説明します。J2SE 1.3.0 の新しい機能の詳細は、http://java.sun.com/j2se/1.3/docs に掲載されている Java 2 Platform に関するマニュアルを参照してください。Java 2 Platform のマニュアルには J2SE 1.3.0 の API 仕様が組み込まれています。
Java 2 SDK バージョン1.3.0 ではさまざまな機能拡張が行われ、パフォーマンスが向上しています。変更点としては、Java HotSpot Client Virtual Machine (VM) と Java HotSpot Server VM の追加などがあります。この 2 つは、高性能な Java HotSpot 技術を実装するものです。Java HotSpot Client VM はクライアントシステムのパフォーマンスを最大限に向上させるためのチューニングが行われ、起動時間とメモリーの使用量の分野でパフォーマンスが向上しています。Java HotSpot Server VM はチューニングによりプログラム実行速度のパフォーマンスが最大になるように最適化され、起動時間やメモリーの使用量がさほど問題にはならないサーバーアプリケーションを対象としています。
J2SE 1.3.0 にはまた、新たにチューニングされたクラスライブラリが組み込まれ、実行時のパフォーマンスが改善されています。
J2SE 1.3.0 で新たにアプレットキャッシュ機能が提供され、アプレットをローカルキャッシュに保存することによって、使用頻度の高いアプレットの高速なロードや起動が可能になりました。アプレットが 2 回以上ダウンロードされたときは、ローカルのアプレットキャッシュに保存されている可能性があります。保存しておくことで、その後アプレットが必要になるたびに、ネットワーク経由でアプレットを表示してダウンロードする必要がなくなり、ローカルにキャッシュされているアプレットを使用できます。
この機能は、大容量かつ使用頻度の高いアプレットにとっては大変便利です。たとえば、多くの企業のアプレットがメガバイトのサイズに達し、それほどのサイズのアプレットになると、ネットワークからロードするのに何十分もかかってしまいます。新しいアプレットキャッシュ機能ではダウンロード時間がなくなるので、ビジネスシーンでいままで以上に強力なアプレットを数多く使用することができます。
J2SE 1.3.0 では、オプションパッケージの自動適用もサポートされています。オプションパッケージは、Java 2 Platform Standard Edition には含まれていない、特殊なプログラミング用に使用する開発者向けの機能や API のセットであり、別途入手できます。例としては、Java Media Framework 技術や JavaHelpTM オプションパッケージなどあります。
J2SE 1.3.0 より前のバージョンでは、アプレットでオプションパッケージを使用している場合、アプレットを実行したいすべてのクライアントに最新のバージョンのオプションパッケージがインストールされていることが前提とされていました。したがって、クライアントに適切なオプションパッケージがインストールされていなければ、アプレットが意図しない動作をするか、あるいはまったく実行できない状態でした。
J2SE 1.3.0 では、アプレットが必要とするオプションパッケージのバージョンやベンダー情報を指定することができます。開発者は必要なオプションパッケージの最新バージョンを、次の状況のいずれかに当てはまる場合にダウンロードできる URL を、アプレットに指定することができます。
ローカルにはオプションパッケージがまだインストールされていない。
オプションパッケージはインストールされているが、古いバージョン番号である。
オプションパッケージはインストールされているが、指定されたベンダーのものではない。
J2SE 1.3.0 では、オプションパッケージに組み込まれている独自のインストーラや Java 言語のインストーラプログラムがサポートされており、ネットワークから新しいバージョンのオプションパッケージを取り込むと、自動的にインストーラプログラムを起動します。
J2SE 1.3.0 には、CORBA 技術をサポートする重要な拡張機能が 2 つ追加されています。Java 言語で書かれた運用 CORBA IDL コンパイラとRMI over IIOP (RMI-IIOP) APIです。CORBA Interface Definition Language (IDL) は、分散システム用のインタフェースだけを定義する言語です。CORBA はインタフェースの定義に中立的な言語を使用しているため、複数の言語をサポートすることができます。標準 Java 言語バインドに言語的に中立的な CORBA IDL をコンパイルする IDL コンパイラが Java 2 SDK Standard Edition に組み込まれたのは、これが初めてです。これらの言語バインドは Java IDL Object Request Broker (ORB) と連携して、Java プログラミング言語で従来の CORBA プログラミングをサポートします。
Java プラットフォームのバージョン 1.1 から、Remote Method Interface (RMI) のおかげで、プログラマは分散環境のインタフェースを直接 Java 言語で書くことができるようになりましたが、RMI は独自の通信プロトコルを使用していたため、プログラマは RMI を使用するときに、他の言語で書かれたオブジェクトとの通信能力を断念しなければなりませんでした。RMI-IIOP では Java IDL ORB が使用されているため、標準の CORBA 通信プロトコルである Internet InterORB Protocol (IIOP) を RMI と一緒に使用することができます。すべての通信に IIOP が使用されているため、C++ などの他言語で書かれたオブジェクトも、RMI-IIOP 分散オブジェクトと通信できます。さらに RMI は、Java プログラミング言語のインタフェースを CORBA IDL へマップ (対応付け) するときの CORBA 標準として認められました。他の言語でのプログラミングをやりやすくするため、CORBA 標準 IDL は RMI が有効なクラスから生成することができます。既存の RMI プログラムは、通常はわずかな変更で、IIOP プロトコルを使用するように変換できます。
RMI-IIOP では RMI のプログラミングのしやすさに加えて、他言語で書かれたソフトウェアと JavaIDL の CORBA 準拠の通信が可能です。RMI プログラマは多少の制限事項に従えば、CORBA の IIOP 通信機能を使用して、あらゆる種類のクライアントとでも通信できるようになりました。クライアントが全体を Java プログラミング言語で書いたものでも、他の CORBA に準拠している言語で書かれたコンポーネントで構成されたものでも、通信が可能です。
J2SE 1.3.0 の新しい Java Naming and Directory Interface (JNDI) API を使用すると、開発者は Java プログラミング言語で書かれたアプリケーションに、ネーミング機能およびディレクトリ機能が追加できます。JNDI の開発目的は、特定のネーミングサービスやディレクトリサービスの実装に依存することなく、異種混在の企業のネーミングサービスおよびディレクトリサービスにシームレスに接続することです。したがって、新規のサービス、拡大中のサービス、すでに展開済みのサービスなど、さまざまなサービスに一貫した方法でアクセスできます。この業界標準のインタフェースを使用すれば、開発者は J2SE 1.3.0 で強力かつ移植性がある、ディレクトリが使用可能なアプリケーションの構築が可能になります。
JNDI アーキテクチャは、API と Service Provider Interface (SPI) で構成されています。Java アプリケーションはこの API を使用して、さまざまなネーミングサービスやディレクトリサービスにアクセスします。SPI では、さまざまなネーミングサービスやディレクトリサービスを透過的にプラグインできるため、Java アプリケーションがサービスにアクセスできるようになります。J2SE 1.3.0 のリリースの JNDI には、次のサービスにアクセスできる、サービスプロバイダが同梱されています。
Lightweight Directory Access Protocol (LDAP) — ディレクトリサービスにアクセスするためのインターネット標準
Common Object Services (COS) Name Server — CORBA オブジェクト参照を格納するためのネームサーバー
RMI レジストリサービスプロバイダ — RMI リモートのオブジェクトを格納するためのネームサーバー
J2SE 1.3.0 で提供されているセキュリティの拡張機能を使用すると、開発者はさらに多くのツールで、自らの技術投資を自在に保護することができます。RSA 署名が新たにサポートされ、J2SE 1.3.0 の拡張された動的信頼管理機能により、Web ベースの展開が非常に簡単になりました。
J2SE 1.3.0 では暗号サービスプロバイダが提供されています。これは Web で配信される電子署名ソフトウェアに対応して、広く使用されている RSA 署名をサポートするものです。VeriSign や Thawte などの署名を含め、標準的な RSA 証明書がサポートされています。
J2SE 1.3.0 より前のバージョンでは、Java プラットフォームユーザーが RSA 証明書を使用したいと考えた場合、自分で RSA サービスプロバイダを書くか、あるいは Sun 以外から RSA サービスプロバイダを購入する必要がありました。今では RSA プロバイダが J2SE 1.3.0 に標準として組み込まれています。
J2SE 1.3.0 の新しい動的信頼管理機能では、ポップアップダイアログが表示されてユーザはアプレット署名者を検証できるため、署名されたアプレットを実行する各クライアントにセキュリティキーファイルを配布する必要がなくなりました。
以前は、ユーザーが通常は禁じられている操作をアプレットにさせようとして、信頼するソースからのアプレットに追加のセキュリティ許可を与えようとすると、アプレットの信頼するソースの証明書を認識できるように、信頼する署名者の証明書のローカルキャッシュを事前に設定しておく必要がありました。この作業は、アプレットが実行される可能性があるクライアントマシンのすべてで行うことになります。
J2SE 1.3.0 には、アプレットのコードソースからアプレットの署名者を抽出してブラウザに渡す機能によってより有効な対応策を提供しています。ブラウザはその大元の証明書までずっと証明書の連鎖を検証して、ブラウザの持つ、信頼する大元の証明書のデータベースに、その大元の証明書があるかどうかを調べます。そこに大元の証明書があれば、認証された署名者の連鎖がブラウザに表示され、ユーザーはアプレットに対するセキュリティの制限事項をすべて解除できます。
J2SE 1.3.0 では、X.509 公開鍵証明書に対するサポートが強化されています。最近提案された標準プロトコル (RFC 2459) で必須のあるいは推奨されている X.520 の属性がすべてサポートされるようになりました。また、J2SE 1.3.0 は相対識別名内で、複数の属性 / 値の断定を処理できます。
Java Sound API では、Java プログラムでオーディオと Musical Instrument Digital Interface (MIDI) データの取り込み、処理、再生ができます。これらの新しい機能を使用すると、開発者は次のような新しいタイプのアプリケーションが作成できます。
会議や電話通信のアプリケーションなどを含む、通信フレームワーク。
エンドユーザー向けコンテンツ配信システム。これらのシステムは、単純なデスクトップのメディアプレーヤーからストリーム化された音楽の配信システムや、ライブイベントのブロードキャスト音声アプリケーションにまで及びます。
ユーザーの操作に応えて動的にサウンドを生成するゲームや Web サイトなど、対話型のアプリケーション。
オリジナルのオーディオや音楽のコンテンツを作成したり編集したりするためのツールやツールキット。
Java Sound API は効率的なサウンドエンジンによってサポートされており、プラットフォームでの高品質なオーディオミキシングや MIDI 合成機能が保証されています。J2SE 1.3.0 に組み込まれている実装では、具体的には次の機能がサポートされています。
オーディオファイルフォーマット: AIFF、AU、および WAV
音楽ファイルフォーマット: MIDI タイプ 0 とタイプ 1 および Rich Music Format
オーディオコーデック: u-law と a-law
オーディオデータフォーマット:モノラルとステレオでの 8 ビットと 16 ビットのオーディオ、サンプルレートは 8 kHz から 48 kHz まで。
ソフトウェアでの MIDI ウェーブテーブルの合成とシーケンシングとハードウェア MIDI デバイスへのアクセス
最大 64 チャネルがデジタルオーディオと合成 MIDI 音楽のミキシングおよびレンダリングが可能な、オールソフトウェアミキサー。
さらに、開発者が現在の実装の機能を拡張するときに使用できるサービスプロバイダインタフェースが API で定義されています。また、ユーザーは上記以外のファイルフォーマット、コーデック、デバイスをサポートするモジュールをインストールできます。API には、システムで現在利用できるリソースに対し、照会やアクセスができる手段も提供されています。
J2SE 1.3.0 には、新しいロボット API が組み込まれています。これは、Abstract Window Toolkit (AWT) や Swing のテストの自動化を行うために設計されたものです。ロボット API を使用すると、Java プログラミング言語で書かれたコードで、低レベルのネイティブのマウスやキーボードの入力イベントが生成できます。イベントはオペレーティングシステムレベルで生成されるため、他の AWT への実際のユーザー入力と区別することはできません。
ロボット API は主としてテストの容易性を向上させるため設計されたものですが、次のような利点もあります。
利用のしやすさ (アクセシビリティ) を考慮したアプリケーションでは、さらに多くのフィードバックが可能になります。たとえば、ユーザーが音声コマンドを使用して画面オブジェクトを操作する場合に、マウスポインタを動かして、操作中のオブジェクトを示すこともできます。
ロボット API では、コンピュータを利用したトレーニング (CBT) などのデモを行うアプリケーションが作成できます。
J2SE 1.3.0 では、印刷に対する API も改善されています。新しい印刷 API では、開発者はプラットフォーム固有の機能を使用して AWT コンポーネントから簡単に印刷できます。新しい API を使用すると、開発者は印刷ジョブのプロパティを制御することができます。制御可能なプロパティには、出力先、コピー数、ページ範囲、ページサイズ、方向、印刷の品質などがあります。
J2SE 1.3.0 では、同じアプリケーションによる複数のモニター上の GUI フレームとウィンドウのレンダリングがサポートされるようになりました。Java 2DTM API では、マルチスクリーンの次の 3 つの構成がサポートされています。
複数の独立したスクリーン
複数のスクリーンで、1 つのスクリーンが一次スクリーンとなり、他のスクリーンでは一次スクリーンに表示されているもののコピーが表示される
仮想デスクトップを形成する複数のスクリーン
J2SE 1.3.0 の新しい動的フォントロード API を使用すると、開発者は実行時に TrueType フォントの作成やロードが行えます。開発者は Java 2D API を使用して、動的にロードされたフォントに対し、サイズ、スタイル、変形などの希望する機能を与えることができます。
J2SE 1.3.0 の Java 2D API では、Portable Graphics Network (PGN) フォーマットがサポートされるようになりました。このフォーマットは、ラスターイメージを劣化することなく可搬性のある方法で保存できる、柔軟で広範囲な非独占的なファイルフォーマットです。PGN ではグレースケール、索引付きのカラー、トゥルーカラーイメージをサポートしており、アルファチャネルを利用できます。
JPDA 技術とは複層構造のデバッグアーキテクチャで、プラットフォーム、仮想マシンの実装、および J2SE バージョンの枠を超えて実行できるデバッガアプリケーションを、ツール開発者が簡単に作成できます。
JPDA には次の 3 つの層があります。
JVMDI - Java Virtual Machine Debug Interface
VM がデバッグ時に提供する必要があるデバッグサービスを定義します。
JDWP - Java Debug Wire Protocol
デバッグ中のプロセスと、Java Debug Interface を実装するデバッガフロントエンドの間で転送される、情報と要求のフォーマットを定義します。
JDI - Java Debug Interface
ツール開発者がリモートデバッガアプリケーションを書くときに、簡単に使用できる高水準の Java プログラミング言語インタフェースを定義します。
J2SE 1.3.0リリースおける国際化の向上によって、開発者は自国ユーザー向けにアプリケーションを今まで以上に柔軟にローカライズできるようになりました。ここでは、2 つの新しい機能について説明します。
入力方式とは、アプリケーションに対してテキスト入力を生成するため、キー入力や話しかけるなどのユーザーの操作を解釈するソフトウェアコンポーネントです。国際的なロケールでは、入力方式はテキストの入力に重要な役割を果たします。キーボードから直接入力できる英文テキストと異なり、日本語や中国語などの言語でのテキスト入力には、さらに高度な入力方式のフレームワークが必要となります。J2SE 1.3.0 では、開発者がそうした作業に対応するために必要となる強力なツール群が提供されています。
最新のテキスト編集コンポーネントでは、テキストが最終的に表示される文書の文脈内に、入力されたテキストが表示されます。これを「入力位置内 (on-the-spot)」入力といい、Java 2 Platform では常にサポートされてきました。
J2SE 1.3.0 では、中国などの国で好評な「入力位置下 (below-the-spot)」という、第二の入力スタイルに対するサポートが追加されています。「入力位置下」テキスト編集では、入力済みのテキストは別の編集ウィンドウに表示され、そのウィンドウはテキストの挿入位置の近くに自動的に配置されます。
開発者としては、入力方式のフレームワークの一部として表示されるウィンドウを変更したり、カスタマイズしたいと考える可能性があります。その場合、J2SE 1.3.0 では、入力方式のエンジンである Service Provider Interface (SPI) に対応する新しい API が提供されているため、開発者は自在に変更やカスタマイズができます。SPI を使用して、開発者は、ソフトウェアの必要性に応じて独自の入力方式のエンジンを作成できます。
国際ロケールに対する新たなサポートの例は他にもあります。J2SE 1.3.0 では、アラビア語やヘブライ語などのロケール用に、ツールバーやメニューバーを右から左という方向になるように、アプリケーションのフレームやダイアログボックスをレンダリングすることができます。
J2SE 1.3.0 では、Sun と協力関係にある企業との協議の結果や開発者からの要望に応えて、新たな機能がプラットフォームや Java 2 SDK ツールスイートに追加されています。拡張機能には、次のものがあります。
新しい javac コンパイラ
J2SE 1.3 では、javac コンパイラがゼロから再実装され、前回のバージョンの Java 2 SDK のコンパイラと比べて、多くのアプリケーションを高速で処理できます。
動的なプロキシクラス
J2SE 1.3 には、動的プロキシクラスに対する新しい API が組み込まれています。動的なプロキシクラスは、実行時に指定される一連のインタフェースを実装するもので、そのクラスのインタフェースを通してメソッド呼び出しはコード化され、別のオブジェクトに統一的なインタフェースを介して振り分けられます。したがって、動的プロキシクラスを使用して、一連のインタフェースに対する型安全 (type-safe) なプロキシオブジェクトが作成でき、コンパイル時ツールなどを使用してプロキシクラスを事前に生成しておく必要がありません。インタフェース API が示されたオブジェクトに対し型安全な呼び出しの反射的な振り分けを提供したい開発者にとって、動的なプロキシクラスは便利です。
たとえば動的プロキシクラスを使用して、任意のイベントリスナーインタフェースを複数実装するオブジェクトを作成し、そのイベントをログファイルに書き込むなど、一貫した方法で多種多様なイベントを処理することができます。
コレクション API の拡張
コレクション API の J2SE 1.3 バージョンが使いやすくなりました。1.3 のコレクション API には、List や Mapに対応した便利なメソッドやコピーコンストラクタが組み込まれています。
拡張 Java 基本クラス / Swing 機能
J2SE 1.3.0 の設計時には、Java 基本クラス API の Swing コンポーネントのチューニングや機能拡張に重点が置かれました。また、Swing ライブラリの性能のチューニングに加えて、いくつかの分野で新しい JFC/Swing 機能が Swing ライブラリに追加されました。一例として、軽量テーブルコンポーネントの可変的な高さの行が、新たにサポートされるようになりました。
数字ライブラリやユーティリティライブラリの改善
J2SE 1.3.0 には、同じ API を持つ数学に関連した 2 つのクラス、Math と StrictMath が組み込まれています。StrictMath は、数値演算に対してビット単位で再現可能な結果を返すものとして、その保証を必要とする開発者向けに定義されています。一方、Math クラスの実装は、指定された制約条件の中で変更されることがあり、パフォーマンスの向上を柔軟に図ることができます。パフォーマンスの向上は望んでいるが、複数のプラットフォームでビットごとの再現可能な結果は必要でないという開発者であれば、数値コードに StrictMath ではなく、Math を使用することができます。
任意精度算術演算用の J2SE API である BigInteger クラスと BigDecimal クラスでは、桁あふれを起こしたり精度が下がることがない数値演算が可能で、財務関連の計算など、さまざまな計算に不可欠な機能です。BigInteger クラスは、純粋な Java プログラミング言語コードに再実装されています。以前は、BigInteger クラスの実装は下位の C ライブラリをベースにしていました。新しい実装では、大半の標準的な演算が従来の実装より高速に実行できます。また、新しい API は新たに便利な機能が提供されており、使いやすくなっています。
新しい Timer API が Java 2 Platform に追加され、アニメーション、人間の操作に対するタイムアウト、画面上の時計とカレンダー、仕事のスケジューリングルーチン、忘備機能などがサポートされるようになりました。
仮想マシンのシャットダウンフック用の API が、java.lang.Runtime クラスに追加されています。これにより、ネットワーク接続の切断、セッション状態の保存、一時ファイルの削除など、Java プログラミング言語で書かれたアプリケーションがシャットダウンの動作を開始できるように、下位のオペレーティングシステムのプロセスシャットダウン通知機能に対し、簡単で移植性があるインタフェースが提供されています。
Zip ファイルや Jar ファイルを開くときに、新たに「終了時に削除」モードが追加され、長時間稼動しているサーバーアプリケーションは不要となった JarFile オブジェクトやデータを削除し、ディスク容量を解放できるようになりました。