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 つは、 4 つ目のパラメーターの値に応じて異なる意味をとります。 この単純なインターフェースによって、 さまざまなプログラミング環境や言語から容易に API を呼び出すことが可能になります。 その欠点は、1 つの関数と 4 つのパラメーターのパッキングが非常に複雑であるということです。

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

機能

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

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

現在 HACL でインプリメントされていない EHLLAPI 機能には次のものがあります。

セッション ID

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

プレゼンテーション・スペース・モデル

HACL のプレゼンテーション・スペース・モデルは、 EHLLAPI のものより簡単に使うことができます。 HACL プレゼンテーション・スペースは、 各々が 1 つのデータ・タイプを含むいくつかのプレーンで構成されます。 プレーンは次のものです。

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

このモデルは、 バッファー内でプレゼンテーション・スペースのテキストおよび非テキストのデータがしばしばインターリーブされる 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 では、すべてのイベント処理が単純化され、 すべてのイベント・タイプを通して一貫性が保たれます。 アプリケーションは、明示的に複数の実行スレッドを作成する必要はなく、 HACL が内部でスレッド化を処理します。

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

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

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

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

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

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


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