[jboss-svn-commits] JBL Code SVN: r34548 - in labs/jbossrules/branches/5_1_20100802_esteban_diega: drools-process/drools-persistent-timer and 21 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Aug 5 10:30:09 EDT 2010


Author: lucazamador
Date: 2010-08-05 10:30:08 -0400 (Thu, 05 Aug 2010)
New Revision: 34548

Added:
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/pom.xml
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/ProcessTimerQuartzPersistenceStrategy.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/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/SchedulerConnector.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/
   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/resources/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/test/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-messages/src/main/resources/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-messages/src/test/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-messages/src/test/java/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-messages/src/test/resources/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerHornetQServer.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerServer.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerMessageHornetQClient.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/
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/contextTest.xml
Removed:
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerMessageProcessor.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerCommunicationTest.java
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-process-task/src/main/java/org/drools/time/
Modified:
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/pom.xml
   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/resources/context.xml
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/pom.xml
   labs/jbossrules/branches/5_1_20100802_esteban_diega/pom.xml
Log:
communications removed. timer-core added. process-task cleaned. scheduler small impl


Property changes on: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core
___________________________________________________________________
Name: svn:ignore
   + target
.settings
.classpath
.project


Added: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/pom.xml
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/pom.xml	                        (rev 0)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/pom.xml	2010-08-05 14:30:08 UTC (rev 34548)
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>drools-persistent-timer</artifactId>
+    <groupId>org.drools</groupId>
+    <version>5.1.0</version>
+  </parent>
+  <artifactId>drools-timer-core</artifactId>
+  <packaging>jar</packaging>
+  <name>Drools :: Timers :: Core</name>
+  
+  <dependencies>
+  
+  	<!-- Drools dependencies -->
+  	<dependency>
+  	  <groupId>org.drools</groupId>
+  	  <artifactId>drools-core</artifactId>
+  	</dependency>
+  	<dependency>
+  	  <groupId>org.drools</groupId>
+  	  <artifactId>drools-timer-messages</artifactId>
+  	</dependency>
+  
+  	<!-- HornetQ dependencies -->
+    <dependency>
+      <groupId>org.hornetq</groupId>
+      <artifactId>hornetq-core</artifactId>
+      <version>${hornetq.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.hornetq</groupId>
+      <artifactId>hornetq-transports</artifactId>
+      <version>${hornetq.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.netty</groupId>
+      <artifactId>netty</artifactId>
+      <version>${netty.version}</version>
+    </dependency>
+    
+    <!-- Spring Dependencies -->
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-core</artifactId>
+      <version>${spring.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-beans</artifactId>
+      <version>${spring.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context</artifactId>
+      <version>${spring.version}</version>
+    </dependency>
+    
+    <!-- SL4J dependencies -->
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>1.5.8</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <version>1.4.2</version>
+      <scope>runtime</scope>
+    </dependency>
+    
+    <!-- test dependencies -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    
+  </dependencies>
+
+</project>


Property changes on: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/pom.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/ProcessTimerQuartzPersistenceStrategy.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/ProcessTimerQuartzPersistenceStrategy.java	                        (rev 0)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/ProcessTimerQuartzPersistenceStrategy.java	2010-08-05 14:30:08 UTC (rev 34548)
@@ -0,0 +1,26 @@
+package org.drools.timer.core;
+
+import org.drools.process.instance.timer.TimerManager.ProcessJobContext;
+import org.drools.time.ProcessTimerPersistenceStrategy;
+import org.drools.time.impl.IntervalTrigger;
+import org.drools.time.impl.ProcessJobHandle;
+import org.drools.timer.core.connector.SchedulerConnector;
+
+public class ProcessTimerQuartzPersistenceStrategy implements ProcessTimerPersistenceStrategy {
+
+	private final SchedulerConnector connector;
+
+	public ProcessTimerQuartzPersistenceStrategy(SchedulerConnector connector) throws Exception {
+		this.connector = connector;
+		this.connector.connect();
+	}
+
+	public void save(ProcessJobContext processContext, IntervalTrigger intervalTrigger) {
+		connector.send(processContext);
+		// Create record in DB
+	}
+
+	public boolean remove(ProcessJobHandle jobHandle) {
+		return false;
+	}
+}


Property changes on: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/ProcessTimerQuartzPersistenceStrategy.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/SchedulerConnector.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/SchedulerConnector.java	                        (rev 0)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/SchedulerConnector.java	2010-08-05 14:30:08 UTC (rev 34548)
@@ -0,0 +1,11 @@
+package org.drools.timer.core.connector;
+
+import org.drools.process.instance.timer.TimerManager.ProcessJobContext;
+
+public interface SchedulerConnector {
+
+	public void connect() throws Exception;
+	public void disconnect() throws Exception;
+	public void send(ProcessJobContext processContext);
+
+}


Property changes on: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/SchedulerConnector.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: 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	                        (rev 0)
+++ 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-05 14:30:08 UTC (rev 34548)
@@ -0,0 +1,107 @@
+package org.drools.timer.core.connector.impl;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.process.instance.timer.TimerManager.ProcessJobContext;
+import org.drools.timer.core.connector.SchedulerConnector;
+import org.drools.timer.message.impl.InsertScheduledTimerMessage;
+import org.hornetq.api.core.HornetQException;
+import org.hornetq.api.core.TransportConfiguration;
+import org.hornetq.api.core.client.ClientMessage;
+import org.hornetq.api.core.client.ClientProducer;
+import org.hornetq.api.core.client.ClientSession;
+import org.hornetq.api.core.client.ClientSessionFactory;
+import org.hornetq.api.core.client.HornetQClient;
+import org.hornetq.integration.transports.netty.NettyConnectorFactory;
+import org.hornetq.integration.transports.netty.TransportConstants;
+
+public class HornetQSchedulerConnector implements SchedulerConnector {
+
+	private String DEFAULT_TIMER_MESSAGES_QUEUE = "timerServiceMessages";
+
+	private ClientSession session;
+	private ClientProducer producer;
+	private Integer port;
+	private String address;
+	private boolean connected;
+
+	/**
+	 * Create a HornetQ connector with the Timer Scheduler
+	 * @param address Timer Scheduler address
+	 * @param port Timer Scheduler port
+	 */
+	public HornetQSchedulerConnector(String address, Integer port) {
+		if (address==null) {
+			throw new IllegalArgumentException("address is a required argument");
+		}
+		if (port==null) {
+			throw new IllegalArgumentException("port is a required argument");
+		}
+		this.address = address;
+		this.port = port;
+	}
+	
+	/**
+	 * Create a HornetQ connector with the Timer Scheduler
+	 * @param address Timer Scheduler address
+	 * @param port Timer Scheduler port
+	 * @param timersMessageQueue Must be configured if was changed in the Timer Scheduler configuration.
+	 * 							 Default value: timerServiceMessages
+	 */
+	public HornetQSchedulerConnector(String address, Integer port, String timersMessageQueue) {
+		this(address, port);
+		if (timersMessageQueue==null) {
+			throw new IllegalArgumentException("TimersMessageQueue is a required argument");
+		}
+		this.DEFAULT_TIMER_MESSAGES_QUEUE = timersMessageQueue;
+	}
+
+	/**
+	 * Create the connection with the Timer Scheduler.
+	 */
+	public void connect() throws HornetQException {
+		if (connected) {
+			return;
+		}
+		Map<String, Object> connectionParams = new HashMap<String, Object>();
+		connectionParams.put(TransportConstants.PORT_PROP_NAME, port);
+		connectionParams.put(TransportConstants.HOST_PROP_NAME, address);
+		TransportConfiguration transportConfiguration = new TransportConfiguration(NettyConnectorFactory.class.getCanonicalName(), connectionParams);
+		ClientSessionFactory factory = HornetQClient.createClientSessionFactory(transportConfiguration);
+		session = factory.createSession();
+		producer = session.createProducer(DEFAULT_TIMER_MESSAGES_QUEUE);
+		session.start();
+		connected = true;
+	}
+
+	public void disconnect() throws Exception {
+		if (session!= null && !session.isClosed()) {
+			session.close();
+			producer.close();
+		}
+	}
+
+	public void send(ProcessJobContext processContext) {
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		ObjectOutputStream oout;
+		try {
+			oout = new ObjectOutputStream(baos);
+			InsertScheduledTimerMessage insertTimerMessage = new InsertScheduledTimerMessage();
+			insertTimerMessage.setProcessInstanceId(processContext.getProcessInstanceId());
+			insertTimerMessage.setActivationTime(processContext.getTimer().getActivated());
+			oout.writeObject(insertTimerMessage);
+			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);
+		}
+	}
+
+}


Property changes on: 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
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/pom.xml
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/pom.xml	2010-08-05 13:50:14 UTC (rev 34547)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/pom.xml	2010-08-05 14:30:08 UTC (rev 34548)
@@ -16,10 +16,23 @@
       <groupId>org.drools</groupId>
       <artifactId>drools-timer-messages</artifactId>
     </dependency>
+    
+    <!-- HornetQ dependencies -->
     <dependency>
-      <groupId>org.drools</groupId>
-      <artifactId>drools-timer-communication</artifactId>
+      <groupId>org.hornetq</groupId>
+      <artifactId>hornetq-core</artifactId>
+      <version>${hornetq.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.hornetq</groupId>
+      <artifactId>hornetq-transports</artifactId>
+      <version>${hornetq.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.netty</groupId>
+      <artifactId>netty</artifactId>
+      <version>${netty.version}</version>
+    </dependency>
     
     <!-- Spring Dependencies -->
     <dependency>

Deleted: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerMessageProcessor.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerMessageProcessor.java	2010-08-05 13:50:14 UTC (rev 34547)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerMessageProcessor.java	2010-08-05 14:30:08 UTC (rev 34548)
@@ -1,16 +0,0 @@
-package org.drools.timer.scheduler;
-
-import org.drools.timer.message.impl.InsertScheduledTimerMessage;
-import org.drools.timer.message.impl.RemoveScheduledTimerMessage;
-
-public class TimerMessageProcessor {
-
-	public void process(InsertScheduledTimerMessage message) {
-		System.out.println("process InsertScheduledTimerMessage");
-	}
-
-	public void process(RemoveScheduledTimerMessage message) {
-		System.out.println("process RemoveScheduledTimerMessage");
-	}
-
-}

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-05 13:50:14 UTC (rev 34547)
+++ 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-05 14:30:08 UTC (rev 34548)
@@ -1,5 +1,30 @@
 package org.drools.timer.scheduler;
 
+import org.drools.timer.message.TimerMessage;
+import org.drools.timer.message.impl.InsertScheduledTimerMessage;
+import org.drools.timer.message.impl.RemoveScheduledTimerMessage;
+
 public class TimerScheduler {
 	
+	private void process(InsertScheduledTimerMessage message) {
+		System.out.println("process InsertScheduledTimerMessage");
+	}
+
+	private void process(RemoveScheduledTimerMessage message) {
+		System.out.println("process RemoveScheduledTimerMessage");
+	}
+
+	public void process(TimerMessage message) {
+		if (message instanceof InsertScheduledTimerMessage) {
+			process((InsertScheduledTimerMessage)message);
+		}
+		else if (message instanceof RemoveScheduledTimerMessage) {
+			process((RemoveScheduledTimerMessage)message);
+		}
+		else {
+			throw new UnsupportedOperationException("Timer Message not implemented yet");
+		}
+	}
+
+
 }

Added: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerHornetQServer.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerHornetQServer.java	                        (rev 0)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerHornetQServer.java	2010-08-05 14:30:08 UTC (rev 34548)
@@ -0,0 +1,90 @@
+package org.drools.timer.scheduler;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+
+import org.drools.timer.message.TimerMessage;
+import org.hornetq.api.core.HornetQException;
+import org.hornetq.api.core.client.ClientConsumer;
+import org.hornetq.api.core.client.ClientMessage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TimerSchedulerHornetQServer extends TimerSchedulerServer {
+
+	private static final Logger logger = LoggerFactory.getLogger(TimerSchedulerHornetQServer.class);
+
+	private ClientConsumer consumer;
+	private TimerScheduler timerScheduler;
+	private boolean running;
+
+	public void start() {
+		running = true;
+		logger.info("Timer Scheduler Server started");
+		new Thread(this).start();
+	}
+
+	public void stop() {
+		running = false;
+		logger.info("Timer Scheduler Server stopped");
+	}
+
+	public void run() {
+		running = true;
+		try {
+			while (running) {
+				ClientMessage clientMessage = getConsumer().receive();
+				if (clientMessage!=null) {
+					TimerMessage message = (TimerMessage) readMessage(clientMessage);
+					timerScheduler.process(message);
+				}
+			}
+		}
+		catch (HornetQException e) {
+			switch (e.getCode()) {
+			case HornetQException.OBJECT_CLOSED:
+				logger.info(e.getMessage(), e);
+				break;
+			default:
+				logger.error(e.getMessage(), e);
+				break;
+			}
+		}
+		catch (Exception e) {
+			throw new RuntimeException("Server Exception with class " + getClass());
+		}
+	}
+
+	private Object readMessage(ClientMessage msgReceived) throws IOException {
+		int bodySize = msgReceived.getBodySize();
+		byte[] message = new byte[bodySize];
+		msgReceived.getBodyBuffer().readBytes(message);
+		ByteArrayInputStream bais = new ByteArrayInputStream(message);
+		try {
+			ObjectInputStream ois = new ObjectInputStream(bais);
+			return ois.readObject();
+		} catch (IOException e) {
+			throw new IOException("Error reading message");
+		} catch (ClassNotFoundException e) {
+			throw new IOException("Error creating message");
+		}
+	}
+
+	public void setConsumer(ClientConsumer consumer) {
+		this.consumer = consumer;
+	}
+
+	public ClientConsumer getConsumer() {
+		return consumer;
+	}
+
+	public void setTimerScheduler(TimerScheduler timerScheduler) {
+		this.timerScheduler = timerScheduler;
+	}
+
+	public TimerScheduler getTimerScheduler() {
+		return timerScheduler;
+	}
+
+}


Property changes on: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerHornetQServer.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerServer.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerServer.java	                        (rev 0)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerServer.java	2010-08-05 14:30:08 UTC (rev 34548)
@@ -0,0 +1,8 @@
+package org.drools.timer.scheduler;
+
+public abstract class TimerSchedulerServer implements Runnable {
+
+	public abstract void start();
+	public abstract void stop();
+
+}


Property changes on: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerServer.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/resources/context.xml
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/resources/context.xml	2010-08-05 13:50:14 UTC (rev 34547)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/resources/context.xml	2010-08-05 14:30:08 UTC (rev 34548)
@@ -8,12 +8,12 @@
                       http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd  
                       http://www.springframework.org/schema/util     http://www.springframework.org/schema/util/spring-util-3.0.xsd" >
 
-
-
-
-  <bean id="timerMessageHornetQServer" class="org.drools.timer.communication.impl.TimerMessageHornetQServer" init-method="start" destroy-method="stop">
+  <bean id="timerSchedulerHornetQServer" class="org.drools.timer.scheduler.TimerSchedulerHornetQServer" init-method="start" destroy-method="stop">
     <property name="consumer" ref="timerMessageConsumer"/>
+    <property name="timerMessageProcessor"  ref="timerMessageProcessor"/>
   </bean>
+  
+  <bean id="timerMessageProcessor" class="org.drools.timer.scheduler.processor.TimerMessageProcessor" />
 
   <!-- HornetQ session for queue messageBoardQueue -->
   <bean id="timerMessageConsumer" factory-bean="clientSession" factory-method="createConsumer" destroy-method="close">

Deleted: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerCommunicationTest.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerCommunicationTest.java	2010-08-05 13:50:14 UTC (rev 34547)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerCommunicationTest.java	2010-08-05 14:30:08 UTC (rev 34548)
@@ -1,17 +0,0 @@
-package org.drools.timer.scheduler;
-
-import org.drools.timer.communication.impl.TimerMessageHornetQServer;
-import org.junit.Test;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-import org.springframework.util.Assert;
-
-public class TimerCommunicationTest {
-
-	@Test
-	public void simple() throws InterruptedException {
-		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
-		TimerMessageHornetQServer timerMessageServer = (TimerMessageHornetQServer) context.getBean("timerMessageHornetQServer");
-		Assert.notNull(timerMessageServer);
-	}
-
-}

Added: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerMessageHornetQClient.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerMessageHornetQClient.java	                        (rev 0)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerMessageHornetQClient.java	2010-08-05 14:30:08 UTC (rev 34548)
@@ -0,0 +1,49 @@
+package org.drools.timer.scheduler;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+
+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;
+
+public class TimerMessageHornetQClient {
+
+	private ClientSession session;
+	private ClientProducer producer;
+
+	public void write(Object message) {
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		ObjectOutputStream oout;
+		try {
+			oout = new ObjectOutputStream(baos);
+			oout.writeObject(message);
+			ClientMessage clientMessage = session.createMessage(true);
+			clientMessage.getBodyBuffer().writeBytes(baos.toByteArray());
+			producer.send(clientMessage);
+		} catch (IOException e) {
+			throw new RuntimeException("Error creating message", e);
+		} catch (HornetQException e) {
+			throw new RuntimeException("Error writing message", e);
+		}
+	}
+
+	public void setSession(ClientSession session) {
+		this.session = session;
+	}
+
+	public ClientSession getSession() {
+		return session;
+	}
+
+	public void setProducer(ClientProducer producer) {
+		this.producer = producer;
+	}
+
+	public ClientProducer getProducer() {
+		return producer;
+	}
+
+}


Property changes on: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerMessageHornetQClient.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: 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	                        (rev 0)
+++ 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-05 14:30:08 UTC (rev 34548)
@@ -0,0 +1,24 @@
+package org.drools.timer.scheduler;
+
+import junit.framework.Assert;
+
+import org.drools.timer.message.impl.InsertScheduledTimerMessage;
+import org.junit.Test;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class TimerSchedulerTest {
+
+	@Test
+	public void simple() {
+		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("contextTest.xml");
+		TimerSchedulerHornetQServer timerMessageServer = (TimerSchedulerHornetQServer) context.getBean("timerSchedulerHornetQServer");
+		Assert.assertNotNull(timerMessageServer);
+
+		TimerMessageHornetQClient client = (TimerMessageHornetQClient) context.getBean("timerMessageHornetQClient");
+		Assert.assertNotNull(client);
+
+		client.write(new InsertScheduledTimerMessage());
+
+	}
+
+}


Property changes on: 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
___________________________________________________________________
Name: svn:eol-style
   + native

Added: 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	                        (rev 0)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/contextTest.xml	2010-08-05 14:30:08 UTC (rev 34548)
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans 
+  xmlns="http://www.springframework.org/schema/beans"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+  xmlns:context="http://www.springframework.org/schema/context"
+  xmlns:util="http://www.springframework.org/schema/util"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
+                      http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd  
+                      http://www.springframework.org/schema/util     http://www.springframework.org/schema/util/spring-util-3.0.xsd" >
+
+  <bean id="timerMessageHornetQClient" class="org.drools.timer.scheduler.TimerMessageHornetQClient">
+	<property name="session" ref="clientSession" />
+	<property name="producer" ref="timerMessageProducer" />
+  </bean>
+  
+  <bean id="timerMessageProducer" factory-bean="clientSession" factory-method="createProducer" destroy-method="close">
+  	<constructor-arg value="timerServiceMessages" />
+  </bean>
+
+  <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" />
+
+  <!-- HornetQ session for queue messageBoardQueue -->
+  <bean id="timerMessageConsumer" factory-bean="clientSession" factory-method="createConsumer" destroy-method="close">
+    <constructor-arg value="timerServiceMessages"/>
+  </bean>
+
+  <bean id="clientSession" factory-bean="clientSessionFactory" factory-method="createSession" init-method="start"/>
+
+  <!-- client connection with the HornetQ server -->
+  <bean id="clientSessionFactory" class="org.hornetq.api.core.client.HornetQClient" factory-method="createClientSessionFactory" depends-on="hornetQServer" >
+    <constructor-arg>
+      <bean class="org.hornetq.api.core.TransportConfiguration">
+        <constructor-arg>
+          <value>org.hornetq.integration.transports.netty.NettyConnectorFactory</value>
+        </constructor-arg>
+        <constructor-arg>
+          <map>
+            <entry>
+              <key><util:constant static-field="org.hornetq.integration.transports.netty.TransportConstants.PORT_PROP_NAME"/></key>
+              <value>5446</value>
+            </entry>
+          </map>
+        </constructor-arg>
+      </bean>
+    </constructor-arg>  
+  </bean>
+
+  <!-- HornetQ server starting queue named messageBoardQueue -->
+  <bean id="hornetQServer" class="org.hornetq.core.server.HornetQServers" factory-method="newHornetQServer" init-method="start" destroy-method="stop">
+    <constructor-arg>
+      <bean class="org.hornetq.core.config.impl.ConfigurationImpl">
+        <property name="persistenceEnabled" value="false"/>
+        <property name="securityEnabled" value="false"/>
+        <property name="clustered" value="false"/>
+        <property name="queueConfigurations">
+          <list>
+            <bean class="org.hornetq.core.server.cluster.QueueConfiguration">
+              <constructor-arg name="address" value="timerServiceMessages"/>
+              <constructor-arg name="name" value="timerServiceMessages"/>
+              <constructor-arg name="filterString"><null/></constructor-arg>
+              <constructor-arg name="durable" value="true"/>
+            </bean>
+          </list>
+        </property>
+        <property name="acceptorConfigurations">
+          <set>
+            <bean class="org.hornetq.api.core.TransportConfiguration">
+              <constructor-arg>
+                <value>org.hornetq.integration.transports.netty.NettyAcceptorFactory</value>
+              </constructor-arg>
+              <constructor-arg>
+                <map>
+                  <entry>
+                    <key>
+                      <util:constant static-field="org.hornetq.integration.transports.netty.TransportConstants.PORT_PROP_NAME"/>
+                    </key>
+                    <value>5446</value>
+                  </entry>
+                </map>
+              </constructor-arg>
+            </bean>
+          </set>
+        </property>
+      </bean>
+    </constructor-arg>
+  </bean>
+
+</beans>
\ No newline at end of file


Property changes on: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/contextTest.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/pom.xml
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/pom.xml	2010-08-05 13:50:14 UTC (rev 34547)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-process/drools-persistent-timer/pom.xml	2010-08-05 14:30:08 UTC (rev 34548)
@@ -12,13 +12,15 @@
   <name>Drools :: Persistent Timer</name>
 
   <modules>
+    <module>drools-timer-core</module>
     <module>drools-timer-messages</module>
-    <module>drools-timer-communication</module>
     <module>drools-timer-scheduler</module>
     <!--module>drools-timer-executor</module-->
   </modules>
-  
+
   <properties>
+    <hornetq.version>2.0.0.GA</hornetq.version>
+    <netty.version>3.1.5.GA</netty.version>
     <spring.version>3.0.2.RELEASE</spring.version>
   </properties>
 

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/pom.xml
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/pom.xml	2010-08-05 13:50:14 UTC (rev 34547)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/pom.xml	2010-08-05 14:30:08 UTC (rev 34548)
@@ -1030,12 +1030,12 @@
          </dependency>
          <dependency>
             <groupId>org.drools</groupId>
-            <artifactId>drools-timer-messages</artifactId>
+            <artifactId>drools-timer-core</artifactId>
             <version>${project.version}</version>
          </dependency>
          <dependency>
             <groupId>org.drools</groupId>
-            <artifactId>drools-timer-communication</artifactId>
+            <artifactId>drools-timer-messages</artifactId>
             <version>${project.version}</version>
          </dependency>
          <dependency>



More information about the jboss-svn-commits mailing list