[フレームワーク]業務フロー

アプリケーション開発において、業務ロジックを部品化して、部品を組み合わせる事で、業務フローを組み立てる要求があります。

部品化した業務ロジックのフロー制御には、以下のような機能が必要となります。

  • 呼び出し元から処理パラメータを受け取る
  • 業務ロジックBeanに設定やデータを渡す
  • 業務ロジックBeanの処理実行メソッドを呼び出す
  • 業務ロジックBeanの処理結果を参照する
  • 処理結果を元に分岐する
  • 子となる業務フローを呼び出す
  • 同期/非同期(応答待ち、応答時コールバック)実行をサポートする
  • 分散並列実行をサポートする
  • 流量制御をサポートする
  • トランザクション制御(呼び出し時トランザクション指定、宣言的トランザクション指定)をサポートする
  • 業務フローのオーバーライド
  • アスペクト指向

業務フローの呼び出し機能を抽象化したのがBeanFlowInvokerです。
また、そのファクトリが、BeanFlowInvokerFactoryです。

関連するパッケージは、以下です。

アプリケーション向けインタフェース BeanFlowInvokerFactory

アプリケーション向けインタフェースBeanFlowInvokerFactoryを使った簡単なアプリケーションのサンプルを示します。

  1. import jp.ossc.nimbus.core.ServiceManagerFactory;
  2. import jp.ossc.nimbus.service.beancontrol.interfaces.BeanFlowInvokerFactory;
  3. import jp.ossc.nimbus.service.beancontrol.interfaces.BeanFlowInvoker;
  4. // BeanFlowInvokerFactoryを取得
  5. BeanFlowInvokerFactory factory = (BeanFlowInvokerFactory)ServiceManagerFactory.getServiceObject("BeanFlowInvokerFactory");
  6. // BeanFlowInvokerを生成する
  7. BeanFlowInvoker invoker = factory.createFlow("FlowName");
  8. // 業務フローを呼び出す
  9. Object ret = invoker.invokeFlow("param");

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.beancontrol.DefaultBeanFlowInvokerFactoryServiceデフォルト実装
jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerFactoryGroupServiceBeanFlowInvokerFactoryをグルーピングする
jp.ossc.nimbus.service.beancontrol.ClientBeanFlowInvokerFactoryServiceリモートの業務フローを呼び出す

アプリケーション向けインタフェース BeanFlowInvoker

アプリケーション向けインタフェースBeanFlowInvokerを使った簡単なアプリケーションのサンプルを示します。

  1. import jp.ossc.nimbus.core.ServiceManagerFactory;
  2. import jp.ossc.nimbus.service.beancontrol.interfaces.BeanFlowInvokerFactory;
  3. import jp.ossc.nimbus.service.beancontrol.interfaces.BeanFlowInvoker;
  4. // BeanFlowInvokerFactoryを取得
  5. BeanFlowInvokerFactory factory = (BeanFlowInvokerFactory)ServiceManagerFactory.getServiceObject("BeanFlowInvokerFactory");
  6. // BeanFlowInvokerを生成する
  7. BeanFlowInvoker invoker = factory.createFlow("FlowName");
  8. // 監視用のBeanFlowMonitorを生成する
  9. BeanFlowMonitor monitor = factory.createMonitor();
  10. // 業務フローを同期的に呼び出す
  11. Object ret = invoker.invokeFlow(
  12. "param", // フローへの引数。任意
  13. monitor
  14. );
  15. // 業務フローを応答待ちせずに、非同期的に呼び出す
  16. invoker.invokeAsynchFlow(
  17. "param", // フローへの引数。任意
  18. monitor,
  19. false, // 応答待ちをするかどうか。falseは応答待ちしない
  20. 10 // この数以上の処理要求が溜まっている場合には、待たずにエラーにする。0以下を指定した場合、このチェックは行わない
  21. );
  22. // 業務フローを非同期的に呼び出し、後で応答待ちをする
  23. Object context = invoker.invokeAsynchFlow(
  24. "param", // フローへの引数。任意
  25. monitor,
  26. true, // 応答待ちをするかどうか。trueは応答待ちする
  27. 0 // この数以上の処理要求が溜まっている場合には、待たずにエラーにする。0以下を指定した場合、このチェックは行わない
  28. );
  29. ret = invoker.getAsynchReply(
  30. context, // 非同期呼び出し時の戻り値で、応答待ちのコンテキスト
  31. monitor,
  32. 10000, // 非同期で要求した処理の応答を待つタイムアウト[ms]
  33. true // タイムアウトした場合に、非同期で要求した処理を取り消すかどうか。trueは、取り消す。
  34. );
  35. // 業務フローを、非同期的に呼び出し、応答をコールバックさせる
  36. invoker.invokeAsynchFlow(
  37. "param", // フローへの引数。任意
  38. monitor,
  39. new BeanFlowAsynchInvokeCallback(){
  40. public void reply(Object output, Throwable th){
  41. if(th == null){
  42. System.out.println(output);
  43. }else{
  44. th.printStackTrace();
  45. }
  46. }
  47. },
  48. 10 // この数以上の処理要求が溜まっている場合には、待たずにエラーにする。0以下を指定した場合、このチェックは行わない
  49. );

実装クラスの一覧は以下のとおりです。

実装クラス実装概要
jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerAccessImpl簡易実装。デフォルト実装
jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerAccessImpl2高機能実装

サンプルは、以下。