CodeMasterFinder実装サービス jp.ossc.nimbus.service.codemaster.CodeMasterService

jp.ossc.nimbus.service.codemaster.CodeMasterServiceは、CodeMasterFinderデフォルト実装サービスです。

マスターは、jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerFactoryで直接業務フローを呼び出すか、jp.ossc.nimbus.service.ioccall.FacadeCallerを使ってIOC経由でjp.ossc.nimbus.service.beancontrol.BeanFlowInvokerFactoryを業務フローを呼び出すかして、その戻り値をマスターとして、メモリ中で管理します。
マスターとなるオブジェクトに制限はありません。但し、マスターを更新する際に差分だけを更新したい場合(マスターが巨大な場合など)は、PartUpdateインタフェースを実装したクラスである必要があります。

マスターが更新された場合は、更新通知を受け取ることで、業務フローを再度実行してマスターを入れ替える事ができます。
更新通知の受信は、jp.ossc.nimbus.service.jms.JMSMessageConsumerFactoryでJMS経由で受け取るか、jp.ossc.nimbus.service.publish.MessageReceiver経由で通知を受け取る事ができます。

このサービスは、複合的なサービスで、以下のサービスを下位サービスとして使用します。

下位サービスインタフェース用途
jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerFactoryマスターを生成する業務フローを取得する
jp.ossc.nimbus.service.ioccall.FacadeCallerマスターを生成する業務フローをIOC経由で呼び出す。
jp.ossc.nimbus.service.jms.JMSMessageConsumerFactoryJMS経由でマスターの更新通知を受け取る。
jp.ossc.nimbus.service.publish.MessageReceiverメッセージ配信経由でマスターの更新通知を受け取る。
jp.ossc.nimbus.service.sequence.SequenceIOC経由で業務フローを呼び出す場合に、呼び出し情報として設定する通番を発行する

以下に簡単なサービス定義を示します。

  1. <?xml version="1.0" encoding="Shift_JIS"?>
  2. <!DOCTYPE server PUBLIC
  3. "-//Nimbus//DTD Nimbus 1.0//JA"
  4. "http://nimbus.sourceforge.jp/dtd/nimbus-service_1_0.dtd">
  5. <server>
  6. <manager>
  7. <!-- マスターを取得するCodeMasterFinderサービス -->
  8. <service name="CodeMasterFinder"
  9. code="jp.ossc.nimbus.service.codemaster.CodeMasterService">
  10. <!-- マスターを生成する業務フローを取得するBeanFlowInvokerFactoryサービスのサービス名を設定する -->
  11. <attribute name="BeanFlowInvokerFactoryServiceName">#BeanFlowInvokerFactory</attribute>
  12. <!-- マスターの更新通知を受け取るMessageReceiverサービスのサービス名を設定する -->
  13. <attribute name="MessageReceiverServiceName">#MessageReceiver</attribute>
  14. <!-- MessageReceiverサービスからマスターの更新通知を受け取るための受信サブジェクトを設定する -->
  15. <attribute name="Subjects">CodeMaster</attribute>
  16. <!-- マスター名の配列を設定する -->
  17. <attribute name="MasterNames">
  18. JOB_TYPE_MST
  19. </attribute>
  20. <depends>BeanFlowInvokerFactory</depends>
  21. <depends>MessageReceiver</depends>
  22. </service>
  23. <!-- 業務フローを生成するBeanFlowInvokerFactoryサービス -->
  24. <service name="BeanFlowInvokerFactory"
  25. code="jp.ossc.nimbus.service.beancontrol.DefaultBeanFlowInvokerFactoryService">
  26. <attribute name="DirPaths">flow</attribute>
  27. <attribute name="BeanFlowInvokerAccessClass">jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerAccessImpl2</attribute>
  28. <depends>JDBCTransactionResourceFactory</depends>
  29. <depends>PersistentManager</depends>
  30. </service>
  31. <!-- JDBCコネクションのTransactionResourceを生成するResourceFactoryサービス -->
  32. <service name="JDBCTransactionResourceFactory"
  33. code="jp.ossc.nimbus.service.resource.datasource.JdbcConnectionFactoryService">
  34. <attribute name="ConnectionFactoryServiceName">#ConnectionFactory</attribute>
  35. <depends>
  36. <!-- JDBCドライバ経由でコネクションを取得するConnectionFactoryサービス -->
  37. <service name="ConnectionFactory"
  38. code="jp.ossc.nimbus.service.connection.JDBCConnectionFactoryService">
  39. <attribute name="DriverName">org.hsqldb.jdbcDriver</attribute>
  40. <attribute name="ConnectionURL">jdbc:hsqldb:./localDB</attribute>
  41. <attribute name="UserName">sa</attribute>
  42. <attribute name="Password"></attribute>
  43. <attribute name="AutoCommit">false</attribute>
  44. </service>
  45. </depends>
  46. </service>
  47. <!-- 永続化を管理するPersistentManagerサービス -->
  48. <service name="PersistentManager"
  49. code="jp.ossc.nimbus.service.connection.DefaultPersistentManagerService"/>
  50. <!-- メッセージ受信サービス -->
  51. <service name="MessageReceiver"
  52. code="jp.ossc.nimbus.service.publish.MessageReceiverService">
  53. <attribute name="ClientConnectionFactoryServiceName">#ClusterClientConnectionFactory</attribute>
  54. <attribute name="StartReceiveOnStart">true</attribute>
  55. <depends>#ClusterClientConnectionFactory</depends>
  56. </service>
  57. <!-- クラスタクライアントコネクションファクトリサービス -->
  58. <service name="ClusterClientConnectionFactory"
  59. code="jp.ossc.nimbus.service.publish.ClusterClientConnectionFactoryService">
  60. <attribute name="ClusterServiceName">#Cluster</attribute>
  61. <attribute name="FlexibleConnect">true</attribute>
  62. <depends>
  63. <!-- クラスタサービス -->
  64. <service name="Cluster"
  65. code="jp.ossc.nimbus.service.keepalive.ClusterService">
  66. <attribute name="MulticastGroupAddress">239.0.0.10</attribute>
  67. <attribute name="Client">true</attribute>
  68. </service>
  69. </depends>
  70. </service>
  71. </manager>
  72. </server>

マスターを生成する業務フローの例を示す。

  1. <?xml version="1.0" encoding="Shift_JIS"?>
  2. <!DOCTYPE flows PUBLIC
  3. "-//Nimbus//DTD Nimbus Bean Flow 1.0//JA"
  4. "http://nimbus.sourceforge.jp/dtd/beanflow_1_0.dtd">
  5. <flows>
  6. <!-- 業種マスタを読み込む業務フロー -->
  7. <flow name="JOB_TYPE_MST">
  8. <!-- JDBC接続のリソース宣言 -->
  9. <resource name="Connection" service="Nimbus#JDBCTransactionResourceFactory" trancontrol="true"/>
  10. <!-- マスタ読み込み用のRecordListを定義する -->
  11. <step name="Master">
  12. <target><object code="jp.ossc.nimbus.beans.dataset.RecordList"/></target>
  13. <attribute name="Name">JOB_TYPE_MST</attribute>
  14. <attribute name="Schema">
  15. :typeCode,java.lang.String,,,,1
  16. :jobName,java.lang.String
  17. </attribute>
  18. </step>
  19. <!-- マスタをデータベースから読み込む -->
  20. <step name="Load">
  21. <target><service-ref>Nimbus#PersistentManager</service-ref></target>
  22. <result>
  23. <invoke name="loadQuery">
  24. <argument type="java.sql.Connection"><resource-ref>Connection</resource-ref></argument>
  25. <argument>select TYPE_CODE-&gt;{typeCode}, JOB_NAME-&gt;{jobName} from JOB_TYPE_MST</argument>
  26. <argument type="java.lang.Object" nullValue="true"/>
  27. <argument type="java.lang.Object"><step-ref>Master</step-ref></argument>
  28. </invoke>
  29. </result>
  30. </step>
  31. </flow>
  32. </flows>

MessageReceiverを使ってマスターを更新する場合の、更新を通知する側のコード例を示します。
この場合、更新を通知する側にはServerConnectionFactoryサービスが必要です。

  1. import jp.ossc.nimbus.core.ServiceManagerFactory;
  2. import jp.ossc.nimbus.service.publish.ServerConnectionFactory;
  3. import jp.ossc.nimbus.service.publish.ServerConnection;
  4. import jp.ossc.nimbus.service.codemaster.CodeMasterNotifyBean;
  5. // ServerConnectionFactoryを取得する
  6. ServerConnectionFactory scf = (ServerConnectionFactory)ServiceManagerFactory.getServiceObject("ConnectionFactory");
  7. // ServerConnectionを取得する
  8. ServerConnection sc = scf.getServerConnection();
  9. // コードマスタ通知Beanを生成する
  10. CodeMasterNotifyBean cmnb = new CodeMasterNotifyBean();
  11. // ServerConnectionを設定する
  12. cmnb.setServerConnection(sc);
  13. // 送信サブジェクトを設定する
  14. cmnb.setSubject("CodeMaster");
  15. // 更新するマスター名を設定する
  16. cmnb.setMasterFlowKey("JOB_TYPE_MST");
  17. // 更新通知を追加する
  18. cmnb.addMessage();
  19. // 更新通知を送信する
  20. cmnb.send();


コードマスター/CodeMasterFinder