Caché の今回のバージョンでは、以下のような多くの重要な Java 新機能が提供されています。
Java サポートに関する詳細は、Caché での Java の使用法 を参照してください。
初期 Java バインディングのアップグレード
このセクションでは、初期に生成された Caché Java バインディングを使用して記述されたアプリケーションを、今回のバージョンにアップグレードする方法を説明します。
アーキテクチャの相違点
Caché Java バインディングの新バージョンでは、以前のバージョンからの多くの重要なアーキテクチャが変更されています。以下は その概要です。
API の相違点
以前の Java バインディングから、API に多くの変更がありました。この変更には、アプリケーションの変更を必要とするものもあります。
環境の変化
従来の Java バインディングは、2 つの JAR ファイル CacheJava.jarCacheJDBC.jar を使用していましたが、新しいバインディングでは、CacheDB.jar というファイルのみを使用します。新しい JAR ファイルは、<cache-install-dir>/dev/java/lib/CacheDB.jar に保存されています。
接続
Caché サーバに接続するために、従来のバインディングは ObjectFactory クラスを使用していましたが、新しいバインディングは、CacheDatabase クラスを使用します。
新しいバインディングの接続は、Caché JDBC インタフェースと統合されているので、接続は SQL とオブジェクト・アクセスの両方をサポートします。また、従来のバインディングは Java と JDBC に対し別々の接続が必要でしたが、今回のバージョンでは、単独の接続が Java バインディングと JDBC ドライバの両方をサポートします。
従来のバインディングでは、以下のコードでサーバに接続していました。
 ObjectFactory factory = null;
 String url="cn_iptcp:127.0.0.1[1972]:SAMPLES";

 // ...

 factory = new ObjectFactory(url);
新しいバインディングでの接続コードは以下の通りです。
 Database dbconnection = null;
 String url="jdbc:Cache://localhost:1972/SAMPLES";
 String username="_SYSTEM";  // null for default
 String password="sys";  // null for default

 dbconnection = CacheDatabase.getDatabase(url, username, password);
一旦接続されると、新しいバインディングの Database オブジェクトと、従来のバインディングの ObjectFactory オブジェクトとはまったく同じ振る舞いをします。接続の構築に関する詳細は、Caché での Java の使用法データベースへの接続 のセクションを参照してください。
Note:
現在は、引き続き ObjectFactory を使用することもできますが、これはお勧めしません。 また、将来のリリースからも削除される予定です。
クラス、メソッド、およびプロパティ
以前のバインディングと同様に、メソッドは Java メソッドとして投影されます。また、プロパティが Java の getset のメソッドとして投影される点も従来通りです。
データ型と NULL の処理
従来のバインディングでは、メソッド引数と返り値は、基本タイプ (intbooleanfloat など) としても知られる Java リテラル・データ型として表されていましたが、新しいバインディングでは、Java オブジェクト (IntegerBooleanFloat など) として表されます。これは、NULL 値を持つ引数を指定する機能のように、より優れた柔軟性を提供します。
以下は、従来のバインディングを使用した例です。
 /* Insert a new element */
 colors._insert( "Orange" );

 /* Remove the first element */
 colors._removeAt( 1 );

 /* Show the changes to the collection */
 colors = person.getFavoriteColors();
 for (r = 1; r <= colors._count(); r++) {
   System.out.println
      ( "Element #" + Integer.toString( r ) + "->" + colors._getAt( r ) );
 }
上記のコードでは、_removeAt メソッドと _getAt メソッドは、int 基本タイプで実行し、_count メソッドは int を返します。
新しいバインディングを使用する、類似するコードは以下の通りです。
 /* Insert a new element */
 colors._insert( "Orange" );

 /* Remove the first element */
 colors._removeAt( new Integer(1) );

 /* Show the changes to the collection */
 colors = person.getFavoriteColors();
 for (r = 1; r <= colors._count().intValue(); r++) {
   System.out.println
       ( "Element #" + Integer.toString( r ) + "->" 
                     + colors._getAt( new Integer(r) ) );
 }
従来のバインディングから新しいバインディングへの変更は以下の通りです。
クエリと結果セット
新しいバインディングによって、JDBC は単独の接続でオブジェクト・アクセスを呼び出すことができるようになります。これにより、JDBC の意味論を使用して、Java アプリケーション内でダイナミック SQL クエリを実行することができます。
新しいバインディングのクエリは、標準 JDBC ResultSet クラス内にその結果を配置します。 従来のバインディングの ResultSet クラスは、JDBC ResultSet クラスをモデルにした、しかしそれとは異なる Caché 仕様のクラスでした。
以下は、従来のバインディングのサンプル・クエリです。
 ResultSet rs = null; // this is a Cache class ...
 // ...

 /* Create a ResultSet */
 rs = new ResultSet(server, "Sample.Person", "ByName");

 // ...
 /* Execute the query and loop across the returned rows */
 rs.execute();
以下は、新しいバインディングの類似したコードです。
 CacheQuery cq = null;
 java.sql.ResultSet rs = null;

 // ...

 /* Create a CacheQuery */
 cq = new CacheQuery( server, "Sample.Person", "ByName" );
 /* Execute the query and loop across the returned rows */
 rs = cq.execute("");
新しいバインディングは、CacheQuery クラスを使用してクエリを実行し、その結果を標準 JDBC 結果セットに配置します。 これにより、クエリを準備し、実行する機能と、結果セットを処理する機能を分割できるという利点があります。
Note:
引き続き、従来の Caché ResultSet メカニズムを使用することができますが、これはお勧めしません。 また、将来のリリースでは削除される予定です。
ストリーム、コレクション、およびリレーションシップ
ストリーム、コレクション、およびリレーションシップのインタフェースは現在、Java 標準インタフェースを使用しています。