IBM Books

Java 用 ホスト・アクセス・クラス・ライブラリー


EHLLAPI からの移行

現在、エミュレーター高水準言語 API (EHLLAPI) 用に書かれているアプリケーションを、ホスト・アクセス・クラス・ライブラリー (HACL) を使えるよう修正することができます。一般に、EHLLAPI から HACL に移行するには、大幅なソース・コードの変更やアプリケーションの再構成が必要です。 HACL は、EHLLAPI とは異なるプログラミング・モデルを提供するので、一般に、異なるアプリケーション構造を必要とします。

以下のセクションは、EHLLAPI に慣れたプログラマーが、 HACL と EHLLAPI との類似点および相違点を理解するのに役立ちます。以下の情報を使えば、 HACL を使えるよう個々のアプリケーションを修正する方法を理解することができます。

注: EHLLAPI では、セッション という用語は、 HACL の接続 と同じ意味で使われます。このセクションでは、これらの用語を交換可能なものとして使っています。

実行 / 言語インターフェース

最も基本的なレベルでは、EHLLAPI と HACL には、アプリケーション・プログラムからの API の呼び出し方のメカニズムにおける違いがあります。

EHLLAPI は、複数用途のパラメーターを使う単一の呼び出し点インターフェースとして実装されています。 DLL 内の 1 つのエントリー・ポイント (hllapi) が、 4 つのパラメーターの固定されたセットをベースとしてすべての関数を提供します。パラメーターのうちの 3 つは、最初のパラメーターの値に応じて異なる意味をとります。この単純なインターフェースによって、さまざまなプログラミング環境や言語から容易に API を呼び出すことが可能になります。その欠点は、1 つの関数と 4 つのパラメーターの中に多くの複雑性が集約されているということです。

HACL は、明示的なエントリー・ポイントまたは関数の代わりに一連のプログラミング・オブジェクトを提供するオブジェクト指向インターフェースです。オブジェクトには、ホスト接続を操作するのに使えるプロパティーおよびメソッドがあります。構造の内容やパラメーター・コマンド・コードの詳細について配慮する必要はなく、アプリケーション機能に注意を集中できます。

機能

EHLLAPI レベルでは使えない多数の機能を、 HACL はハイレベルで提供します。また、現在どの HACL クラスでも実装されていない EHLLAPI 機能もいくつかあります。

HACL に固有の機能には次のものがあります。

現在 HACL で実装されていない EHLLAPI 機能には次のものがあります。

セッション ID

HACL アーキテクチャーは 26 個のセッションに限定されていません。したがって、EHLLAPI で使われるような単一の文字セッション ID は適していません。 HACL はセッション名の概念を使用します。セッション名とはセッションを認識する単なるストリングです。セッション名は、ECLSession のインスタンスが作成される時に、アプリケーションによって提供されます。

パーソナル・コミュニケーションズでは、同時にアクティブにしておくことができる HACL セッションの数は 26 までであるという制限があります。アクティブな HACL セッションは、有効な .WS プロファイルで構築された ECLSession オブジェクトとして、あるいは、パーソナル・コミュニケーションズ・セッションがすでに存在する場合、それに接続された ECLSession オブジェクトとして定義されます。有効な .WS プロファイルが提供される場合には、必要に応じてセッションが開始されます。

表示スペース・モデル

HACL の表示スペース・モデルは、 EHLLAPI のものより簡単に使うことができます。 HACL 表示スペースは、おのおのが 1 つのデータ・タイプを持ついくつかのプレーン で構成されます。プレーンには、以下のものがあります。

プレーンは、すべて同サイズであり、ホスト表示スペース内の各文字位置につき 1 文字 (Java ネイティブ・タイプ) ずつを含んでいます。アプリケーションは、ECLPS.GetScreen メソッドを使って、必要な任意のプレーンを取得できます。

このモデルは、EHLLAPI とは異なります。EHLLAPI では、バッファー内で表示スペースのテキストおよび非テキストのデータがしばしばインターリーブされます。アプリケーションは、どのタイプのデータを取り出すかを指定する EHLLAPI セッション・パラメーターを設定してから、次にそのデータをバッファーにコピーするために別の呼び出しを行わなければなりません。 HACL モデルを使うと、アプリケーションは、1 回の呼び出しで必要なデータを取得することができます。 1 つのバッファー内に異なるデータが混在することはありません。

SendKey インターフェース

ホストにキーストロークを送信する HACL メソッド (ECLPS.SendKeys) は、 EHLLAPI の SendKey 関数に似ています。ただし、EHLLAPI では、 ENTER、PF1、および BACKTAB などの非テキスト・キーを表すのに暗号エスケープ・コードが使われます。 ECLPS オブジェクトは、そのようなキーストロークを表すのに、ブラケットで囲んだ略号と呼ばれるキーワードを使います。たとえば、次に示すサンプルでは、現行カーソル位置に「ABC」の文字を入力し、その後に [ENTER] キーが続きます。

ps.SendKeys("ABC[enter]"); // Send keystrokes

詳細については、付録 A. Sendkeys 略号キーワードを参照してください。


イベント

EHLLAPI では、非同期通知を受け取る方法がいくつかあります。たとえば、セマフォー、ウィンドウ・メッセージ、およびポーリングを使うことなどです。 HACL では、すべてのイベント・タイプについて、 1 種類の一貫性のあるイベント通知法が提供されており、内部的にスレッド化するようにします。

ただし、別の実行スレッドでイベント・プロシージャーが呼び出されることに留意していなければなりません。イベント・プロシージャーからのアクセス時には、ダイナミック・アプリケーション・データへのアクセスを同期化しなければなりません。

PS 接続 / 切断およびマルチスレッド化

EHLLAPI アプリケーションは、別々のセッションへの接続を管理するには、 ConnectPS および DisconnectPS EHLLAPI 機能を呼び出さなければなりません。アプリケーションは、セッションに永続的に接続されたままにならないようにするため、慎重にコーディングしなければなりません。セッションは、すべての EHLLAPI アプリケーションで共有しなければならないからです。また、使用する他の EHLLAPI 機能によっては、アプリケーションがセッションに接続されていることも事前に確認しなければなりません。

HACL では、アプリケーションが明示的にセッションを接続または切断する必要はありません。すべての HACL オブジェクトは、その作成時に特定のセッションに関連付けられています。複数の異なるホストにアクセスするのにアプリケーションで必要なことは、ホストごとに別々の ECLSession のインスタンスを作成することだけです。複数の接続 (セッション) と対話するアプリケーションの場合、これによって、複数の接続を管理するのに必要なコードを大幅に単純化することができます。

また EHLLAPI では、作業セッションが 1 つであることに加えて、アプリケーションのマルチスレッド特性に対する制約もあります。 EHLLAPI インターフェースを呼び出すスレッドが複数あるアプリケーションの場合、表示スペースとの接続および切断は慎重に管理する必要があります。スレッドが複数あってもアプリケーションは 1 度に 1 つのセッションとしか対話できません。

HACL では、マルチスレッド化に関してアプリケーションは特に制約を受けません。アプリケーションは、任意の数のスレッド上で任意の数のセッションと並列対話することができます。


[ ページの先頭 | 前のページ | 次のページ | 目次 ]