flowthinclientは任意のJavaアプリケーションから、フローを実行するためのクライアント開発ライブラリです。
可能な限り依存性を小さくすることを目標に設計されており、JDK1.3以降の環境で使用することができます。
これを利用してServletやJavaで記述できるストアドプロシージャとフローを連携させることも可能です。
※
フローサービスの開発キットにはこれとは別のクライアント開発ライブラリが含まれています。
こちらは製品内部で使用しているるクラスを直接使用しているので、より細かな制御が可能となっていますが、
JDK5.0以降の環境が必要になり、依存するライブラリも多くなっています。
通常はこちらのライブラリを使用してください。
クライアントプログラムの開発と実行はJDK1.3以降の環境で行ってください。
開発及び実行環境には以下のライブラリが必要です。
JDK1.4には標準でXMLパーサーとしてcrimsonがバンドルされています。
しかし、crimsonはネームスペースの扱いに不具合があるため、flowthinclientをcrimsonで使用とするとloginメソッドのところで
「org.xml.sax.SAXParseException: ドキュメントのルート要素がありません。」というExceptionが発生します。
JDK1.4の環境でflowthinclientを使用する場合はxercesなどの別のXMLパーサーを使用するようにしてください。
JDK5.0以降の環境では標準パーサーがXercesに変更になっているのでXMLパーサーについて特に気にする必要はありません。
FlowExecuteClientはフローサービスと通信するためのクライアントクラスです。
このクラスを作成して任意のユーザでログインするとフローを実行可能な状態になります。
ログイン後にexecuteメソッドまたはpostメソッドを使用することでフローを実行します。
FlowExecuteClientを作成するコンストラクタの引数にはフローサービスの稼働しているサーバーのサーバー名とポート番号を指定します。
デフォルトポートでローカルホストにインストールしたフローサービスを指定する場合は、
FlowExecuteClient client = new FlowExecuteClient("localhost", 21381);
となります。本製品インストール時にポートを変更した場合はそのポートを使用してください。
ログイン後はそのユーザーがプロジェクトオーナーであるフローだけでなく、別ユーザーのフローも実行することができます。
ログインユーザーはフローの実行ユーザーとなります。
executeメソッドとpostメソッドの引数となるのがFlowRequestオブジェクトです。
このオブジェクトに実行するフローとそのパラメータを設定して、フローの実行をリクエストします。
FlowRequestには以下のパラメータを設定することができます。
実行するフローのプロジェクトオーナー名、プロジェクト名、フロー名を指定します。
必須です。
セッションIDを指定すると実行のセッションIDは指定のIDとなります。
サーバ上に既にそのIDのセッションが存在する場合は、そのセッションが使用され、ない場合は新規にそのIDでセッションが作成されます。
セッションIDを指定しなかった場合はリクエスト毎に新規のセッションが作成されます。
新規にセッションが作成される場合、そのセッションのライフタイム(タイムアウトまでの時間)はLifetimeの設定値となります。
Lifetimeが設定されなかった場合のデフォルト値は30分です。
フローの実行モードを指定します。
指定されなかった場合はNormalモードとなります。
ストリームを設定するためのメソッドはオーバーロードされていて何種類かあります。
用途に応じて使い分けてください。
引数 | ストリーム型 |
---|---|
int, byte[] | Binary|Text|HTML|CSV|FixedLength|XML|MIME |
int, java.io.InputStream | Binary|Text|HTML|CSV|FixedLength|XML|MIME |
int, java.io.File | Binary|Text|HTML|CSV|FixedLength|XML|MIME |
int, java.lang.String | Text|HTML|CSV|XML |
org.w3c.dom.Document | XML |
java.sql.ResultSet | Record |
String[], Value[]のList | Record |
設定するストリームのプロパティやフィールド定義は作成するフローのStartコンポーネントの OutputStreamFormat定義として行います。
実行するフローの引数を設定します。
ここで指定された引数はフローの公開フロー変数に設定されます。
指定された引数がフローの公開変数に存在しない場合は、その値は無視されます。
逆に存在するフローの公開変数に引数が指定されなかった場合は、その値はフロー作成時に指定したデフォルト値になります。
executeメソッドの返り値はFlowResponseオブジェクトとなります。
FlowResponseからは以下の内容が取得できます。
実行したフローが正常終了したか異常終了したかを示します。
このメソッドがfalseを返すのはリクエストしたフローが実行され、異常終了した場合です。
通信エラーやリクエストされたフローが見つからない場合などはFlowExecuteClient#executeメソッドがExceptionとなります。
正常終了した場合にフローのReturnValueを取得できます。
ReturnValueとは終了コンポーネントの「戻り値」プロパティの値です。
異常終了した場合のExceptionを取得できます。
ただし、クライアント側で取得できる情報はほとんどエラーメッセージのみです。
実行に使用されたセッションIDです。
同一クライアントから再度リクエストを発行する際にこのセッションIDを使用すれば、そのリクエストは同一セッションで動作します。
ストリームの取得方法はストリームの種類に応じて、何種類かのメソッドが用意されています。
用途に応じて使い分けてください。
フローに結果ストリームがない場合(フローがEndコンポーネントで終了した場合)はnullになります。
メソッド | 返り値 | ストリーム型 |
---|---|---|
getStreamAsBytes | byte[] | 全てのストリーム型 |
getStreamAsString | java.lang.String | Text|HTML|CSV|XML |
getStreamAsDocument | org.w3c.dom.Document | XML |
getStreamAsParameterList | java.util.Map | ParameterList |
getStreamAsCSV | (java.lang.String[]の)java.util.List | CSV |
getStreamAsRecord | (Value[]の)java.util.List | Record |
FlowExecは指定のフローを実行するための汎用アプリケーションです。
その実行クラスはflowthinclient.jarの中に含まれているので、このjarにクラスパスを通すだけで実行することができます。
また、その完全なソースコードはsampleディレクトリで公開されています。
FlowExecでは「-<パラメータ名>:XXXX」のような形式でパラメータを指定します。
指定できるパラメータの一覧は以下です。
パラメータ名 | 指定する値 |
---|---|
host | フローサービスの稼働しているサーバーのサーバー名(またはIPアドレス) 省略した場合は「localhost」 |
port | フローサービスの稼働しているサーバーのポート番号 省略した場合は「21381」 |
user | 実行するフローのユーザー名。必須 |
password | ユーザーのパスワード 省略した場合はパスワードなし |
project | 実行するフローのプロジェクト名。必須 |
flow | 実行するフローのフロー名。必須 |
mode | フローを実行するモード 「normal」「debug」「profile」のいずれか 省略した場合は「normal」 |
output | 実行結果のストリームをファイルに出力する場合のファイル名 省略した場合は実行結果はコンソールに出力されます。 |
p | 実行するフローの引数 「NAME=VALUE」の形式で複数指定可能 |
フローの戻り値はFlowExecアプリケーションの戻り値となります。(戻り値が数値以外の場合は無視されます。)
実際にフローを実行するコマンドラインは以下のようになります。
(flowthinclient.zipの中にはWindows/Unix用のFlowExec実行スクリプトが含まれています。)
//ローカルホストで実行中のフローサービスで/guestユーザーのProject1.Flow1を実行 //引数として「var1」と「var2」を指定 java -cp flowthinclient.jar com.infoteria.asteria.flowengine2.thinclient.app.FlowExec -user:/guest -password:guest -project:Project1 -flow:Flow1 -p:var1=aaa -p:var2=5
sampleディレクトリにはFlowExecのほかに「/guest」ユーザで作成した「Project1.Flow1」というフローを実行するサンプルも含まれています。
フローに受け渡すストリームとして扱うことができるサイズはファイルサイズで最大8MBまでになります。
また、8MB以内の場合でもフローサービスの最大メモリサイズを指定しない場合はOutOfMemoryErrorが発生することがあります。