flowthinclientは任意のJavaアプリケーションから、フローを実行したりフローの情報を取得したりするためのクライアント開発ライブラリです。
可能な限り依存性を小さくすることを目標に設計されており、JDK7.0以降の環境で使用することができます。
これを利用してServletやJavaで記述できるストアドプロシージャとフローを連携させることも可能です。
※
フローサービスの開発キットにはこれとは別のクライアント開発ライブラリが含まれています。
こちらは製品内部で使用しているるクラスを直接使用しているので、より細かな制御が可能となっていますが、
JDK8.0以降の環境が必要になり、依存するライブラリも多くなっています。
通常はこちらのライブラリを使用してください。
クライアントプログラムの開発と実行はJDK7.0以降の環境で行ってください。
開発及び実行環境には以下のライブラリが必要です。
※
flowthinclient.jarはflowthinclientキット(ZIP形式)の中に含まれています。
AsteriaClientはフローサービスとの通信を行うクライアントの基底クラスです。
サブクラスとして次の3つがあります。
FlowExecuteClientなどのAsteriaClientサブクラスを作成するコンストラクタの引数にはフローサービスの稼働している
サーバーのサーバー名とポート番号を指定します。
デフォルトポートでローカルホストにインストールしたフローサービスを指定する場合は、
FlowExecuteClient client = new FlowExecuteClient("localhost", 21381);
となります。フローサービスインストール時にポートを変更した場合はそのポートを使用してください。
AsteriaClientではloginメソッドとlogoutメソッドが定義されており、ユーザー名とパスワードを指定して フローサービスにログインすることで各種操作を行うことが可能になります。
login/logoutはすべてのAsteriaClientサブクラス共通の操作ですが、別のAsteriaClientをコンストラクタの引数 とすることでログイン状態を引き継いだまま別のクライアントを作成することも可能です。
FlowExecuteClient execClient = new FlowExecuteClient("localhost", 21381); execClient.login("user1", "password"); ... FlowDeployClient deployClient = new FlowDeployClient(execClient); //別のAsteriaClientを引数として作成した場合はそのログイン状態が引き継がれます。 //つまりloginメソッドのコールを行わずに情報取得を行うことが可能です。 String[] projectNames = deployClient.getProjectList();
FlowExecuteClientはフローを実行するためのクライアントクラスです。
このクラスを作成して任意のユーザでログインするとフローを実行可能な状態になります。
フローの実行メソッドにはexecuteメソッドとpostメソッドがありますが、それぞれのメソッドの意味は以下の通りです。
executeメソッドとpostメソッドの引数となるのがFlowRequestオブジェクトです。
このオブジェクトに実行するフローとそのパラメーターを設定して、フローの実行をリクエストします。
FlowRequestには以下のパラメーターを設定することができます。
実行するフローのプロジェクトオーナー名、プロジェクト名、フロー名を指定します。
必須です。
UserNameにはログインしたユーザーとは別のユーザー名を指定することもできますが、その場合は実行対象のフローが
ログインユーザーに対して実行を許可していなければなりません。
(プロジェクトまたはフローの「実行を許可するユーザー」プロパティにログインユーザーが指定されている必要があります。)
セッションIDを指定すると実行のセッションIDは指定のIDとなります。
サーバー上に既にそのIDのセッションが存在する場合は、そのセッションが使用され、ない場合は新規にそのIDでセッションが作成されます。
セッションIDを指定しなかった場合はリクエスト毎に新規のセッションが作成されます。
新規にセッションが作成される場合、そのセッションのライフタイム(タイムアウトまでの時間)はLifetimeの設定値となります。
Lifetimeが設定されなかった場合のデフォルト値は30分です。
フローの実行モードを指定します。
指定されなかった場合はNormalモードとなります。
フローの実行ユーザーを指定します。
setLoginUserAsExecuteUserにtrueを設定した場合はログインユーザーがフローの実行ユーザーになります。
ストリームを設定するためのメソッドはオーバーロードされていて何種類かあります。
用途に応じて使い分けてください。
引数 | ストリーム型 |
---|---|
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を使用すれば、そのリクエストは同一セッションで動作します。
実行に使用されたリクエストIDです。
標準ではFlowService.logにフローの実行ログがリクエスト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 |
ストリームがCSV, FixedLength, Record, ParameterListのいずれかの場合はgetFieldNamesメソッドで そのフィールド名を取得することができます。
FlowDeployClientはフローの情報を取得・設定するためのクラスです。
を行うことができます。
FlowDeployClient client; //URL実行設定の登録 URLTrigger t = new URLTrigger(); t.setFlow("Project1", "Flow1"); t.setURL("/hoge"); t.setName("URL実行設定1"); t.setDescription("URL実行設定1の説明"); //registerTriggerによって返されるTriggerはサーバーに登録された実行設定であり引数のTriggerとは別インスタンスです。 URLTrigger t2 = (URLTrigger)client.registerTrigger(t); //実行設定の更新 t2.setEnabled(false); t2.setExecuteMode(Trigger.MODE_DEBUG); client.updateTrigger(t2);//クライアント側でnew したTriggerはupdateTriggerメソッドに渡すとエラーになるのでサーバーから取得したインスタンスを引数にします。
FlowAdminClientはフローの実行状態を取得したり強制終了を行うためのクラスです。
を行うことができます。
//ある程度時間のかかるフローをpostメソッドで実行する FlowExecuteClient execClient; FlowRequest request = new FlowRequest(); request.setUserName("/guest"); request.setProjectName("Project1"); request.setFlowName("Flow1"); String requestId = execClient.post(request); //フローの実行状態の表示 FlowAdminClient adminClient = new FlowAdminClient(execClient); RunningStatus rs = adminClient.showRequest(requestId); //フローの実行が終了している場合はnullが返ります。 if (rs != null) { System.out.println(rs); System.out.println("強制終了前に最後に実行したコンポーネント:" + adminClient.killRequest(requestId)); }
FlowExecは指定のフローを実行するための汎用アプリケーションです。
その実行クラスはflowthinclient.jarの中に含まれているので、このjarにクラスパスを通すだけで実行することができます。
また、その完全なソースコードはsampleフォルダーで公開されています。
FlowExecでは「-<パラメーター名>:XXXX」のような形式でパラメーターを指定します。
指定できるパラメーターの一覧は以下です。
パラメーター名 | 指定する値 |
---|---|
host | フローサービスの稼働しているサーバーのサーバー名(またはIPアドレス) 省略した場合は「localhost」 |
port | フローサービスの稼働しているサーバーのポート番号 省略した場合は「21381」 |
user | 実行するフローのユーザー名。必須 |
password | ユーザーのパスワード 省略した場合はパスワードなし |
project | 実行するフローのプロジェクト名。必須 |
flow | 実行するフローのフロー名。必須 |
mode | フローを実行するモード 「normal」「debug」「profile」「high」のいずれか 省略した場合は「normal」 |
output | 実行結果のストリームをファイルに出力する場合のファイル名 省略した場合は実行結果はコンソールに出力されます。 |
p | 実行するフローの引数 「NAME=VALUE」の形式で複数指定可能 |
retryCount | リクエストがエラーとなった場合のリトライ回数 省略した場合は「0」 リトライが実行されるのはキューあふれなどのフロー実行以外の要因でエラーとなった場合です。実行したフローが異常終了した場合はリトライは実行されません。 |
retryInterval | リトライを実行する場合の待機間隔(秒単位) 省略した場合は「1」 |
フローの戻り値は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」というフローを実行するサンプルも含まれています。