サンプルプログラムのソースコード:
1 | import java.io.BufferedOutputStream; |
ソースコードについて解説します。
SocketClientクラス
11行目
サンプルで使用するSocketオブジェクトを生成します。
mainメソッド
30行目から38行目
実行時の引数から以下を取得します。
引数 | 変数 | 用途 |
---|---|---|
1 | hostName | CEPサーバのホスト名 |
2 | port | Socketアダプターポート |
3 | dataType | イベントデータ形式 |
4 | charSet | 文字セット |
5 | eventTypeId | イベントタイプID |
6 | data | イベントデータ本体 |
7 | lWait | データ送信待ち時間 |
8 | loop | データ送信回数 |
9 | dataCount | 一度に送信するイベントデータの数 |
40行目
自身のオブジェクトを生成します。
41行目
送信用メソッドを呼び出します。
引数には一度に送信するイベントデータの数、イベントデータ形式、文字セット、イベントタイプID、イベントデータ本体、データ送信回数、データ送信待ち時間を渡します。
43行目
CEPサーバからのレスポンスを出力します。
SocketClientコンストラクタ
91行目
引数からInetSocketAddressを作成します。
93行目
使用するネットワーク入出力バッファーに設定するサイズのヒントを設定します。
94行目
ソケットをCEPサーバに接続します。
sendMessageメソッド
57行目
ソケットからDataOutPutStreamを作成します。
60行目から85行目
引数で指定したデータ送信回数分のループです。
62行目から82行目
引数で指定した一度に送信するイベントデータ数分のループです。
64行目
イベントデータ本体に含まれる %COUNTER% をループ回数で置換します。
これは、毎回異なるイベントデータを送信するための措置です。
以下のようなイベントデータを想定しています。
"STR0001","CPN0001",%COUNTER%,"30"
66行目
イベントデータ(独自フォーマット)の総サイズを求めます。
68行目
イベントデータ(独自フォーマット)の総サイズをwriteします。
70行目
イベントデータ形式のバイト配列をwriteします。
72行目
イベントタイプIDのサイズをwriteします。
73行目
イベントタイプIDのバイト配列をwriteします。
75行目
文字セットのサイズをwriteします。
76行目
文字セットのバイト配列をwriteします。
78行目
イベントデータ本体のサイズをwriteします。
79行目
イベントデータ本体のバイト配列をwriteします。
81行目
DataOutputStreamをflushします。
84行目
次のイベントデータの送信までwaitします。
92行目
送信完了通知(0)を送信し、イベント送信の完了をCEPサーバに通知します。
93行目
DataOutputStreamをflushします。
readResponseメソッド
98行目
ソケットからBufferedReaderを生成します。
100行目
応答メッセージ(1行)を読込みます。
101行目
標準出力に応答メッセージの内容を出力します。
サンプルの実行例を以下に記述します。
なお、例ではDebugLogListenerを使用し、エンジンログにデバッグ情報を出力しています。
コマンド実行結果
# java -cp ./ SocketClient localhost 8001 CSV UTF-8 CSVEvent SOCKET,CSV,%COUNTER% 1 2 2 <ENTER>
RESPONSE:0000:6:Sending message completed normally.
エンジンログ出力結果
2012-07-29 13:27:49,410 [DEBUG] abc:length=1
abc[0]
operation :CSV: String
count :0: String
ID :SOCKET: String
2012-07-29 13:27:49,422 [DEBUG] abc:length=1
abc[0]
operation :CSV: String
count :1: String
ID :SOCKET: String
2012-07-29 13:27:49,427 [DEBUG] abc:length=1
abc[0]
operation :CSV: String
count :2: String
ID :SOCKET: String
2012-07-29 13:27:49,428 [DEBUG] abc:length=1
abc[0]
operation :CSV: String
count :3: String
ID :SOCKET: String
サンプルの実行例を以下に記述します。
なお、例ではDebugLogListenerを使用し、エンジンログにデバッグ情報を出力しています。
コマンド実行結果
# java -cp ./ SocketClient localhost 8001 XML UTF-8 XMLEvent '<?xml version="1.0" encoding="UTF-8"?>\
<XMLEvent><ID>SOCKET</ID> <operation>XML</operation> <count>%COUNTER%</count></XMLEvent>' 1 2 2 <ENTER>
RESPONSE:0000:4:Sending message completed normally.
(注) 見やすさのため、上記の例では入力コマンドの途中で「\」で改行しています。実際には「\」は入力せず、次の行の内容を続けて入力します。
エンジンログ出力結果
2012-07-29 13:30:56,861 [DEBUG] abc--0:length=1
abc--0[0]
operation :XML: String
count :0: String
ID :SOCKET: String
2012-07-29 13:30:56,862 [DEBUG] abc--0:length=1
abc--0[0]
operation :XML: String
count :1: String
ID :SOCKET: String
2012-07-29 13:30:56,865 [DEBUG] abc--0:length=1
abc--0[0]
operation :XML: String
count :2: String
ID :SOCKET: String
2012-07-29 13:30:56,865 [DEBUG] abc--0:length=1
abc--0[0]
operation :XML: String
count :3: String
ID :SOCKET: String