[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