Scheduler実装サービス jp.ossc.nimbus.service.scheduler2.JMSSchedulerService

jp.ossc.nimbus.service.scheduler2.JMSSchedulerServiceは、スケジュールをJMS Queueを使って非同期処理するScheduler実装サービスです。

このスケジューラは、DefaultSchedulerServiceQueueを使って、スケジュールを監視して投入する監視スレッドと、スケジュールを実行するスレッドをわけて、スケジュールを非同期に処理しているのに対して、NimbusのQueueの代わりにJMS Queueを使用しています。
JMS Queueを使用する事で、Queue自体を永続化する事が可能になるため、耐障害性を向上させる事ができます。

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

下位サービスインタフェース用途
jp.ossc.nimbus.service.scheduler2.ScheduleManager実行すべきスケジュールを取得する。
jp.ossc.nimbus.service.scheduler2.ScheduleExecutorスケジュールの実行を依頼する。
jp.ossc.nimbus.service.keepalive.ClusterServiceスケジューラをクラスタ化する。
jp.ossc.nimbus.service.sequence.Sequenceスケジュールの処理通番を発行する。
jp.ossc.nimbus.service.context.ThreadContextServiceスケジュールの処理通番を設定する。
jp.ossc.nimbus.service.transaction.TransactionManagerFactoryjavax.transaction.TransactionManagerを取得する
jp.ossc.nimbus.service.jms.JMSSessionFactoryJMS Queueに接続するためのJMS Sessionを作成する。
jp.ossc.nimbus.service.jms.JMSMessageProducerFactoryJMS Queueに投入するためのJMS MessageProducerを作成する。
jp.ossc.nimbus.service.jms.JMSMessageConsumerFactoryJMS Queueから受信するためのJMS MessageConsumerを作成する。

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

  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. <!-- スケジューラサービス -->
  8. <service name="Scheduler"
  9. code="jp.ossc.nimbus.service.scheduler2.JMSSchedulerService">
  10. <!-- ScheduleManagerサービスのサービス名を設定する -->
  11. <attribute name="ScheduleManagerServiceName">#ScheduleManager</attribute>
  12. <!-- ScheduleExecutorサービスのサービス名を設定する -->
  13. <attribute name="ScheduleExecutorServiceName">#ScheduleExecutor</attribute>
  14. <!-- JMSSessionFactoryサービスのサービス名を設定する -->
  15. <attribute name="JMSSessionFactoryServiceName">#XAJMSSessionFactory</attribute>
  16. <!-- JMSMessageProducerFactoryサービスのサービス名を設定する -->
  17. <attribute name="JMSMessageProducerFactoryServiceName">#XAJMSMessageProducerFactory</attribute>
  18. <!-- JMSMessageConsumerFactoryサービスのサービス名を設定する -->
  19. <attribute name="JMSMessageConsumerFactoryServiceName">#JMSMessageConsumerFactory</attribute>
  20. <!-- JMS Queueからスケジュールを受信するスレッド数を設定する -->
  21. <attribute name="MessageConsumerSize">3</attribute>
  22. <!-- トランザクション制御を有効にするを設定する -->
  23. <attribute name="TransactionControl">true</attribute>
  24. <!-- JMSのMessageの配信モードを永続化に設定する -->
  25. <attribute name="DeliveryMode" >
  26. <static-field-ref code="javax.jms.DeliveryMode" name="PERSISTENT"/>
  27. </attribute>
  28. <depends>ScheduleExecutor</depends>
  29. <depends>ScheduleManager</depends>
  30. <depends>XAJMSSessionFactory</depends>
  31. <depends>XAJMSMessageProducerFactory</depends>
  32. <depends>JMSMessageConsumerFactory</depends>
  33. </service>
  34. <!-- ScheduleManagerサービス -->
  35. <service name="ScheduleManager"
  36. code="jp.ossc.nimbus.service.scheduler2.DefaultScheduleManagerService">
  37. <attribute name="ScheduleMasterServiceNames">
  38. #ScheduleMaster1
  39. #ScheduleMaster2
  40. #ScheduleMaster3
  41. #ScheduleMaster4
  42. </attribute>
  43. <attribute name="PersistDir">./schedule</attribute>
  44. <depends>
  45. <!-- スケジュールマスタ1
  46. 08:00:00にFlow1を実行するスケジュール
  47. -->
  48. <service name="ScheduleMaster1"
  49. code="jp.ossc.nimbus.service.scheduler2.DefaultScheduleMaster">
  50. <attribute name="Id">Schedule1</attribute>
  51. <attribute name="TaskName">Flow1</attribute>
  52. <attribute name="StartTime">// 08:00:00 000</attribute>
  53. </service>
  54. </depends>
  55. <depends>
  56. <!-- スケジュールマスタ2
  57. スケジュールマスタ1の終了を待って、08:00:00にFlow2を実行するスケジュール
  58. -->
  59. <service name="ScheduleMaster2"
  60. code="jp.ossc.nimbus.service.scheduler2.DefaultScheduleMaster">
  61. <attribute name="Id">Schedule2</attribute>
  62. <attribute name="TaskName">Flow2</attribute>
  63. <attribute name="StartTime">// 08:00:00 000</attribute>
  64. <attribute name="Input">100</attribute>
  65. <attribute name="Depends">Schedule1</attribute>
  66. </service>
  67. </depends>
  68. <depends>
  69. <!-- スケジュールマスタ3
  70. スケジュールマスタ2の終了を待って、08:01:00から08:02:00まで5秒間隔にFlow3を実行するスケジュール
  71. -->
  72. <service name="ScheduleMaster3"
  73. code="jp.ossc.nimbus.service.scheduler2.DefaultScheduleMaster">
  74. <attribute name="Id">Schedule3</attribute>
  75. <attribute name="TaskName">Flow3</attribute>
  76. <attribute name="StartTime">// 08:01:00 000</attribute>
  77. <attribute name="EndTime">// 08:02:00 000</attribute>
  78. <attribute name="RepeatInterval">5000</attribute>
  79. <attribute name="Depends">Schedule2</attribute>
  80. </service>
  81. </depends>
  82. <depends>
  83. <!-- スケジュールマスタ4
  84. スケジュールマスタ1とスケジュールマスタ3の終了を待って、08:00:00から08:03:00までFlow4の結果でリトライを指示される限り、10秒間隔でFlow4を実行するスケジュール
  85. 08:03:00に達しても、リトライを指示された場合は、エラー終了する
  86. -->
  87. <service name="ScheduleMaster4"
  88. code="jp.ossc.nimbus.service.scheduler2.DefaultScheduleMaster">
  89. <attribute name="Id">Schedule4</attribute>
  90. <attribute name="TaskName">Flow4</attribute>
  91. <attribute name="StartTime">// 08:00:00 000</attribute>
  92. <attribute name="Depends">Schedule1,Schedule3</attribute>
  93. <attribute name="RetryInterval">10000</attribute>
  94. <attribute name="RetryEndTime">// 08:03:00 000</attribute>
  95. </service>
  96. </depends>
  97. </service>
  98. <!-- ScheduleExecuterサービス -->
  99. <service name="ScheduleExecutor"
  100. code="jp.ossc.nimbus.service.scheduler2.BeanFlowScheduleExecutorService">
  101. <attribute name="ScheduleManagerServiceName">#ScheduleManager</attribute>
  102. <attribute name="BeanFlowInvokerFactoryServiceName">#BeanFlowInvokerFactory</attribute>
  103. <depends>ScheduleManager</depends>
  104. <depends>BeanFlowInvokerFactory</depends>
  105. </service>
  106. <!-- BeanFlowInvokerを生成するBeanFlowInvokerFactoryサービス -->
  107. <service name="BeanFlowInvokerFactory"
  108. code="jp.ossc.nimbus.service.beancontrol.DefaultBeanFlowInvokerFactoryService">
  109. <attribute name="DirPaths">flows</attribute>
  110. <attribute name="BeanFlowInvokerAccessClass">jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerAccessImpl2</attribute>
  111. <attribute name="Validate">true</attribute>
  112. </service>
  113. <!-- Queueへの投入を行うMessageProducerを取得するJMSMessageProducerFactoryサービス -->
  114. <service name="JMSMessageProducerFactory"
  115. code="jp.ossc.nimbus.service.jms.JMSQueueSenderFactoryService">
  116. <attribute name="DestinationFinderServiceName">#LocalJndiFinder</attribute>
  117. <attribute name="DestinationName">queue/ScheduleQueue</attribute>
  118. <depends>LocalJndiFinder</depends>
  119. </service>
  120. <!-- Queueへの投入時に使用するセッションを生成するJMSSessionFactoryサービス -->
  121. <service name="XAJMSSessionFactory"
  122. code="jp.ossc.nimbus.service.jms.JMSQueueSessionFactoryService">
  123. <attribute name="TransactionMode">true</attribute>
  124. <attribute name="JMSConnectionFactoryServiceName">#XAJMSConnectionFactory</attribute>
  125. <depends>XAJMSConnectionFactoryr</depends>
  126. </service>
  127. <!-- Queueへの投入時に使用するQueueConnectionを生成するJMSConnectionFactoryサービス -->
  128. <service name="XAJMSConnectionFactory"
  129. code="jp.ossc.nimbus.service.jms.JMSQueueConnectionFactoryService">
  130. <attribute name="JndiFinderServiceName">#LocalJndiFinder</attribute>
  131. <attribute name="ConnectionFactoryName">java:/JmsXA</attribute>
  132. <depends>LocalJndiFinder</depends>
  133. </service>
  134. <!-- Queueからの受信を行うMessageConsumerを生成するJMSMessageConsumerFactoryサービス -->
  135. <service name="JMSMessageConsumerFactory"
  136. code="jp.ossc.nimbus.service.jms.JMSQueueReceiverFactoryService">
  137. <attribute name="JMSSessionFactoryServiceName">#JMSSessionFactory</attribute>
  138. <attribute name="DestinationFinderServiceName">#LocalJndiFinder</attribute>
  139. <attribute name="DestinationName">queue/ScheduleQueue</attribute>
  140. <depends>JMSSessionFactory</depends>
  141. <depends>LocalJndiFinder</depends>
  142. </service>
  143. <!-- Queueからの受信時に使用するセッションを取得するJMSSessionFactoryサービスうける -->
  144. <service name="JMSSessionFactory"
  145. code="jp.ossc.nimbus.service.jms.JMSQueueSessionFactoryService">
  146. <attribute name="TransactionMode">false</attribute>
  147. <attribute name="JMSConnectionFactoryServiceName">#JMSConnectionFactory</attribute>
  148. <depends>JMSConnectionFactory</depends>
  149. </service>
  150. <!-- Queueからの受信するためのQueueConnectionを取得するJMSConnectionFactoryサービス -->
  151. <service name="JMSConnectionFactory"
  152. code="jp.ossc.nimbus.service.jms.JMSQueueConnectionFactoryService">
  153. <attribute name="JndiFinderServiceName">#LocalJndiFinder</attribute>
  154. <attribute name="ConnectionFactoryName">java:/XAConnectionFactory</attribute>
  155. <depends>LocalJndiFinder</depends>
  156. </service>
  157. <!--JndiFinderサービス-->
  158. <service name="LocalJndiFinder"
  159. code="jp.ossc.nimbus.service.jndi.CachedJndiFinderService"/>
  160. </manager>
  161. </server>


スケジューラ/高機能スケジューラ/Scheduler