[jboss-svn-commits] JBL Code SVN: r34725 - in labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer: drools-timer-messages/src/main/java/org/drools/timer/message and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Aug 14 19:13:05 EDT 2010
Author: diegoll
Date: 2010-08-14 19:13:05 -0400 (Sat, 14 Aug 2010)
New Revision: 34725
Modified:
labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/PersistentTimerProcessTest.java
labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/TimerMessage.java
labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/JPATimerPersistence.java
labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/model/TimerState.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/TimerSchedulerServiceTest.java
Log:
[JBRULES-2616] implemented transactional behavior between main process and the scheduler
Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/PersistentTimerProcessTest.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/PersistentTimerProcessTest.java 2010-08-14 23:12:03 UTC (rev 34724)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/PersistentTimerProcessTest.java 2010-08-14 23:13:05 UTC (rev 34725)
@@ -27,7 +27,7 @@
public class PersistentTimerProcessTest {
- private static final String H2_DB_NAME = "persistentTimersTest";
+ private static final String H2_DB_NAME = "integrationTest";
private static final Logger logger = LoggerFactory.getLogger(PersistentTimerProcessTest.class);
private static Server h2Server;
@@ -78,7 +78,7 @@
long processId = ksession.startProcess("timerProcess").getId();
ksession.dispose();
- Thread.sleep(10000); // let the scheduler trigger the jobs
+ Thread.sleep(15000); // let the scheduler trigger the jobs
//check process ended
ksession = sessionManager.loadSession(sessionId);
Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/TimerMessage.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/TimerMessage.java 2010-08-14 23:12:03 UTC (rev 34724)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/TimerMessage.java 2010-08-14 23:13:05 UTC (rev 34725)
@@ -4,13 +4,13 @@
private static final long serialVersionUID = 1L;
- private Long processInstanceId;
+ private long processInstanceId;
- public Long getProcessInstanceId() {
+ public long getProcessInstanceId() {
return processInstanceId;
}
- public void setProcessInstanceId(Long processInstanceId) {
+ public void setProcessInstanceId(long processInstanceId) {
this.processInstanceId = processInstanceId;
}
Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/JPATimerPersistence.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/JPATimerPersistence.java 2010-08-14 23:12:03 UTC (rev 34724)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/JPATimerPersistence.java 2010-08-14 23:13:05 UTC (rev 34725)
@@ -2,7 +2,6 @@
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
import javax.persistence.NoResultException;
import org.drools.timer.persistence.model.TimerState;
@@ -16,7 +15,10 @@
private EntityManagerFactory entityManagerFactory;
public void save(TimerState object) {
- getEntityManager().persist(object);
+ EntityManager entityManager = getEntityManager();
+ entityManager.joinTransaction();
+ entityManager.persist(object);
+ logger.debug("Saved timer for process instance " + object.getProcessInstanceId());
}
public boolean isExecutable(final long processInstanceId) {
@@ -38,12 +40,10 @@
public boolean remove(long processInstanceId) {
EntityManager entityManager = getEntityManager();
try{
- EntityTransaction transaction = entityManager.getTransaction();
- transaction.begin();
+ entityManager.joinTransaction();
boolean removed = entityManager.createQuery("delete TimerState where processInstanceId=:processId")
.setParameter("processId", processInstanceId)
.executeUpdate() == 1;
- transaction.commit();
logger.debug("Removed timer for process instance " + processInstanceId);
return removed;
} catch (RuntimeException e) {
Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/model/TimerState.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/model/TimerState.java 2010-08-14 23:12:03 UTC (rev 34724)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/model/TimerState.java 2010-08-14 23:13:05 UTC (rev 34725)
@@ -8,23 +8,23 @@
@Entity
public class TimerState {
- private Integer id;
- private Long processInstanceId;
+ private long id;
+ private long processInstanceId;
private long timerId;
private boolean executed;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
- public Integer getId() {
+ public long getId() {
return id;
}
- public void setId(Integer id) {
+ public void setId(long id) {
this.id = id;
}
- public Long getProcessInstanceId() {
+ public long getProcessInstanceId() {
return processInstanceId;
}
- public void setProcessInstanceId(Long processInstanceId) {
+ public void setProcessInstanceId(long processInstanceId) {
this.processInstanceId = processInstanceId;
}
public boolean isExecuted() {
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-14 23:12:03 UTC (rev 34724)
+++ 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-14 23:13:05 UTC (rev 34725)
@@ -6,6 +6,7 @@
import java.util.Date;
import org.drools.timer.message.TimerJob;
+import org.drools.timer.persistence.TimerPersistence;
import org.hornetq.api.core.HornetQException;
import org.hornetq.api.core.client.ClientMessage;
import org.hornetq.api.core.client.ClientProducer;
@@ -32,19 +33,27 @@
public static final String TIMER_EXECUTOR_CONNECTOR = "timerExecutorConnector";
public static final String TIMER_EXECUTOR_SESSION = "timerExecutorSession";
+ public static final String TIMER_PERSISTENCE = "timerPersistence";
public void execute(JobExecutionContext context) throws JobExecutionException {
- logger.debug("Executing scheduled timer");
-
+ JobDataMap data = context.getJobDetail().getJobDataMap();
+ long processInstanceId = data.getLong(PROCESS_INSTANCE_ID);
+ long timerId = data.getLong(TIMER_ID);
+ TimerPersistence timerPersistence = (TimerPersistence) data.get(TIMER_PERSISTENCE);
+ if(!timerPersistence.exists(timerId, processInstanceId)){
+ logger.warn("Attempt to execute job without a persistent timer. "
+ + "Process ID: " + processInstanceId
+ + "Timer ID: " + timerId);
+ return;
+ }
+ logger.debug("Executing scheduled timer");
+
long period = ((SimpleTrigger)context.getTrigger()).getRepeatInterval();
- JobDataMap data = context.getJobDetail().getJobDataMap();
- long processInstanceId = data.getLong(PROCESS_INSTANCE_ID);
int sessionId = data.getInt(KSESSION_ID);
String runtimeSessionConfiguratorBeanName = data.getString(SESSION_CONFIGURATION);
String knowledgeStoreServiceBeanName = data.getString(KSTORE);
String knowledgeBaseBeanName = data.getString(KBASE);
String environmentBeanName = data.getString(ENV);
- long timerId = data.getLong(TIMER_ID);
ClientProducer producer = (ClientProducer) data.get(TIMER_EXECUTOR_CONNECTOR);
ClientSession session = (ClientSession) data.get(TIMER_EXECUTOR_SESSION);
Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerSchedulerServiceTest.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerSchedulerServiceTest.java 2010-08-14 23:12:03 UTC (rev 34724)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerSchedulerServiceTest.java 2010-08-14 23:13:05 UTC (rev 34725)
@@ -3,10 +3,12 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.drools.timer.message.TimerJob;
import org.drools.timer.message.impl.InsertScheduledTimerMessage;
+import org.drools.timer.persistence.model.TimerState;
import org.drools.timer.scheduler.utils.HornetQMessageTranslator;
import org.h2.tools.DeleteDbFiles;
import org.h2.tools.Server;
@@ -53,9 +55,15 @@
HornetQMessageTranslator<TimerJob> executorTranslator = (HornetQMessageTranslator<TimerJob>) schedulerContext.getBean("messageTranslator");
long scheduledPeriod = 1000;
- scheduleJob(schedulerProducer, schedulerTranslator, scheduledPeriod);
+ long processInstanceId = 1L;
+ long timerId = 1L;
+
+ scheduleJob(schedulerProducer, schedulerTranslator, scheduledPeriod, processInstanceId, timerId);
Thread.sleep(2000);
+ insertTimerState(entityManagerFactoryForTest, processInstanceId, timerId);
+ Thread.sleep(2000);
+
TimerJob timerJob = executorTranslator.readMessage(timerJobsConsumer.receive());
Assert.assertEquals(scheduledPeriod, timerJob.getPeriod());
@@ -64,10 +72,21 @@
schedulerContext.close();
}
- private void scheduleJob(ClientProducer schedulerProducer, HornetQMessageTranslator<InsertScheduledTimerMessage> schedulerTranslator, long period) throws HornetQException {
+ private void insertTimerState(EntityManagerFactory entityManagerFactory, long processInstanceId, long timerId) {
+ EntityManager entityManager = entityManagerFactory.createEntityManager();
+ TimerState timerState = new TimerState();
+ timerState.setTimerId(timerId);
+ timerState.setProcessInstanceId(processInstanceId);
+ entityManager.getTransaction().begin();
+ entityManager.persist(timerState);
+ entityManager.getTransaction().commit();
+ }
+
+ private void scheduleJob(ClientProducer schedulerProducer, HornetQMessageTranslator<InsertScheduledTimerMessage> schedulerTranslator, long period, long processInstanceId, long timerId) throws HornetQException {
InsertScheduledTimerMessage scheduleTimerMessage = new InsertScheduledTimerMessage();
+ scheduleTimerMessage.setProcessInstanceId(processInstanceId);
+ scheduleTimerMessage.setTimerId(timerId);
scheduleTimerMessage.setPeriod(period);
- scheduleTimerMessage.setProcessInstanceId(1L);
schedulerProducer.send(schedulerTranslator.writeMessage(scheduleTimerMessage));
}
More information about the jboss-svn-commits
mailing list