nimbus (1.2.4) | 2018-01-25 20:02 |
nimbus-sample (1.2.4) | 2018-01-26 17:06 |
アプリケーション開発において、業務ロジックを部品化して、部品を組み合わせる事で、業務フローを組み立てる要求があります。
部品化した業務ロジックのフロー制御には、以下のような機能が必要となります。
業務フローの呼び出し機能を抽象化したのがBeanFlowInvokerです。
また、そのファクトリが、BeanFlowInvokerFactoryです。
関連するパッケージは、以下です。
アプリケーション向けインタフェースBeanFlowInvokerFactoryを使った簡単なアプリケーションのサンプルを示します。
- import jp.ossc.nimbus.core.ServiceManagerFactory;
- import jp.ossc.nimbus.service.beancontrol.interfaces.BeanFlowInvokerFactory;
- import jp.ossc.nimbus.service.beancontrol.interfaces.BeanFlowInvoker;
- // BeanFlowInvokerFactoryを取得
- BeanFlowInvokerFactory factory = (BeanFlowInvokerFactory)ServiceManagerFactory.getServiceObject("BeanFlowInvokerFactory");
- // BeanFlowInvokerを生成する
- BeanFlowInvoker invoker = factory.createFlow("FlowName");
- // 業務フローを呼び出す
- Object ret = invoker.invokeFlow("param");
実装サービスの一覧は以下のとおりです。
実装サービス | 実装概要 |
jp.ossc.nimbus.service.beancontrol.DefaultBeanFlowInvokerFactoryService | デフォルト実装 |
jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerFactoryGroupService | BeanFlowInvokerFactoryをグルーピングする |
jp.ossc.nimbus.service.beancontrol.ClientBeanFlowInvokerFactoryService | リモートの業務フローを呼び出す |
アプリケーション向けインタフェースBeanFlowInvokerを使った簡単なアプリケーションのサンプルを示します。
- import jp.ossc.nimbus.core.ServiceManagerFactory;
- import jp.ossc.nimbus.service.beancontrol.interfaces.BeanFlowInvokerFactory;
- import jp.ossc.nimbus.service.beancontrol.interfaces.BeanFlowInvoker;
- // BeanFlowInvokerFactoryを取得
- BeanFlowInvokerFactory factory = (BeanFlowInvokerFactory)ServiceManagerFactory.getServiceObject("BeanFlowInvokerFactory");
- // BeanFlowInvokerを生成する
- BeanFlowInvoker invoker = factory.createFlow("FlowName");
- // 監視用のBeanFlowMonitorを生成する
- BeanFlowMonitor monitor = factory.createMonitor();
- // 業務フローを同期的に呼び出す
- Object ret = invoker.invokeFlow(
- "param", // フローへの引数。任意
- monitor
- );
- // 業務フローを応答待ちせずに、非同期的に呼び出す
- invoker.invokeAsynchFlow(
- "param", // フローへの引数。任意
- monitor,
- false, // 応答待ちをするかどうか。falseは応答待ちしない
- 10 // この数以上の処理要求が溜まっている場合には、待たずにエラーにする。0以下を指定した場合、このチェックは行わない
- );
- // 業務フローを非同期的に呼び出し、後で応答待ちをする
- Object context = invoker.invokeAsynchFlow(
- "param", // フローへの引数。任意
- monitor,
- true, // 応答待ちをするかどうか。trueは応答待ちする
- 0 // この数以上の処理要求が溜まっている場合には、待たずにエラーにする。0以下を指定した場合、このチェックは行わない
- );
- ret = invoker.getAsynchReply(
- context, // 非同期呼び出し時の戻り値で、応答待ちのコンテキスト
- monitor,
- 10000, // 非同期で要求した処理の応答を待つタイムアウト[ms]
- true // タイムアウトした場合に、非同期で要求した処理を取り消すかどうか。trueは、取り消す。
- );
- // 業務フローを、非同期的に呼び出し、応答をコールバックさせる
- invoker.invokeAsynchFlow(
- "param", // フローへの引数。任意
- monitor,
- new BeanFlowAsynchInvokeCallback(){
- public void reply(Object output, Throwable th){
- if(th == null){
- System.out.println(output);
- }else{
- th.printStackTrace();
- }
- }
- },
- 10 // この数以上の処理要求が溜まっている場合には、待たずにエラーにする。0以下を指定した場合、このチェックは行わない
- );
実装クラスの一覧は以下のとおりです。
実装クラス | 実装概要 |
jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerAccessImpl | 簡易実装。デフォルト実装 |
jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerAccessImpl2 | 高機能実装 |
サンプルは、以下。