public abstract class TransferRead_HTTP extends Object implements TransferRead
伝送要求に対して、HTTP経由でデータを読取します。
読取方法により読み取ったデータをPOSTデータとして送信し、リモートホスト上で
伝送処理を実行します。
処理の流れとしては以下のようになります。
①HTTPで読取処理を実行するためのサーブレットを呼び出す。
②①で呼び出しされたサーブレットが、読取処理を実行するためのオブジェクトを生成し、
読取処理を実行する。
③読取した結果XMLをパースし、その読取データを伝送オブジェクトに渡し伝送処理を実行する。
④伝送処理実行後、③の結果XMLから得られる更新キー(配列)をPostデータとして渡し、
HTTP経由で後処理(完了処理またはエラー処理)を実行する。
まず①について、呼び出しされるサーブレットは、
[リモート接続先URL]servlet/remoteControl?class=TransferReadWrapper&type=read になります。
[リモート接続先URL]は、http://[ホスト名]:[ポート番号]/[コンテキスト名]の形式になりますが、
これについては、読取対象で指定します。
接続時にエラーが発生した場合や、レスポンスデータに対して"row_error"という
文字列が存在する場合は、エラーとして処理します。
それ以外の場合は、正常終了として処理します。
次に②について、サーブレット経由で行われる伝送処理について、その読取方法は、
このクラスを継承した各サブクラスのクラス名により決定されます。
具体的には、サブクラスのクラス名に対して、このクラス(親クラス)のクラス名+"_" を除外した部分が
読取方法として認識されます。
例として、サブクラス名がTransferRead_HTTP_CB01の場合、接続先における読取方法は
旧伝送DB読取(CB01)となります。
また、リモートホスト上で実行される伝送処理の[リモート読取対象]は、元の読取対象で設定します。
このことから、HTTP経由で読取処理を行う場合、元の読取対象には、[リモート接続先URL]と
[リモート読取対象]の2つを設定する必要があります。
具体的な設定方法については各サブクラスのJavaDocを参照して下さい。
③について、返されるXMLデータは[レスポンスデータのXML構造]の形式になります。
ここで、dataListは、伝送実行オブジェクトに渡されるデータになります。
また、keyListについては、伝送実行終了後、HTTP経由で完了処理を行うための更新キーになります。
(ローカルの伝送読取オブジェクトはトランザクションに対して同一オブジェクトになりますが、
HTTP接続先でサーブレット経由で生成される、リモートの伝送読取オブジェクトは、
読取処理と完了/エラー処理で異なります。このため、読取したデータのキーをローカルに保持し、
最後の完了/エラー処理の際に、読取したデータのキー(更新キー)をPostDataとして渡すことで、
正しく完了/エラー処理が行われるように対応しています)
最後に④について、呼び出しされるサーブレットは、
[リモート接続先URL]servlet/remoteControl?class=TransferReadWrapper&type=complete (正常終了時)
[リモート接続先URL]servlet/remoteControl?class=TransferReadWrapper&type=error (エラー発生時)
となります。
HTTP接続時には、以下のポストデータが送信されます。
[ポストデータ]
・KBREAD (読取方法) ※サブクラスの最後の"_"(アンダーバー)以降の文字列
・READOBJ (リモート読取対象) ※ローカルの読取対象からリモート接続先URLを除いた文字列
・READPRM (読取パラメーター)
・KBEXEC (実行方法)
・EXECDBID (実行接続先DBID)
・EXECOBJ (実行対象)
・EXECPRM (実行パラメーター)
・ERROR_SENDTO (読み取り元ホストコード)
・HFROM (読み取り元ホストコード)
・n (キー件数)
・k1~kn (キー)
また、データ読取時に返されるXMLは以下の構造をしています。
[レスポンスデータのXML構造]
<root>
<dataList>
<data>aaa</data>
<data>bbb</data>
<data>ccc</data>
<data>ddd</data>
<data>eee</data>
</dataList>
<keyList>
<key>KEY1</key>
<key>KEY2</key>
<key>KEY3</key>
</keyList>
</root>| コンストラクタと説明 |
|---|
TransferRead_HTTP() |
| 修飾子とタイプ | メソッドと説明 |
|---|---|
void |
complete(TransferConfig config,
Transaction tran)
読取したデータに対して完了処理を行います。
|
protected URLConnect |
connect(String url,
String postData,
TransferConfig config)
指定のURLに接続します。
|
void |
error(TransferConfig config,
ApplicationInfo appInfo)
読取したデータに対してエラー処理を行います。
|
String[] |
getKeys()
このクラスでは、サポートされていません。
|
protected String |
getPostData(String[] keys,
TransferConfig config)
伝送設定オブジェクトをURLパラメーターに変換します。
|
protected abstract String |
getRemoteHost()
リモート接続先URLを返します。
|
protected abstract String |
getRemoteReadObj()
リモート接続先の読取対象を返します。
|
String[] |
read(TransferConfig config,
Transaction tran)
URL接続を行いデータを読み取ります。
|
void |
setKeys(String[] keys)
このクラスでは、サポートされてません。
|
protected abstract void |
splitReadObj(String localReadObj)
ローカルの読取対象を、リモート接続先の読取対象とリモート接続先URLに分解します。
|
public String[] read(TransferConfig config, Transaction tran)
read インタフェース内 TransferReadconfig - 伝送設定オブジェクトtran - トランザクションオブジェクトpublic void complete(TransferConfig config, Transaction tran)
complete インタフェース内 TransferReadconfig - 伝送設定オブジェクトtran - トランザクションオブジェクトpublic void error(TransferConfig config, ApplicationInfo appInfo)
error インタフェース内 TransferReadconfig - 伝送設定オブジェクトappInfo - DB接続情報public String[] getKeys()
getKeys インタフェース内 TransferReadpublic void setKeys(String[] keys)
setKeys インタフェース内 TransferReadkeys - 更新キー配列(可変長引数)protected abstract void splitReadObj(String localReadObj)
localReadObj - ローカルの読取対象protected abstract String getRemoteHost()
splitReadObj(String)の後に呼び出しする必要があります。protected abstract String getRemoteReadObj()
splitReadObj(String)の後に呼び出しする必要があります。protected URLConnect connect(String url, String postData, TransferConfig config) throws IOException
url - 接続URLpostData - POSTするデータconfig - 伝送設定オブジェクトIOException - なんらかのエラーが発生した場合。protected String getPostData(String[] keys, TransferConfig config)
keys - 更新キー(配列)config - 伝送設定オブジェクトWebアプリケーションフレームワーク openGionCopyright (c) 2009 The openGion Project.