nimbus (1.2.4) | 2018-01-25 20:02 |
nimbus-sample (1.2.4) | 2018-01-26 17:06 |
jp.ossc.nimbus.service.scheduler2.JMSSchedulerServiceは、スケジュールをJMS Queueを使って非同期処理するScheduler実装サービスです。
このスケジューラは、DefaultSchedulerServiceがQueueを使って、スケジュールを監視して投入する監視スレッドと、スケジュールを実行するスレッドをわけて、スケジュールを非同期に処理しているのに対して、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.TransactionManagerFactory | javax.transaction.TransactionManagerを取得する |
jp.ossc.nimbus.service.jms.JMSSessionFactory | JMS Queueに接続するためのJMS Sessionを作成する。 |
jp.ossc.nimbus.service.jms.JMSMessageProducerFactory | JMS Queueに投入するためのJMS MessageProducerを作成する。 |
jp.ossc.nimbus.service.jms.JMSMessageConsumerFactory | JMS Queueから受信するためのJMS MessageConsumerを作成する。 |
以下に簡単なサービス定義を示します。
- <?xml version="1.0" encoding="Shift_JIS"?>
- <!DOCTYPE server PUBLIC
- "-//Nimbus//DTD Nimbus 1.0//JA"
- "http://nimbus.sourceforge.jp/dtd/nimbus-service_1_0.dtd">
- <server>
- <manager>
- <!-- スケジューラサービス -->
- <service name="Scheduler"
- code="jp.ossc.nimbus.service.scheduler2.JMSSchedulerService">
- <!-- ScheduleManagerサービスのサービス名を設定する -->
- <attribute name="ScheduleManagerServiceName">#ScheduleManager</attribute>
- <!-- ScheduleExecutorサービスのサービス名を設定する -->
- <attribute name="ScheduleExecutorServiceName">#ScheduleExecutor</attribute>
- <!-- JMSSessionFactoryサービスのサービス名を設定する -->
- <attribute name="JMSSessionFactoryServiceName">#XAJMSSessionFactory</attribute>
- <!-- JMSMessageProducerFactoryサービスのサービス名を設定する -->
- <attribute name="JMSMessageProducerFactoryServiceName">#XAJMSMessageProducerFactory</attribute>
- <!-- JMSMessageConsumerFactoryサービスのサービス名を設定する -->
- <attribute name="JMSMessageConsumerFactoryServiceName">#JMSMessageConsumerFactory</attribute>
- <!-- JMS Queueからスケジュールを受信するスレッド数を設定する -->
- <attribute name="MessageConsumerSize">3</attribute>
- <!-- トランザクション制御を有効にするを設定する -->
- <attribute name="TransactionControl">true</attribute>
- <!-- JMSのMessageの配信モードを永続化に設定する -->
- <attribute name="DeliveryMode" >
- <static-field-ref code="javax.jms.DeliveryMode" name="PERSISTENT"/>
- </attribute>
- <depends>ScheduleExecutor</depends>
- <depends>ScheduleManager</depends>
- <depends>XAJMSSessionFactory</depends>
- <depends>XAJMSMessageProducerFactory</depends>
- <depends>JMSMessageConsumerFactory</depends>
- </service>
- <!-- ScheduleManagerサービス -->
- <service name="ScheduleManager"
- code="jp.ossc.nimbus.service.scheduler2.DefaultScheduleManagerService">
- <attribute name="ScheduleMasterServiceNames">
- #ScheduleMaster1
- #ScheduleMaster2
- #ScheduleMaster3
- #ScheduleMaster4
- </attribute>
- <attribute name="PersistDir">./schedule</attribute>
- <depends>
- <!-- スケジュールマスタ1
- 08:00:00にFlow1を実行するスケジュール
- -->
- <service name="ScheduleMaster1"
- code="jp.ossc.nimbus.service.scheduler2.DefaultScheduleMaster">
- <attribute name="Id">Schedule1</attribute>
- <attribute name="TaskName">Flow1</attribute>
- <attribute name="StartTime">// 08:00:00 000</attribute>
- </service>
- </depends>
- <depends>
- <!-- スケジュールマスタ2
- スケジュールマスタ1の終了を待って、08:00:00にFlow2を実行するスケジュール
- -->
- <service name="ScheduleMaster2"
- code="jp.ossc.nimbus.service.scheduler2.DefaultScheduleMaster">
- <attribute name="Id">Schedule2</attribute>
- <attribute name="TaskName">Flow2</attribute>
- <attribute name="StartTime">// 08:00:00 000</attribute>
- <attribute name="Input">100</attribute>
- <attribute name="Depends">Schedule1</attribute>
- </service>
- </depends>
- <depends>
- <!-- スケジュールマスタ3
- スケジュールマスタ2の終了を待って、08:01:00から08:02:00まで5秒間隔にFlow3を実行するスケジュール
- -->
- <service name="ScheduleMaster3"
- code="jp.ossc.nimbus.service.scheduler2.DefaultScheduleMaster">
- <attribute name="Id">Schedule3</attribute>
- <attribute name="TaskName">Flow3</attribute>
- <attribute name="StartTime">// 08:01:00 000</attribute>
- <attribute name="EndTime">// 08:02:00 000</attribute>
- <attribute name="RepeatInterval">5000</attribute>
- <attribute name="Depends">Schedule2</attribute>
- </service>
- </depends>
- <depends>
- <!-- スケジュールマスタ4
- スケジュールマスタ1とスケジュールマスタ3の終了を待って、08:00:00から08:03:00までFlow4の結果でリトライを指示される限り、10秒間隔でFlow4を実行するスケジュール
- 08:03:00に達しても、リトライを指示された場合は、エラー終了する
- -->
- <service name="ScheduleMaster4"
- code="jp.ossc.nimbus.service.scheduler2.DefaultScheduleMaster">
- <attribute name="Id">Schedule4</attribute>
- <attribute name="TaskName">Flow4</attribute>
- <attribute name="StartTime">// 08:00:00 000</attribute>
- <attribute name="Depends">Schedule1,Schedule3</attribute>
- <attribute name="RetryInterval">10000</attribute>
- <attribute name="RetryEndTime">// 08:03:00 000</attribute>
- </service>
- </depends>
- </service>
- <!-- ScheduleExecuterサービス -->
- <service name="ScheduleExecutor"
- code="jp.ossc.nimbus.service.scheduler2.BeanFlowScheduleExecutorService">
- <attribute name="ScheduleManagerServiceName">#ScheduleManager</attribute>
- <attribute name="BeanFlowInvokerFactoryServiceName">#BeanFlowInvokerFactory</attribute>
- <depends>ScheduleManager</depends>
- <depends>BeanFlowInvokerFactory</depends>
- </service>
- <!-- BeanFlowInvokerを生成するBeanFlowInvokerFactoryサービス -->
- <service name="BeanFlowInvokerFactory"
- code="jp.ossc.nimbus.service.beancontrol.DefaultBeanFlowInvokerFactoryService">
- <attribute name="DirPaths">flows</attribute>
- <attribute name="BeanFlowInvokerAccessClass">jp.ossc.nimbus.service.beancontrol.BeanFlowInvokerAccessImpl2</attribute>
- <attribute name="Validate">true</attribute>
- </service>
- <!-- Queueへの投入を行うMessageProducerを取得するJMSMessageProducerFactoryサービス -->
- <service name="JMSMessageProducerFactory"
- code="jp.ossc.nimbus.service.jms.JMSQueueSenderFactoryService">
- <attribute name="DestinationFinderServiceName">#LocalJndiFinder</attribute>
- <attribute name="DestinationName">queue/ScheduleQueue</attribute>
- <depends>LocalJndiFinder</depends>
- </service>
- <!-- Queueへの投入時に使用するセッションを生成するJMSSessionFactoryサービス -->
- <service name="XAJMSSessionFactory"
- code="jp.ossc.nimbus.service.jms.JMSQueueSessionFactoryService">
- <attribute name="TransactionMode">true</attribute>
- <attribute name="JMSConnectionFactoryServiceName">#XAJMSConnectionFactory</attribute>
- <depends>XAJMSConnectionFactoryr</depends>
- </service>
- <!-- Queueへの投入時に使用するQueueConnectionを生成するJMSConnectionFactoryサービス -->
- <service name="XAJMSConnectionFactory"
- code="jp.ossc.nimbus.service.jms.JMSQueueConnectionFactoryService">
- <attribute name="JndiFinderServiceName">#LocalJndiFinder</attribute>
- <attribute name="ConnectionFactoryName">java:/JmsXA</attribute>
- <depends>LocalJndiFinder</depends>
- </service>
- <!-- Queueからの受信を行うMessageConsumerを生成するJMSMessageConsumerFactoryサービス -->
- <service name="JMSMessageConsumerFactory"
- code="jp.ossc.nimbus.service.jms.JMSQueueReceiverFactoryService">
- <attribute name="JMSSessionFactoryServiceName">#JMSSessionFactory</attribute>
- <attribute name="DestinationFinderServiceName">#LocalJndiFinder</attribute>
- <attribute name="DestinationName">queue/ScheduleQueue</attribute>
- <depends>JMSSessionFactory</depends>
- <depends>LocalJndiFinder</depends>
- </service>
- <!-- Queueからの受信時に使用するセッションを取得するJMSSessionFactoryサービスうける -->
- <service name="JMSSessionFactory"
- code="jp.ossc.nimbus.service.jms.JMSQueueSessionFactoryService">
- <attribute name="TransactionMode">false</attribute>
- <attribute name="JMSConnectionFactoryServiceName">#JMSConnectionFactory</attribute>
- <depends>JMSConnectionFactory</depends>
- </service>
- <!-- Queueからの受信するためのQueueConnectionを取得するJMSConnectionFactoryサービス -->
- <service name="JMSConnectionFactory"
- code="jp.ossc.nimbus.service.jms.JMSQueueConnectionFactoryService">
- <attribute name="JndiFinderServiceName">#LocalJndiFinder</attribute>
- <attribute name="ConnectionFactoryName">java:/XAConnectionFactory</attribute>
- <depends>LocalJndiFinder</depends>
- </service>
- <!--JndiFinderサービス-->
- <service name="LocalJndiFinder"
- code="jp.ossc.nimbus.service.jndi.CachedJndiFinderService"/>
- </manager>
- </server>