クライアント開発者ガイド

  1. クライアント開発について
    1. JDK・クラスパス
    2. thinclientとの違い
  2. FlowExecuteClient
  3. FlowRequest
    1. UserName, ProjectName, FlowName
    2. SessionId, Lifetime
    3. ExecuteMode
    4. ExecuteUser
    5. Stream
    6. Params
  4. FlowResponse
    1. isSucceed
    2. Stream
    3. ReturnValue
    4. SessionId
    5. Exception
  5. サンプル

1 クライアント開発について

フローサービスでは任意のJavaプログラムからフローの実行をリクエストし、その返り値や結果ストリームを取得することが可能です。
これを利用してServletやJavaで記述できるストアドプロシージャとフローを連携させることも可能です。

1.1 JDK・クラスパス

クライアントプログラムの開発と実行はJDK8.0以降の環境で行ってください。
また、「DESINGER_HOME/lib」にある以下のjarファイルにクラスパスを通してください。

※ascore-1806.0400.jarと asdesigner-1806.0400.jarの「-1806.0400」の部分はインストールしたバージョンにより異なります。

作成するプログラムの内容によってはさらに別のjarファイルがコンパイル/実行に必要になる場合があります。
その場合、flow-ctrlのshowlibコマンドを使用することで必要とするクラスがどのjarに含まれているかを確認することができます。


//showlibコマンドによって指定のクラスがどのjarに含まれているかが表示されます。
>showlib com.infoteria.asteria.flowlibrary2.stream.StreamDataXML
jar:file:C:\Program Files\asteria5\server\lib\ascore-1806.0400.jar!/com/infoteria/asteria/flowlibrary2/stream/StreamDataXML.class

必要に応じてここで表示されたjarファイルにもクラスパスを通してください。

1.2 thinclientとの違い

フローサービスには外部Javaプログラムからフローを実行するためのライブラリとして、ここで説明するもの以外にもうひとつthinclientと呼ばれるものがあリます。
(区別のためにここで説明するライブラリはfatclientと呼ばれることがあります。)

thinclientでもfatclientでもできること自体は同じですが、thinclientでは実行のために必要なjarファイルがflowthinclient.jarひとつだけになるというお手軽がメリットとなります。
逆にfatclientではフローサービスの内部クラスを直接使用しているので、実行のためのオーバーヘッドが若干小さくなります。
単発のフローの実行ではほとんど差はありませんが、フローの実行結果をそのまま別のフローに渡すような処理を実装する場合はfatclientの方が有利です。

どちらを使用するかは状況に応じて選択してください。

2 FlowExecuteClient

FlowExecuteClientはフローサービスと通信するためのクライアントクラスです。
このクラスを作成して任意のユーザーでログインするとフローを実行可能な状態になります。
ログイン後にexecuteメソッドまたはpostメソッドを使用することでフローを実行します。

FlowExecuteClientを作成するコンストラクタの引数にはサーバーのSOAPメソッド実行のためのURLを指定します。
デフォルトではそのURLは、

http://<SERVENAME>:21381/soap

です。本製品インストール時にポートを変更した場合はそのポートを使用してください。

3 FlowRequest

executeメソッドとpostメソッドの引数となるのがFlowRequestオブジェクトです。
このオブジェクトに実行するフローとそのパラメーターを設定して、フローの実行をリクエストします。
FlowRequestには以下のパラメーターを設定することができます。

3.1 UserName, ProjectName, FlowName

実行するフローのプロジェクトオーナー名、プロジェクト名、フロー名を指定します。
必須です。

UserNameにはログインしたユーザーとは別のユーザー名を指定することもできますが、その場合は実行対象のフローが ログインユーザーに対して実行を許可していなければなりません。
(プロジェクトまたはフローの「実行を許可するユーザー」プロパティにログインユーザーが指定されている必要があります。)

3.2 SessionId, Lifetime

セッションIDを指定すると実行のセッションIDは指定のIDとなります。
サーバー上に既にそのIDのセッションが存在する場合は、そのセッションが使用され、ない場合は新規にそのIDでセッションが作成されます。
セッションIDを指定しなかった場合はリクエスト毎に新規のセッションが作成されます。

新規にセッションが作成される場合、そのセッションのライフタイム(タイムアウトまでの時間)はLifetimeの設定値となります。
Lifetimeが設定されなかった場合のその値は30分です。

3.3 ExecuteMode

フローの実行モードを指定します。
指定されなかった場合はNormalモードとなります。

3.4 ExecuteUser

フローの実行ユーザーを指定します。
指定されなかった場合は実行ユーザーなしとなります。

3.5 Stream

フローの入力ストリームをクライアント側で作成して設定することができます。
指定されなかった場合は入力ストリームは空のストリームとなります。

ストリームの作成方法についてはコンポーネント開発者ガイドやJavaDocも合わせて参照してください。

コンポーネント開発時のストリーム作成とクライアントでのストリーム作成の違いは、StreamFactoryが使用できない(使用する必要がない)ということです。
StreamFactoryはストリームにストリームプロパティを設定するためのものです。そしてストリームプロパティはコンポーネントによって設定されるものなのでクライアント側で設定する必要はありません。
例えば入力ストリームとしてCSVストリームを作成する場合、以下の様に行います。

    FlowRequest request;
    String str = "1,2,3,4,5" + "\r\n" +
                 "a,b,c,d,e" + "\r\n" +
                 "A,B,C,D,E" + "\r\n";
    StreamDataCSV stream = new StreamDataCSV(str);
    request.setStream(stream);

クライアント側で行うべきことはストリームのベースとなる内容を元にStreamDataCSVを作成することだけで、このCSVが5列であるとかセパレータは「,」であるなどの情報は必要ありません。
それらはコンポーネント(この場合は実行するフローのStartコンポーネント)のストリームプロパティとして設定されるべきものです。

3.6 Params

実行するフローの引数を設定します。
ここで指定された引数はStartコンポーネントのArgumentにマップされます。
指定された引数がStartコンポーネントのArgumentに存在しない場合は、その値は無視されます。
逆にArgumentにある引数が指定されなかった場合は、その値はnullになります。

4 FlowResponse

executeメソッドの返り値はFlowResponseオブジェクトとなります。
FlowResponseからは以下の内容が取得できます。

4.1 isSucceed

実行したフローが正常終了したか異常終了したかを示します。
このメソッドがfalseを返すのはリクエストしたフローが実行され、Exceptionによって終了した場合です。
通信エラーやリクエストされたフローが見つからない場合などはFlowExecuteClient#executeメソッドがExceptionとなります。

4.2 Stream

正常終了した場合にフローの結果ストリームを取得できます。
フローに結果ストリームがない場合(フローがEndコンポーネントで終了した場合)はnullになります。

4.3 ReturnValue

正常終了した場合にフローのReturnValueを取得できます。
ReturnValueとは終了コンポーネントのReturnValueプロパティの値です。

4.4 SessionId

実行に使用されたセッションIDです。
同一クライアントから再度リクエストを発行する際にこのセッションIDを使用すれば、そのリクエストは同一セッションで動作します。

4.5 Exception

異常終了した場合のExceptionを取得できます。
ただし、クライアント側で取得できる情報はほとんどエラーメッセージのみです。

5 サンプル

sampleフォルダーには「/guest」ユーザーで作成した「Project1.Flow1」というフローを実行するコマンドラインアプリケーションのサンプルが含まれています。