[jboss-svn-commits] JBL Code SVN: r34653 - in labs/jbossrules/branches/5_1_20100802_esteban_diega: drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/impl and 7 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Aug 11 19:09:41 EDT 2010


Author: lucazamador
Date: 2010-08-11 19:09:39 -0400 (Wed, 11 Aug 2010)
New Revision: 34653

Modified:
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/impl/HornetQSchedulerConnector.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/InsertScheduledTimerMessage.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerScheduler.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/job/TimerExecutorJob.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerSchedulerTest.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/contextTest.xml
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/IntegrationTest.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/contextTest.xml
   labs/jbossrules/branches/5_1_20100802_esteban_diega/pom.xml
Log:
JBRULES-2616: Process persistent timers
	- Timer message delay/period. Integration with Timer Executor

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/impl/HornetQSchedulerConnector.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/impl/HornetQSchedulerConnector.java	2010-08-11 22:51:52 UTC (rev 34652)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/impl/HornetQSchedulerConnector.java	2010-08-11 23:09:39 UTC (rev 34653)
@@ -93,7 +93,8 @@
 			oout = new ObjectOutputStream(baos);
 			InsertScheduledTimerMessage insertTimerMessage = new InsertScheduledTimerMessage();
 			insertTimerMessage.setProcessInstanceId(processContext.getProcessInstanceId());
-			insertTimerMessage.setActivationTime(processContext.getTimer().getActivated());
+			insertTimerMessage.setPeriod(processContext.getTimer().getPeriod());
+			insertTimerMessage.setDelay(processContext.getTimer().getDelay());
 			oout.writeObject(insertTimerMessage);
 			ClientMessage message = session.createMessage(true);
 			message.getBodyBuffer().writeBytes(baos.toByteArray());

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/InsertScheduledTimerMessage.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/InsertScheduledTimerMessage.java	2010-08-11 22:51:52 UTC (rev 34652)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/InsertScheduledTimerMessage.java	2010-08-11 23:09:39 UTC (rev 34653)
@@ -1,21 +1,25 @@
 package org.drools.timer.message.impl;
 
-import java.util.Date;
-
 import org.drools.timer.message.TimerMessage;
 
 public class InsertScheduledTimerMessage extends TimerMessage {
 
 	private static final long serialVersionUID = 1L;
 
-	private Date activationTime;
+	private long period;
+	private long delay;
 
-	public void setActivationTime(Date activationTime) {
-		this.activationTime = activationTime;
+	public void setPeriod(long period) {
+		this.period = period;
 	}
-
-	public Date getActivationTime() {
-		return activationTime;
+	public long getPeriod() {
+		return period;
 	}
+	public void setDelay(long delay) {
+		this.delay = delay;
+	}
+	public long getDelay() {
+		return delay;
+	}
 
 }

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerScheduler.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerScheduler.java	2010-08-11 22:51:52 UTC (rev 34652)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerScheduler.java	2010-08-11 23:09:39 UTC (rev 34653)
@@ -1,11 +1,16 @@
 package org.drools.timer.scheduler;
 
+import java.util.Calendar;
+import java.util.Date;
+
 import org.drools.timer.message.TimerMessage;
 import org.drools.timer.message.impl.InsertScheduledTimerMessage;
 import org.drools.timer.message.impl.RemoveScheduledTimerMessage;
 import org.drools.timer.persistence.TimerPersistence;
 import org.drools.timer.persistence.model.TimerState;
 import org.drools.timer.scheduler.job.TimerExecutorJob;
+import org.hornetq.api.core.client.ClientProducer;
+import org.hornetq.api.core.client.ClientSession;
 import org.quartz.JobDetail;
 import org.quartz.Scheduler;
 import org.quartz.SchedulerException;
@@ -15,15 +20,27 @@
 
 public class TimerScheduler {
 
+	private static final int MILLISECONDS = 1000;
+
 	private static final Logger logger = LoggerFactory.getLogger(TimerScheduler.class);
 
 	private TimerPersistence timerPersistence;
 	private Scheduler scheduler;
+	private ClientProducer timerExecutorConnector;
+	private ClientSession session;
 
 	private void process(InsertScheduledTimerMessage message) {
 		JobDetail job = new JobDetail(message.getProcessInstanceId().toString(), Scheduler.DEFAULT_GROUP, TimerExecutorJob.class);
 		job.getJobDataMap().put(TimerExecutorJob.PROCESS_INSTANCE_ID, message.getProcessInstanceId());
-		SimpleTrigger trigger = new SimpleTrigger(createUniqueTimerJobId(message), Scheduler.DEFAULT_GROUP, message.getActivationTime());
+		System.out.println("timerExecutorConnector: " + timerExecutorConnector);
+		job.getJobDataMap().put(TimerExecutorJob.TIMER_EXECUTOR_CONNECTOR, timerExecutorConnector);
+		job.getJobDataMap().put(TimerExecutorJob.TIMER_EXECUTOR_SESSION, session);
+		SimpleTrigger trigger = new SimpleTrigger(createUniqueTimerJobId(message),
+													Scheduler.DEFAULT_GROUP, 
+													createActivationTime(message), 
+													null,
+													SimpleTrigger.REPEAT_INDEFINITELY,
+													message.getPeriod());
 		try {
 			scheduler.scheduleJob(job, trigger);
 		} catch (SchedulerException e) {
@@ -36,6 +53,12 @@
 		timerPersistence.isExecutable(message.getProcessInstanceId());
 	}
 
+	private Date createActivationTime(InsertScheduledTimerMessage message) {
+		Calendar calendar = Calendar.getInstance();
+		calendar.add(Calendar.SECOND, (int) (message.getDelay() / MILLISECONDS));
+		return calendar.getTime();
+	}
+
 	private void process(RemoveScheduledTimerMessage message) {
 		try {
 			scheduler.deleteJob(createUniqueTimerJobId(message), Scheduler.DEFAULT_GROUP);
@@ -64,17 +87,16 @@
 		this.timerPersistence = timerPersistence;
 	}
 
-	public TimerPersistence getTimerPersistence() {
-		return timerPersistence;
-	}
-
 	public void setScheduler(Scheduler scheduler) {
 		this.scheduler = scheduler;
 	}
 
-	public Scheduler getScheduler() {
-		return scheduler;
+	public void setTimerExecutorConnector(ClientProducer timerExecutorConnector) {
+		this.timerExecutorConnector = timerExecutorConnector;
 	}
 
+	public void setSession(ClientSession session) {
+		this.session = session;
+	}
 
 }

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/job/TimerExecutorJob.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/job/TimerExecutorJob.java	2010-08-11 22:51:52 UTC (rev 34652)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/job/TimerExecutorJob.java	2010-08-11 23:09:39 UTC (rev 34653)
@@ -1,20 +1,51 @@
 package org.drools.timer.scheduler.job;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
 import java.util.Date;
 
+import org.drools.timer.message.TimerJob;
+import org.hornetq.api.core.HornetQException;
+import org.hornetq.api.core.client.ClientMessage;
+import org.hornetq.api.core.client.ClientProducer;
+import org.hornetq.api.core.client.ClientSession;
 import org.quartz.Job;
 import org.quartz.JobDataMap;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 
 public class TimerExecutorJob implements Job {
-	
-    public static final String PROCESS_INSTANCE_ID = "ProcessInstanceId";
 
+	public static final String PROCESS_INSTANCE_ID = "ProcessInstanceId";
+	public static final String TIMER_EXECUTOR_CONNECTOR = "timerExecutorConnector";
+	public static final String TIMER_EXECUTOR_SESSION = "timerExecutorSession";
+
 	public void execute(JobExecutionContext context) throws JobExecutionException {
 		JobDataMap data = context.getJobDetail().getJobDataMap();
 		Long processInstanceId = (Long) data.get(PROCESS_INSTANCE_ID);
-		System.out.println("Process Instance ID: " + processInstanceId + " says: \"hello world\" at " + new Date());
+		ClientProducer producer = (ClientProducer) data.get(TIMER_EXECUTOR_CONNECTOR);
+		ClientSession session = (ClientSession) data.get(TIMER_EXECUTOR_SESSION);
+		write(session, producer, processInstanceId);
+		System.out.println("Process Instance ID: " + processInstanceId + " executed at " + new Date());
 	}
 
+	private void write(ClientSession session, ClientProducer producer, long processInstanceId) {
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		ObjectOutputStream oout;
+		try {
+			oout = new ObjectOutputStream(baos);
+			TimerJob timerJob = new TimerJob();
+			timerJob.setProcessId(processInstanceId);
+			oout.writeObject(timerJob);
+			ClientMessage message = session.createMessage(true);
+			message.getBodyBuffer().writeBytes(baos.toByteArray());
+			producer.send(message);
+		} catch (IOException e) {
+			throw new RuntimeException("Error creating message", e);
+		} catch (HornetQException e) {
+			throw new RuntimeException("Error writing message", e);
+		}
+	}
+
 }

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerSchedulerTest.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerSchedulerTest.java	2010-08-11 22:51:52 UTC (rev 34652)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerSchedulerTest.java	2010-08-11 23:09:39 UTC (rev 34653)
@@ -1,7 +1,5 @@
 package org.drools.timer.scheduler;
 
-import java.util.Calendar;
-
 import junit.framework.Assert;
 
 import org.drools.timer.message.impl.InsertScheduledTimerMessage;
@@ -21,9 +19,8 @@
 
 		InsertScheduledTimerMessage message = new InsertScheduledTimerMessage();
 		message.setProcessInstanceId(12L);
-		Calendar calendar = Calendar.getInstance();
-		calendar.add(Calendar.SECOND, 5);
-		message.setActivationTime(calendar.getTime());
+		message.setPeriod(3000);
+		message.setDelay(1000);
 		client.write(message);
 		
 		Thread.sleep(10000);

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/contextTest.xml
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/contextTest.xml	2010-08-11 22:51:52 UTC (rev 34652)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/contextTest.xml	2010-08-11 23:09:39 UTC (rev 34653)
@@ -43,15 +43,16 @@
 
   <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
 
-
   <bean id="timerSchedulerHornetQServer" class="org.drools.timer.scheduler.TimerSchedulerHornetQServer" init-method="start" destroy-method="stop">
     <property name="consumer" ref="timerMessageConsumer"/>
     <property name="timerScheduler"  ref="timerScheduler"/>
   </bean>
 
-  <bean id="timerScheduler" class="org.drools.timer.scheduler.TimerScheduler" >
+  <bean id="timerScheduler" class="org.drools.timer.scheduler.TimerScheduler">
   	<property name="scheduler" ref="scheduler" />
   	<property name="timerPersistence" ref="jpaTimerPersistence" />
+  	<property name="session" ref="clientSession" />
+  	<property name="timerExecutorConnector" ref="timerMessageProducer" />
   </bean>
 
   <bean id="jpaTimerPersistence" class="org.drools.timer.persistence.JPATimerPersistence" >
@@ -89,11 +90,14 @@
   	<constructor-arg value="timerServiceMessages" />
   </bean>
 
-  <!-- HornetQ session for queue messageBoardQueue -->
   <bean id="timerMessageConsumer" factory-bean="clientSession" factory-method="createConsumer" destroy-method="close">
     <constructor-arg value="timerServiceMessages"/>
   </bean>
 
+  <bean id="executorMessageProducer" factory-bean="clientSession" factory-method="createProducer" destroy-method="close">
+  	<constructor-arg value="executorServiceMessages" />
+  </bean>
+
   <bean id="clientSession" factory-bean="clientSessionFactory" factory-method="createSession" init-method="start"/>
 
   <!-- client connection with the HornetQ server -->
@@ -130,6 +134,12 @@
               <constructor-arg name="filterString"><null/></constructor-arg>
               <constructor-arg name="durable" value="true"/>
             </bean>
+            <bean class="org.hornetq.core.server.cluster.QueueConfiguration">
+              <constructor-arg name="address" value="executorServiceMessages"/>
+              <constructor-arg name="name" value="executorServiceMessages"/>
+              <constructor-arg name="filterString"><null/></constructor-arg>
+              <constructor-arg name="durable" value="true"/>
+            </bean>
           </list>
         </property>
         <property name="acceptorConfigurations">

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/IntegrationTest.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/IntegrationTest.java	2010-08-11 22:51:52 UTC (rev 34652)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/IntegrationTest.java	2010-08-11 23:09:39 UTC (rev 34653)
@@ -1,7 +1,5 @@
 package org.drools.timer.test;
 
-import java.util.Calendar;
-
 import junit.framework.Assert;
 
 import org.drools.timer.message.impl.InsertScheduledTimerMessage;
@@ -23,9 +21,8 @@
 
 		InsertScheduledTimerMessage message = new InsertScheduledTimerMessage();
 		message.setProcessInstanceId(12L);
-		Calendar calendar = Calendar.getInstance();
-		calendar.add(Calendar.SECOND, 5);
-		message.setActivationTime(calendar.getTime());
+		message.setPeriod(3000);
+		message.setDelay(1000);
 		client.write(message);
 		
 		Thread.sleep(10000);

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/contextTest.xml
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/contextTest.xml	2010-08-11 22:51:52 UTC (rev 34652)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/contextTest.xml	2010-08-11 23:09:39 UTC (rev 34653)
@@ -51,6 +51,8 @@
   <bean id="timerScheduler" class="org.drools.timer.scheduler.TimerScheduler" >
   	<property name="scheduler" ref="scheduler" />
   	<property name="timerPersistence" ref="jpaTimerPersistence" />
+  	<property name="session" ref="clientSession" />
+  	<property name="timerExecutorConnector" ref="timerMessageProducer" />
   </bean>
 
   <bean id="jpaTimerPersistence" class="org.drools.timer.persistence.JPATimerPersistence" >
@@ -106,11 +108,14 @@
   	<constructor-arg value="timerServiceMessages" />
   </bean>
 
-  <!-- HornetQ session for queue messageBoardQueue -->
   <bean id="timerMessageConsumer" factory-bean="clientSession" factory-method="createConsumer" destroy-method="close">
     <constructor-arg value="timerServiceMessages"/>
   </bean>
 
+  <bean id="executorMessageProducer" factory-bean="clientSession" factory-method="createProducer" destroy-method="close">
+  	<constructor-arg value="executorServiceMessages" />
+  </bean>
+
   <bean id="clientSession" factory-bean="clientSessionFactory" factory-method="createSession" init-method="start"/>
 
   <!-- client connection with the HornetQ server -->
@@ -147,6 +152,12 @@
               <constructor-arg name="filterString"><null/></constructor-arg>
               <constructor-arg name="durable" value="true"/>
             </bean>
+            <bean class="org.hornetq.core.server.cluster.QueueConfiguration">
+              <constructor-arg name="address" value="executorServiceMessages"/>
+              <constructor-arg name="name" value="executorServiceMessages"/>
+              <constructor-arg name="filterString"><null/></constructor-arg>
+              <constructor-arg name="durable" value="true"/>
+            </bean>
           </list>
         </property>
         <property name="acceptorConfigurations">

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/pom.xml
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/pom.xml	2010-08-11 22:51:52 UTC (rev 34652)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/pom.xml	2010-08-11 23:09:39 UTC (rev 34653)
@@ -1048,6 +1048,11 @@
             <artifactId>drools-timer-scheduler</artifactId>
             <version>${project.version}</version>
          </dependency>
+         <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-timer-executor</artifactId>
+            <version>${project.version}</version>
+         </dependency>
          
       <dependency>
          <groupId>junit</groupId>



More information about the jboss-svn-commits mailing list