[jboss-svn-commits] JBL Code SVN: r34970 - in labs/jbossrules/branches/diega_esteban_jpm_integration_r34940: drools-api/src/main/java/org/drools/runtime and 96 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Sep 1 23:15:08 EDT 2010


Author: diegoll
Date: 2010-09-01 23:15:05 -0400 (Wed, 01 Sep 2010)
New Revision: 34970

Added:
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/EnvironmentFactoryBean.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/core/util/KnowledgeSessionRuntimeConfigurator.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/core/util/KnowledgeSessionRuntimeConfiguratorImpl.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/LongTermTimerSupport.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/ProcessTimerPersistenceStrategy.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-flow-core/src/main/java/org/drools/process/instance/timer/ProcessJobHandle.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/pom.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/ProcessTimerQuartzPersistenceStrategy.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/SchedulerConnector.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/impl/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/impl/HornetQSchedulerConnector.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/Buddy.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/PersistentTimerProcessTest.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/META-INF/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/META-INF/orm.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/META-INF/persistence.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/datasource.properties
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/hornetq-context.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/log4j.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/timerProcess.rf
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/timerProcessSession.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/pom.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/HornetQMessageTranslator.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/JobExecutor.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/JobExecutorService.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/timer/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/timer/TimerJobExecutor.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/utils/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/utils/SerializedMessageTranslator.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/resources/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/resources/executor.properties
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/resources/executorContext.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/Buddy.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/MockProcessTimerPersistenceStrategy.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/TimerExecutorServiceTest.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/META-INF/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/META-INF/orm.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/META-INF/persistence.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/completedProcessSession.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/executorContextTest.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/log4j.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/shortProcess.rf
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/timerProcess.rf
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/timerProcessSession.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/pom.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/Message.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/TimerJob.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/TimerMessage.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/InsertScheduledTimerMessage.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/RemoveScheduledTimerMessage.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/pom.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/JPATimerPersistence.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/TimerPersistence.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/model/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/model/TimerState.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/resources/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/resources/META-INF/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/resources/META-INF/persistence.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/pom.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerScheduler.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerHornetQServer.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerHornetQService.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerServer.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/job/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/job/TimerExecutorJob.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/resources/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/resources/log4j.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/resources/schedulerContext.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerMessageHornetQClient.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerSchedulerServiceTest.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/utils/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/utils/HornetQMessageTranslator.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/utils/SerializedMessageTranslator.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/META-INF/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/META-INF/persistence.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/datasource.properties
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/schedulerContextTest.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/pom.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/IntegrationTest.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/JPAPersistentTimerTest.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/helper/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/helper/QuartzDBStructureInit.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/helper/TimerMessageHornetQClient.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/META-INF/
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/META-INF/persistence.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/TimerProcess.rf
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/contextTest.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/jdbc.properties
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/jndi.properties
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/tables_h2.sql
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/pom.xml
Modified:
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/JobHandle.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/TimerServiceFactory.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/impl/DefaultJobHandle.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/impl/JDKTimerService.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-flow-core/src/main/java/org/drools/process/instance/timer/TimerManager.java
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/pom.xml
   labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/pom.xml
Log:
[JBRULES-2616] synchronizing with trunk

Modified: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java	2010-09-02 03:01:14 UTC (rev 34969)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -29,4 +29,5 @@
     public static final String GLOBALS                              = "drools.Globals";
     public static final String CALENDARS                            = "org.drools.time.Calendars";
     public static final String DATE_FORMATS                         = "org.drools.build.DateFormats";
+	public static final String PROCESS_TIMER_STRATEGY = "org.drools.time.Process";
 }

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/EnvironmentFactoryBean.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/EnvironmentFactoryBean.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/EnvironmentFactoryBean.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,37 @@
+package org.drools.container.spring.beans;
+
+import java.util.Map;
+
+import org.drools.KnowledgeBaseFactory;
+import org.drools.runtime.Environment;
+import org.springframework.beans.factory.FactoryBean;
+
+public class EnvironmentFactoryBean implements FactoryBean {
+
+    private Map<String, Object> environment;
+    
+    public Object getObject() throws Exception {
+        Environment env = KnowledgeBaseFactory.newEnvironment();
+        for(Map.Entry<String, Object> property : getEnvironment().entrySet()){
+            env.set(property.getKey(), property.getValue());
+        }
+        return env;
+    }
+
+    public Class<?> getObjectType() {
+        return null;
+    }
+
+    public boolean isSingleton() {
+        return false;
+    }
+
+    public Map<String, Object> getEnvironment() {
+        return environment;
+    }
+
+    public void setEnvironment(Map<String, Object> properties) {
+        this.environment = properties;
+    }
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/EnvironmentFactoryBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2010-09-02 03:01:14 UTC (rev 34969)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -28,8 +28,8 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Queue;
 import java.util.Map.Entry;
+import java.util.Queue;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.Executors;
@@ -42,16 +42,15 @@
 import org.drools.Agenda;
 import org.drools.FactException;
 import org.drools.FactHandle;
-import org.drools.KnowledgeBaseFactoryService;
 import org.drools.QueryResults;
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
+import org.drools.RuleBaseConfiguration.AssertBehaviour;
+import org.drools.RuleBaseConfiguration.LogicalOverride;
 import org.drools.RuntimeDroolsException;
 import org.drools.SessionConfiguration;
 import org.drools.WorkingMemory;
 import org.drools.WorkingMemoryEntryPoint;
-import org.drools.RuleBaseConfiguration.AssertBehaviour;
-import org.drools.RuleBaseConfiguration.LogicalOverride;
 import org.drools.base.CalendarsImpl;
 import org.drools.base.MapGlobalResolver;
 import org.drools.concurrent.ExecutorService;
@@ -88,7 +87,6 @@
 import org.drools.runtime.process.InternalProcessRuntime;
 import org.drools.runtime.process.ProcessInstance;
 import org.drools.runtime.process.ProcessRuntimeFactory;
-import org.drools.runtime.process.ProcessRuntimeFactoryService;
 import org.drools.runtime.process.WorkItemHandler;
 import org.drools.runtime.process.WorkItemManager;
 import org.drools.spi.Activation;
@@ -102,7 +100,6 @@
 import org.drools.time.TimerServiceFactory;
 import org.drools.type.DateFormats;
 import org.drools.type.DateFormatsImpl;
-import org.drools.util.ServiceRegistryImpl;
 
 /**
  * Implementation of <code>WorkingMemory</code>.
@@ -346,7 +343,7 @@
         this.liaPropagations = Collections.EMPTY_LIST;
         this.timeMachine = new TimeMachine();
 
-        timerService = TimerServiceFactory.getTimerService( this.config );
+        timerService = TimerServiceFactory.getTimerService( this.config, this.environment );
 
         this.nodeMemories = new ConcurrentNodeMemories( this.ruleBase );
 

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/core/util/KnowledgeSessionRuntimeConfigurator.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/core/util/KnowledgeSessionRuntimeConfigurator.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/core/util/KnowledgeSessionRuntimeConfigurator.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,10 @@
+package org.drools.core.util;
+
+import org.drools.runtime.StatefulKnowledgeSession;
+
+public interface KnowledgeSessionRuntimeConfigurator {
+
+    public abstract StatefulKnowledgeSession configure(
+            StatefulKnowledgeSession ksession);
+
+}
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/core/util/KnowledgeSessionRuntimeConfigurator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/core/util/KnowledgeSessionRuntimeConfiguratorImpl.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/core/util/KnowledgeSessionRuntimeConfiguratorImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/core/util/KnowledgeSessionRuntimeConfiguratorImpl.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,34 @@
+package org.drools.core.util;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+public class KnowledgeSessionRuntimeConfiguratorImpl implements KnowledgeSessionRuntimeConfigurator {
+
+    private Map<String, WorkItemHandler> workItemHandlers;
+    
+    /* (non-Javadoc)
+     * @see org.drools.core.util.KnowledgeSessionRuntimeConfigurator#configure(org.drools.runtime.StatefulKnowledgeSession)
+     */
+    public StatefulKnowledgeSession configure(StatefulKnowledgeSession ksession){
+        for (Map.Entry<String, WorkItemHandler> handlerEntry : workItemHandlers.entrySet()) {
+            ksession.getWorkItemManager().registerWorkItemHandler(handlerEntry.getKey(), handlerEntry.getValue());
+        }
+        return ksession;
+    }
+
+    public Map<String, WorkItemHandler> getWorkItemHandlers() {
+        return Collections.unmodifiableMap(workItemHandlers);
+    }
+    
+    public void addWorkItemHandler(String workItemName, WorkItemHandler handler){
+        this.workItemHandlers.put(workItemName, handler);
+    }
+
+    public void setWorkItemHandlers(Map<String, WorkItemHandler> workItemHandlers) {
+        this.workItemHandlers = workItemHandlers;
+    }
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/core/util/KnowledgeSessionRuntimeConfiguratorImpl.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/JobHandle.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/JobHandle.java	2010-09-02 03:01:14 UTC (rev 34969)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/JobHandle.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -22,4 +22,5 @@
  */
 public interface JobHandle {
 
+	public boolean isLongTermJob();
 }

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/LongTermTimerSupport.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/LongTermTimerSupport.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/LongTermTimerSupport.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,8 @@
+package org.drools.time;
+
+public interface LongTermTimerSupport {
+
+    void setProcessTimerPersistenceStrategy(ProcessTimerPersistenceStrategy strategy);
+    ProcessTimerPersistenceStrategy getProcessTimerPersistenceStrategy();
+    
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/LongTermTimerSupport.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/ProcessTimerPersistenceStrategy.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/ProcessTimerPersistenceStrategy.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/ProcessTimerPersistenceStrategy.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,11 @@
+package org.drools.time;
+
+import org.drools.time.impl.IntervalTrigger;
+
+public interface ProcessTimerPersistenceStrategy {
+
+	JobHandle save(JobContext processContext, IntervalTrigger intervalTrigger);
+
+	boolean remove(JobHandle jobHandle);
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/ProcessTimerPersistenceStrategy.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/TimerServiceFactory.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/TimerServiceFactory.java	2010-09-02 03:01:14 UTC (rev 34969)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/TimerServiceFactory.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -17,14 +17,27 @@
 package org.drools.time;
 
 import org.drools.SessionConfiguration;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
 import org.drools.time.impl.PseudoClockScheduler;
 
 public class TimerServiceFactory {
     
-    public static TimerService getTimerService( SessionConfiguration config ) {
+    public static TimerService getTimerService( SessionConfiguration config) {
+        return getTimerService( config, null );
+    }
+    
+    public static TimerService getTimerService( SessionConfiguration config, Environment environment) {
         switch( config.getClockType() ) {
             case REALTIME_CLOCK:
-            	return config.newTimerService();
+            	TimerService realTimeTimerService = config.newTimerService();
+            	if(realTimeTimerService instanceof LongTermTimerSupport){
+                    if(environment != null){
+                        ((LongTermTimerSupport) realTimeTimerService)
+                        .setProcessTimerPersistenceStrategy((ProcessTimerPersistenceStrategy) environment.get(EnvironmentName.PROCESS_TIMER_STRATEGY));
+                    }
+            	}
+                return realTimeTimerService;
             case PSEUDO_CLOCK:
                 return new PseudoClockScheduler();
         }

Modified: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/impl/DefaultJobHandle.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/impl/DefaultJobHandle.java	2010-09-02 03:01:14 UTC (rev 34969)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/impl/DefaultJobHandle.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -64,4 +64,9 @@
         } else if ( !getJob().equals( other.getJob() ) ) return false;
         return true;
     }
+
+	public boolean isLongTermJob() {
+		// TODO Auto-generated method stub
+		return false;
+	}
 }

Modified: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/impl/JDKTimerService.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/impl/JDKTimerService.java	2010-09-02 03:01:14 UTC (rev 34969)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-core/src/main/java/org/drools/time/impl/JDKTimerService.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -25,6 +25,8 @@
 import org.drools.time.Job;
 import org.drools.time.JobContext;
 import org.drools.time.JobHandle;
+import org.drools.time.LongTermTimerSupport;
+import org.drools.time.ProcessTimerPersistenceStrategy;
 import org.drools.time.SessionClock;
 import org.drools.time.TimerService;
 import org.drools.time.Trigger;
@@ -38,16 +40,27 @@
 public class JDKTimerService
     implements
     TimerService,
+    LongTermTimerSupport,
     SessionClock {
     
     protected ScheduledThreadPoolExecutor scheduler;
+    private ProcessTimerPersistenceStrategy processTimerPersistenceStrategy;
 
     public JDKTimerService() {
-        this( 1 );
+        this( null );
     }
+    
+    public JDKTimerService(ProcessTimerPersistenceStrategy processTimerPersistenceStrategy){
+    	this(1, processTimerPersistenceStrategy);
+    }
 
     public JDKTimerService(int size) {
+        this(size, null);
+    }
+    
+    public JDKTimerService(int size, ProcessTimerPersistenceStrategy processTimerPersistenceStrategy) {
         this.scheduler = new ScheduledThreadPoolExecutor( size );
+        this.processTimerPersistenceStrategy = processTimerPersistenceStrategy;
     }
 
     /**
@@ -71,18 +84,22 @@
 
         Date date = trigger.nextFireTime();
 
-        if ( date != null ) {
-        	Callable<Void> callableJob = createCallableJob( job,
+        if ( date != null ) {
+            if( null != getProcessTimerPersistenceStrategy() && ctx.getJobHandle().isLongTermJob()){
+        		return getProcessTimerPersistenceStrategy().save(ctx, (IntervalTrigger) trigger);
+            }else {
+        	    Callable<Void> callableJob = createCallableJob( job,
                                                             ctx,
                                                             trigger,
                                                             jobHandle,
                                                             this.scheduler );
-            ScheduledFuture future = schedule( date,
-                                               callableJob,
-                                               this.scheduler );
-            jobHandle.setFuture( future );
+                ScheduledFuture future = schedule( date,
+                                                   callableJob,
+                                                   this.scheduler );
+                jobHandle.setFuture( future );
 
-            return jobHandle;
+                return jobHandle;
+            }
         } else {
             return null;
         }
@@ -101,8 +118,17 @@
     }
 
     public boolean removeJob(JobHandle jobHandle) {
+    	if(getProcessTimerPersistenceStrategy() != null && jobHandle.isLongTermJob())
+    		return true;
         return this.scheduler.remove( (Runnable) ((JDKJobHandle) jobHandle).getFuture() );
     }
+    
+    public boolean cancelJob(JobHandle jobHandle) {
+    	if(getProcessTimerPersistenceStrategy() != null && jobHandle.isLongTermJob()) {
+			return getProcessTimerPersistenceStrategy().remove(jobHandle);
+		}
+    	return removeJob(jobHandle);
+    }
 
     private static ScheduledFuture schedule(Date date,
     		                                Callable<Void> callableJob,
@@ -178,10 +204,23 @@
             this.future = future;
         }
 
+		public boolean isLongTermJob() {
+			return false;
+		}
+
     }
 
     public long getTimeToNextJob() {
         return 0;
     }
 
+	public ProcessTimerPersistenceStrategy getProcessTimerPersistenceStrategy() {
+		return processTimerPersistenceStrategy;
+	}
+
+	public void setProcessTimerPersistenceStrategy(
+			ProcessTimerPersistenceStrategy processTimerPersistenceStrategy) {
+		this.processTimerPersistenceStrategy = processTimerPersistenceStrategy;
+	}
+
 }

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-flow-core/src/main/java/org/drools/process/instance/timer/ProcessJobHandle.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-flow-core/src/main/java/org/drools/process/instance/timer/ProcessJobHandle.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-flow-core/src/main/java/org/drools/process/instance/timer/ProcessJobHandle.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,31 @@
+package org.drools.process.instance.timer;
+
+import org.drools.time.JobHandle;
+
+public class ProcessJobHandle implements JobHandle {
+
+	private long processId;
+	private boolean longTermJob;
+	
+	public ProcessJobHandle(boolean longTermJob, long processId){
+		this.processId = processId;
+		this.longTermJob = longTermJob;
+	}
+	
+	public long getProcessId() {
+		return processId;
+	}
+
+	public void setProcessId(long processId) {
+		this.processId = processId;
+	}
+
+	public boolean isLongTermJob() {
+		return this.longTermJob;
+	}
+
+	public void setLongTermJob(boolean longTermJob) {
+		this.longTermJob = longTermJob;
+	}
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-flow-core/src/main/java/org/drools/process/instance/timer/ProcessJobHandle.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-flow-core/src/main/java/org/drools/process/instance/timer/TimerManager.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-flow-core/src/main/java/org/drools/process/instance/timer/TimerManager.java	2010-09-02 03:01:14 UTC (rev 34969)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-flow-core/src/main/java/org/drools/process/instance/timer/TimerManager.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -189,6 +189,7 @@
             this.timer = timer;
             this.processInstanceId = processInstanceId;
             this.workingMemory = workingMemory;
+            this.jobHandle = new ProcessJobHandle(true, processInstanceId);
         }
 
         public Long getProcessInstanceId() {


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer
___________________________________________________________________
Name: svn:ignore
   + .*



Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core
___________________________________________________________________
Name: svn:ignore
   + .*


Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/pom.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/pom.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/pom.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,133 @@
+<?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.2.0.SNAPSHOT</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>
+  	<dependency>
+  	  <groupId>org.drools</groupId>
+  	  <artifactId>drools-timer-persistence</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>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-beans</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context</artifactId>
+    </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>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-spring</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-persistence-jpa</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-timer-executor</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-timer-scheduler</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-orm</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-jdbc</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.h2database</groupId>
+      <artifactId>h2</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <!-- weird dependencies -->
+    <dependency>
+      <groupId>org.opensymphony.quartz</groupId>
+      <artifactId>quartz</artifactId>
+      <version>1.6.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context-support</artifactId>
+      <version>${springframework-version}</version>
+      <scope>test</scope>
+    </dependency>
+
+    
+  </dependencies>
+
+</project>


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

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/ProcessTimerQuartzPersistenceStrategy.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/ProcessTimerQuartzPersistenceStrategy.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/ProcessTimerQuartzPersistenceStrategy.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,80 @@
+package org.drools.timer.core;
+
+import org.drools.common.AbstractWorkingMemory;
+import org.drools.process.instance.timer.ProcessJobHandle;
+import org.drools.process.instance.timer.TimerManager.ProcessJobContext;
+import org.drools.time.JobContext;
+import org.drools.time.JobHandle;
+import org.drools.time.ProcessTimerPersistenceStrategy;
+import org.drools.time.impl.IntervalTrigger;
+import org.drools.timer.core.connector.SchedulerConnector;
+import org.drools.timer.persistence.TimerPersistence;
+import org.drools.timer.persistence.model.TimerState;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ProcessTimerQuartzPersistenceStrategy implements ProcessTimerPersistenceStrategy {
+
+    private static Logger logger = LoggerFactory.getLogger(ProcessTimerQuartzPersistenceStrategy.class);
+    
+	private SchedulerConnector connector;
+	private TimerPersistence timerPersistence;
+    private String runtimeSessionConfiguratorBeanName;
+    private String knowledgeStoreServiceBeanName;
+    private String knowledgeBaseBeanName;
+    private String environmentBeanName;
+
+	public JobHandle save(JobContext jobContext, IntervalTrigger intervalTrigger) {
+	    ProcessJobContext processContext = (ProcessJobContext) jobContext;
+        int sessionId = ((AbstractWorkingMemory)processContext.getWorkingMemory()).getId();
+        long timerId = processContext.getTimer().getId();
+        long processInstanceId = processContext.getProcessInstanceId();
+        if(timerPersistence.exists(timerId, processInstanceId)){
+            logger.debug(String.format("Timer %d already exists for process %d", timerId, processInstanceId));
+        }else{
+            logger.debug(String.format("Persist timer %d for process %d", timerId, processInstanceId));
+            TimerState timerState = new TimerState();
+            timerState.setProcessInstanceId(processInstanceId);
+            timerState.setTimerId(timerId);
+    		timerPersistence.save(timerState);
+    		connector.save(processContext,
+    		               sessionId,
+    		               timerId,
+        		           runtimeSessionConfiguratorBeanName,
+        		           knowledgeStoreServiceBeanName,
+        		           knowledgeBaseBeanName,
+        		           environmentBeanName);
+        }
+		return new ProcessJobHandle(true, processContext.getProcessInstanceId());
+	}
+
+	public boolean remove(JobHandle jobHandle) {
+	    ProcessJobHandle processHandle = (ProcessJobHandle) jobHandle;
+		connector.remove(processHandle);
+		return timerPersistence.remove(processHandle.getProcessId());
+	}
+
+    public void setConnector(SchedulerConnector connector) {
+        this.connector = connector;
+    }
+
+    public void setTimerPersistence(TimerPersistence timerPersistence) {
+        this.timerPersistence = timerPersistence;
+    }
+
+    public void setRuntimeSessionConfiguratorBeanName(String runtimeSessionConfiguratorBeanName) {
+        this.runtimeSessionConfiguratorBeanName = runtimeSessionConfiguratorBeanName;
+    }
+
+    public void setKnowledgeStoreServiceBeanName(String knowledgeStoreServiceBeanName) {
+        this.knowledgeStoreServiceBeanName = knowledgeStoreServiceBeanName;
+    }
+
+    public void setKnowledgeBaseBeanName(String knowledgeBaseBeanName) {
+        this.knowledgeBaseBeanName = knowledgeBaseBeanName;
+    }
+
+    public void setEnvironmentBeanName(String environmentBeanName) {
+        this.environmentBeanName = environmentBeanName;
+    }
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/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/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/SchedulerConnector.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/SchedulerConnector.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/SchedulerConnector.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,11 @@
+package org.drools.timer.core.connector;
+
+import org.drools.process.instance.timer.ProcessJobHandle;
+import org.drools.process.instance.timer.TimerManager.ProcessJobContext;
+
+public interface SchedulerConnector {
+
+	public void save(ProcessJobContext processContext, int sessionId, long timerId, String runtimeSessionConfiguratorBeanName, String knowledgeStoreServiceBeanName, String knowledgeBaseBeanName, String environmentBeanName);
+	public boolean remove(ProcessJobHandle jobHandle);
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/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/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/impl/HornetQSchedulerConnector.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/impl/HornetQSchedulerConnector.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/main/java/org/drools/timer/core/connector/impl/HornetQSchedulerConnector.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,62 @@
+package org.drools.timer.core.connector.impl;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+
+import org.drools.process.instance.timer.ProcessJobHandle;
+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.client.ClientMessage;
+import org.hornetq.api.core.client.ClientProducer;
+import org.hornetq.api.core.client.ClientSession;
+
+public class HornetQSchedulerConnector implements SchedulerConnector {
+
+	private ClientSession session;
+	private ClientProducer producer;
+
+    public void save(ProcessJobContext processContext, int sessionId, long timerId, String runtimeSessionConfiguratorBeanName,
+            String knowledgeStoreServiceBeanName, String knowledgeBaseBeanName, String environmentBeanName) {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream oout;
+        try {
+            oout = new ObjectOutputStream(baos);
+            
+            InsertScheduledTimerMessage insertTimerMessage = new InsertScheduledTimerMessage();
+            insertTimerMessage.setProcessInstanceId(processContext.getProcessInstanceId());
+            insertTimerMessage.setPeriod(processContext.getTimer().getPeriod());
+            insertTimerMessage.setDelay(processContext.getTimer().getDelay());
+            insertTimerMessage.setEnvironmentBeanName(environmentBeanName);
+            insertTimerMessage.setKnowledgeBaseBeanName(knowledgeBaseBeanName);
+            insertTimerMessage.setKnowledgeStoreServiceBeanName(knowledgeStoreServiceBeanName);
+            insertTimerMessage.setRuntimeSessionConfiguratorBeanName(runtimeSessionConfiguratorBeanName);
+            insertTimerMessage.setSessionId(sessionId);
+            insertTimerMessage.setTimerId(timerId);
+            
+            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);
+        }
+    }
+
+	public boolean remove(ProcessJobHandle jobHandle) {
+		// TODO Remove from scheduler
+		return true;
+	}
+
+    public void setSession(ClientSession session) {
+        this.session = session;
+    }
+
+    public void setProducer(ClientProducer producer) {
+        this.producer = producer;
+    }
+}


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

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/Buddy.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/Buddy.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/Buddy.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,7 @@
+package org.drools.timer.test;
+
+import java.io.Serializable;
+
+public class Buddy implements Serializable{
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/Buddy.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/PersistentTimerProcessTest.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/PersistentTimerProcessTest.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/PersistentTimerProcessTest.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,192 @@
+package org.drools.timer.test;
+
+import java.util.Properties;
+
+import org.drools.KnowledgeBase;
+import org.drools.core.util.KnowledgeSessionRuntimeConfigurator;
+import org.drools.job.executor.JobExecutorService;
+import org.drools.persistence.jpa.KnowledgeStoreService;
+import org.drools.runtime.Environment;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.timer.message.TimerJob;
+import org.drools.timer.scheduler.TimerSchedulerHornetQService;
+import org.h2.tools.DeleteDbFiles;
+import org.h2.tools.Server;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class PersistentTimerProcessTest {
+    
+    private static final String H2_DB_NAME = "integrationTest"; 
+    private static final Logger logger = LoggerFactory.getLogger(PersistentTimerProcessTest.class);
+    private static Server h2Server;
+    
+    @BeforeClass
+    public static void startH2Database() throws Exception {
+        DeleteDbFiles.execute("", H2_DB_NAME, true);
+        h2Server = Server.createTcpServer(new String[0]);
+        h2Server.start();
+    }
+
+    @AfterClass
+    public static void stopH2Database() throws Exception {
+        logger.info( "stoping database" );
+        h2Server.stop();
+        DeleteDbFiles.execute( "", H2_DB_NAME, true );
+    }
+
+    @Test
+    public void scheduleAndTriggerPersistentTimer() throws InterruptedException{
+        String sessionContextLocation = "classpath:/timerProcessSession.xml";
+
+        AbstractApplicationContext mainApplicationContext = createMainApplicationContext(sessionContextLocation);
+        AbstractApplicationContext executorApplicationContext = createExecutorApplicationContext(sessionContextLocation);
+        AbstractApplicationContext schedulerApplicationContext = createSchedulerApplicationContext();
+
+        StatefulKnowledgeSessionManager sessionManager = new StatefulKnowledgeSessionManager()
+            .setSessionConfiguratorBeanName("sessionConfigurator")
+            .setKnowledgeStoreServiceBeanName("kstore")
+            .setKnowledgeBaseBeanName("kbase")
+            .setEnvironmentBeanName("env")
+            .setDroolsApplicationContext(mainApplicationContext)
+        ;
+
+        //start services
+        @SuppressWarnings("unchecked")
+        JobExecutorService<TimerJob> timerJobExecutor = (JobExecutorService<TimerJob>) executorApplicationContext.getBean("timerJobExecutorService");
+        TimerSchedulerHornetQService timerScheduler = (TimerSchedulerHornetQService) schedulerApplicationContext.getBean("schedulerService");
+        new Thread(timerJobExecutor, "executor").start();
+        new Thread(timerScheduler, "scheduler").start();
+        Thread.sleep(1000); // executor doesn't guarantee you it'll run immediately
+        Assert.assertTrue(timerJobExecutor.isRunning());
+        Assert.assertTrue(timerScheduler.isRunning());
+        
+        //start process
+        StatefulKnowledgeSession ksession = sessionManager.createSession();
+        int sessionId = ksession.getId();
+        long processId = ksession.startProcess("timerProcess").getId();
+        ksession.dispose();
+        
+        Thread.sleep(15000); // let the scheduler trigger the jobs
+        
+        //check process ended
+        ksession = sessionManager.loadSession(sessionId);
+        Assert.assertNull(ksession.getProcessInstance(processId));
+        ksession.dispose();
+        
+        //close everything
+        timerJobExecutor.cancel();
+        timerScheduler.cancel();
+        executorApplicationContext.close();
+        schedulerApplicationContext.close();
+        mainApplicationContext.close();
+    }
+
+    
+    private AbstractApplicationContext createSchedulerApplicationContext() {
+        return new ClassPathXmlApplicationContext("classpath:/schedulerContext.xml");
+    }
+
+    private AbstractApplicationContext createMainApplicationContext(String sessionContextLocation) {
+        return new ClassPathXmlApplicationContext(new String[]{
+                sessionContextLocation,
+                "classpath:/hornetq-context.xml"
+        });
+    }
+    
+    private AbstractApplicationContext createExecutorApplicationContext(String sessionContextLocation) {
+        PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
+        Properties properties = new Properties();
+        properties.setProperty( "sessioncontext.location", sessionContextLocation );
+        configurer.setProperties( properties );
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();
+        context.addBeanFactoryPostProcessor(configurer);
+        context.setConfigLocation("classpath:/executorContext.xml");
+        context.refresh();
+
+        return context;
+    }
+    
+    private static class StatefulKnowledgeSessionManager {
+
+        private String sessionConfiguratorBeanName;
+        private String knowledgeStoreServiceBeanName;
+        private String knowledgeBaseBeanName;
+        private String environmentBeanName;
+        private ApplicationContext droolsApplicationContext;
+
+        public StatefulKnowledgeSession createSession() {
+            Environment env = (Environment) getDroolsApplicationContext().getBean(getEnvironmentBeanName());
+            KnowledgeStoreService kstore = (KnowledgeStoreService) getDroolsApplicationContext().getBean(getKnowledgeStoreServiceBeanName());
+            KnowledgeBase kbase = (KnowledgeBase) getDroolsApplicationContext().getBean(getKnowledgeBaseBeanName());
+            StatefulKnowledgeSession ksession = kstore.newStatefulKnowledgeSession(kbase, null, env);
+            KnowledgeSessionRuntimeConfigurator sessionConfigurator = (KnowledgeSessionRuntimeConfigurator) getDroolsApplicationContext().getBean(getSessionConfiguratorBeanName());
+            sessionConfigurator.configure(ksession);
+            return ksession;
+        }
+        
+        public StatefulKnowledgeSession loadSession(int sessionId) {
+            Environment env = (Environment) getDroolsApplicationContext().getBean(getEnvironmentBeanName());
+            KnowledgeStoreService kstore = (KnowledgeStoreService) getDroolsApplicationContext().getBean(getKnowledgeStoreServiceBeanName());
+            KnowledgeBase kbase = (KnowledgeBase) getDroolsApplicationContext().getBean(getKnowledgeBaseBeanName());
+            StatefulKnowledgeSession ksession = kstore.loadStatefulKnowledgeSession(sessionId, kbase, null, env);
+            KnowledgeSessionRuntimeConfigurator sessionConfigurator = (KnowledgeSessionRuntimeConfigurator) getDroolsApplicationContext().getBean(getSessionConfiguratorBeanName());
+            sessionConfigurator.configure(ksession);
+            return ksession;
+        }
+        
+        public String getSessionConfiguratorBeanName() {
+            return sessionConfiguratorBeanName;
+        }
+
+        public StatefulKnowledgeSessionManager setSessionConfiguratorBeanName(String sessionConfiguratorBeanName) {
+            this.sessionConfiguratorBeanName = sessionConfiguratorBeanName;
+            return this;
+        }
+
+        public String getKnowledgeStoreServiceBeanName() {
+            return knowledgeStoreServiceBeanName;
+        }
+
+        public StatefulKnowledgeSessionManager setKnowledgeStoreServiceBeanName(String knowledgeStoreServiceBeanName) {
+            this.knowledgeStoreServiceBeanName = knowledgeStoreServiceBeanName;
+            return this;
+        }
+
+        public String getKnowledgeBaseBeanName() {
+            return knowledgeBaseBeanName;
+        }
+
+        public StatefulKnowledgeSessionManager setKnowledgeBaseBeanName(String knowledgeBaseBeanName) {
+            this.knowledgeBaseBeanName = knowledgeBaseBeanName;
+            return this;
+        }
+
+        public String getEnvironmentBeanName() {
+            return environmentBeanName;
+        }
+
+        public StatefulKnowledgeSessionManager setEnvironmentBeanName(String environmentBeanName) {
+            this.environmentBeanName = environmentBeanName;
+            return this;
+        }
+
+        public ApplicationContext getDroolsApplicationContext() {
+            return droolsApplicationContext;
+        }
+
+        public StatefulKnowledgeSessionManager setDroolsApplicationContext(ApplicationContext droolsApplicationContext) {
+            this.droolsApplicationContext = droolsApplicationContext;
+            return this;
+        }
+
+    }
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/java/org/drools/timer/test/PersistentTimerProcessTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/META-INF/orm.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/META-INF/orm.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/META-INF/orm.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
+               version="1.0">  
+      <named-query name="ProcessInstancesWaitingForEvent">
+          <query>
+select 
+    processInstanceInfo.processInstanceId
+from 
+    ProcessInstanceInfo processInstanceInfo
+where
+    :type in elements(processInstanceInfo.eventTypes)
+          </query>
+      </named-query>
+</entity-mappings>


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/META-INF/orm.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/META-INF/persistence.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/META-INF/persistence.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" 
+		xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
+		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		xsi:schemaLocation="
+				http://java.sun.com/xml/ns/persistence			http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
+				http://java.sun.com/xml/ns/persistence/orm		http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
+
+	<persistence-unit name="org.drools.persistence.jpa.local" transaction-type="RESOURCE_LOCAL">
+		<provider>org.hibernate.ejb.HibernatePersistence</provider>
+		<!--
+		<jta-data-source>jdbc/testDS1</jta-data-source>
+		-->
+		<class>org.drools.persistence.session.SessionInfo</class>
+		<class>org.drools.persistence.processinstance.ProcessInstanceInfo</class>
+		<class>org.drools.persistence.processinstance.variabletypes.JPAPersistedVariable</class>
+		<class>org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo</class>
+		<class>org.drools.persistence.processinstance.variabletypes.SerializablePersistedVariable</class>
+		<class>org.drools.persistence.processinstance.WorkItemInfo</class>
+        <class>org.drools.timer.persistence.model.TimerState</class>
+		
+		<properties>
+			<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
+			<!--property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/-->
+			<!--property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/-->
+
+			<property name="hibernate.max_fetch_depth" value="3" />
+			<property name="hibernate.hbm2ddl.auto" value="create" />
+			<property name="hibernate.show_sql" value="false" />
+			
+			<!--
+			<property name="hibernate.connection.autocommit" value="false" />
+			<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup" />
+			-->
+		</properties>
+	</persistence-unit>
+</persistence>


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/META-INF/persistence.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/datasource.properties
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/datasource.properties	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/datasource.properties	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,4 @@
+datasource.driverClassName=org.h2.Driver
+datasource.url=jdbc:h2:tcp://localhost/integrationTest
+datasource.username=sa
+datasource.password=sasa
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/datasource.properties
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/hornetq-context.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/hornetq-context.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/hornetq-context.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,54 @@
+<?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">
+
+  <!-- start HornetQ server -->
+  <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="executeTimerMessages" />
+              <constructor-arg name="name" value="executeTimerMessages" />
+              <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="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/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/hornetq-context.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/log4j.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/log4j.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/log4j.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+<!-- ===================================================================== -->
+<!--                                                                       -->
+<!--  Log4j Configuration                                                  -->
+<!--                                                                       -->
+<!-- ===================================================================== -->
+<!-- $Id: log4j.xml,v 1.8 2006/04/26 17:29:10 gavin Exp $ -->
+<!--
+   | For more configuration infromation and examples see the Jakarta Log4j
+   | owebsite: http://jakarta.apache.org/log4j
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<param name="Target" value="System.out"/>
+		<layout class="org.apache.log4j.PatternLayout">
+<!--			<param name="ConversionPattern" value="%-5p %d{dd-MM HH:mm:ss,SSS} (%F:%M:%L) \t %m%n"/>-->
+            <param name="ConversionPattern" value="%-5p [%t]: (%F:%M:%L) \t %m%n"/>
+		</layout>
+	</appender>
+    <logger name="org.drools.container.spring.beans.persistence">
+        <level value="INFO"/>
+    </logger>
+	<logger name="org.drools">
+		<level value="DEBUG"/>
+	</logger>
+    <logger name="org.hibernate.SQL">
+      <level value="DEBUG"/>
+    </logger>
+	<root>
+		<priority value="ERROR"/>
+		<appender-ref ref="CONSOLE"/>
+	</root>
+</log4j:configuration>


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/log4j.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/timerProcess.rf
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/timerProcess.rf	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/timerProcess.rf	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<process xmlns="http://drools.org/drools-5.0/process"
+         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+         xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
+         type="RuleFlow" name="org.drools.timer.TimerProcess" id="timerProcess" package-name="org.drools.timer" version="1" >
+
+  <header>
+    <imports>
+      <import name="org.drools.timer.test.Buddy" />
+    </imports>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" x="96" y="96" width="48" height="48" />
+    <timerNode id="2" name="Timer" x="228" y="96" width="48" height="48" delay="1000"  period="1500ms" />
+    <actionNode id="3" name="Action" x="348" y="96" width="80" height="48" >
+        <action type="expression" dialect="java" >System.out.println("Triggered");
+insert( new Buddy() );</action>
+    </actionNode>
+    <milestone id="4" name="Wait" x="504" y="96" width="80" height="48" >
+      <constraint type="rule" dialect="mvel" >Number( intValue &gt;= 5 ) from accumulate ( b: Buddy( ), count( b ) )</constraint>
+    </milestone>
+    <end id="5" name="End" x="648" y="96" width="48" height="48" />
+  </nodes>
+
+  <connections>
+    <connection from="1" to="2" />
+    <connection from="2" to="3" />
+    <connection from="3" to="4" />
+    <connection from="4" to="5" />
+  </connections>
+
+</process>
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/timerProcess.rf
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/timerProcessSession.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/timerProcessSession.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/timerProcessSession.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,132 @@
+<?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"
+  xmlns:drools="http://drools.org/schema/drools-spring"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+                      http://www.springframework.org/schema/util     http://www.springframework.org/schema/util/spring-util-3.0.xsd
+                      http://drools.org/schema/drools-spring         http://drools.org/schema/drools-spring.xsd">
+
+
+  <!-- drools configuration -->
+
+  <bean id="sessionConfigurator" class="org.drools.core.util.KnowledgeSessionRuntimeConfiguratorImpl">
+    <property name="workItemHandlers">
+      <map>
+        <entry key="nothing">
+          <bean class="org.drools.process.instance.impl.demo.DoNothingWorkItemHandler" />
+        </entry>
+      </map>
+    </property>
+  </bean>
+  
+  <drools:kstore id="kstore" />  
+
+  <drools:connection id="connection1" type="local" />
+  <drools:execution-node id="node1" connection="connection1" />
+  
+  <drools:kbase id="kbase">
+    <drools:resources>
+      <drools:resource type="DRF" source="classpath:timerProcess.rf" />
+    </drools:resources>
+  </drools:kbase>
+
+  <bean id="env" class="org.drools.container.spring.beans.EnvironmentFactoryBean">
+    <property name="environment">
+      <map>
+        <entry>
+          <key>
+            <util:constant static-field="org.drools.runtime.EnvironmentName.ENTITY_MANAGER_FACTORY"/>
+          </key>
+          <ref bean="entityManagerFactory"/>
+        </entry>
+        <entry>
+          <key>
+            <util:constant static-field="org.drools.runtime.EnvironmentName.TRANSACTION_MANAGER"/>
+          </key>
+          <ref bean="transactionManager"/>
+        </entry>
+        <entry>
+          <key>
+            <util:constant static-field="org.drools.runtime.EnvironmentName.GLOBALS"/>
+          </key>
+          <bean class="org.drools.base.MapGlobalResolver"/>
+        </entry>
+        <entry>
+          <key>
+            <util:constant static-field="org.drools.runtime.EnvironmentName.PROCESS_TIMER_STRATEGY"/>
+          </key>
+          <ref bean="quartzPersistenceStrategy"/>
+        </entry>
+      </map>
+    </property>
+  </bean>
+  
+  <!-- persistence strategy configuration -->
+  <bean id="quartzPersistenceStrategy" class="org.drools.timer.core.ProcessTimerQuartzPersistenceStrategy">
+    <property name="runtimeSessionConfiguratorBeanName" value="sessionConfigurator" />
+    <property name="knowledgeStoreServiceBeanName" value="kstore"/>
+    <property name="knowledgeBaseBeanName" value="kbase"/>
+    <property name="environmentBeanName" value="env"/>
+    
+    <property name="connector">
+      <bean class="org.drools.timer.core.connector.impl.HornetQSchedulerConnector">
+        <property name="session" ref="clientSession" />
+        <property name="producer">
+          <bean factory-bean="clientSession" factory-method="createProducer" destroy-method="close">
+            <constructor-arg value="timerServiceMessages" />
+          </bean>
+        </property>
+      </bean>
+    </property>
+    <property name="timerPersistence">
+      <bean class="org.drools.timer.persistence.JPATimerPersistence">
+        <property name="entityManagerFactory" ref="entityManagerFactory" />
+      </bean>
+    </property>
+  </bean>
+  
+  <!-- HornetQ configuration -->
+  <bean id="clientSession" factory-bean="clientSessionFactory" factory-method="createSession" init-method="start"/>
+  <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>
+  <bean id="hornetQServer" class="java.lang.Object"/>
+
+  <!-- persistence configuration -->
+  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
+    <property name="driverClassName" value="${datasource.driverClassName}" />
+    <property name="url" value="${datasource.url}" />
+    <property name="username" value="${datasource.username}" />
+    <property name="password" value="${datasource.password}" />
+  </bean>
+  
+  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+    <property name="dataSource" ref="dataSource" />
+    <property name="persistenceUnitName" value="org.drools.persistence.jpa.local" />
+  </bean>
+
+  <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+    <property name="entityManagerFactory" ref="entityManagerFactory" />
+  </bean>
+  
+  <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+    <property name="location" value="classpath:datasource.properties"/>
+  </bean>
+  
+</beans>
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-core/src/test/resources/timerProcessSession.xml
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor
___________________________________________________________________
Name: svn:ignore
   + .*


Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/pom.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/pom.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/pom.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,99 @@
+<?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.2.0.SNAPSHOT</version>
+  </parent>
+  <artifactId>drools-timer-executor</artifactId>
+  <packaging>jar</packaging>
+  <name>Drools :: Timers :: Executor</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-timer-messages</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-flow-core</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.drools</groupId>
+      <artifactId>drools-spring</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-beans</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context</artifactId>
+    </dependency>
+
+    <!-- persistence dependencies -->
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-persistence-jpa</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-orm</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-jdbc</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.h2database</groupId>
+      <artifactId>h2</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <!-- SL4J dependencies -->
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+    </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/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/pom.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/HornetQMessageTranslator.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/HornetQMessageTranslator.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/HornetQMessageTranslator.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,11 @@
+package org.drools.job.executor;
+
+import org.hornetq.api.core.client.ClientMessage;
+
+public interface HornetQMessageTranslator<T> {
+
+	T readMessage(ClientMessage clientMessage);
+
+    ClientMessage writeMessage(T object);
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/HornetQMessageTranslator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/JobExecutor.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/JobExecutor.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/JobExecutor.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,7 @@
+package org.drools.job.executor;
+
+public interface JobExecutor<T> {
+
+	public void execute(T job);
+	
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/JobExecutor.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/JobExecutorService.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/JobExecutorService.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/JobExecutorService.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,63 @@
+package org.drools.job.executor;
+
+import java.util.TimerTask;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+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 JobExecutorService<T> extends TimerTask {
+	
+	private static Logger logger = LoggerFactory.getLogger(JobExecutorService.class);
+	
+	private ClientConsumer consumer;
+	private AtomicBoolean running = new AtomicBoolean(false);
+	private HornetQMessageTranslator<T> translator;
+	private JobExecutor<T> executor;
+
+	public void run() {
+		running.set(true);
+		try {
+			while (running.get()) {
+				ClientMessage clientMessage = consumer.receive();
+				if (clientMessage!=null) {
+					T job = translator.readMessage(clientMessage);
+					executor.execute(job);
+				}
+			}
+		} catch(HornetQException hqe) {
+		    logger.error("HornetQ error code: "+hqe.getCode());
+		} catch (Exception e) {
+			logger.error("Error running job executor service", e);
+		} finally{
+		    running.set(false);
+		}
+	}
+	
+	@Override
+	public boolean cancel() {
+		boolean cancelResult = super.cancel();
+		running.set(false);
+		return cancelResult;
+	}
+
+	public boolean isRunning(){
+		return running.get();
+	}
+	
+	public void setConsumer(ClientConsumer consumer) {
+		this.consumer = consumer;
+	}
+
+	public void setTranslator(HornetQMessageTranslator<T> translator) {
+		this.translator = translator;
+	}
+
+	public void setExecutor(JobExecutor<T> executor) {
+		this.executor = executor;
+	}
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/JobExecutorService.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/timer/TimerJobExecutor.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/timer/TimerJobExecutor.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/timer/TimerJobExecutor.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,73 @@
+package org.drools.job.executor.timer;
+
+import org.drools.KnowledgeBase;
+import org.drools.command.impl.CommandBasedStatefulKnowledgeSession;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.job.executor.JobExecutor;
+import org.drools.persistence.jpa.KnowledgeStoreService;
+import org.drools.process.instance.InternalProcessRuntime;
+import org.drools.process.instance.event.SignalManager;
+import org.drools.process.instance.timer.TimerInstance;
+import org.drools.runtime.Environment;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.timer.message.TimerJob;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class TimerJobExecutor implements JobExecutor<TimerJob> {
+
+	private static Logger logger = LoggerFactory.getLogger(TimerJobExecutor.class);
+	private ApplicationContext sessionContext;
+	
+	
+	public void execute(TimerJob job) {
+	    long processInstanceId = job.getProcessId();
+	    logger.info("executing timer job");
+	    logger.debug("Process instance to signal: " + processInstanceId);
+	    StatefulKnowledgeSession ksession = loadSession(
+	            job.getSessionId(), 
+	            job.getEnvironmentBeanName(),
+	            job.getKnowledgeBaseBeanName(),
+	            job.getKnowledgeStoreServiceBeanName(), 
+	            getSessionContext());
+	    
+	    ProcessInstance processInstance = ksession.getProcessInstance(processInstanceId);
+	    if(null == processInstance){
+	        throw new IllegalArgumentException("unexistent process instance with ID: " + processInstanceId);
+	    }
+	    
+	    StatefulKnowledgeSessionImpl sessionImpl = (StatefulKnowledgeSessionImpl) ((KnowledgeCommandContext) ((CommandBasedStatefulKnowledgeSession)ksession).getCommandService().getContext()).getStatefulKnowledgesession();
+	    SignalManager signalManager = ((InternalProcessRuntime)sessionImpl.getInternalWorkingMemory().getProcessRuntime()).getSignalManager();
+	    
+	    TimerInstance timerInstance = new TimerInstance();
+	    timerInstance.setId(job.getTimerId());
+	    timerInstance.setTimerId(job.getTimerId());
+	    timerInstance.setPeriod(job.getPeriod());
+	    
+        signalManager.signalEvent( processInstanceId, "timerTriggered",  timerInstance );
+	    ksession.dispose();
+
+	}
+
+    public void setSessionContextLocation(String sessionContextLocation) {
+        logger.debug("creating session context at " + sessionContextLocation);
+        sessionContext = new ClassPathXmlApplicationContext(sessionContextLocation);
+        logger.debug("session context created");
+    }
+    
+    private ApplicationContext getSessionContext(){
+        return sessionContext;
+    }
+    
+    private StatefulKnowledgeSession loadSession(int sessionId, String envName, String kbaseName, String kstoreName, ApplicationContext sessionContext) {
+        Environment env = (Environment) sessionContext.getBean(envName);
+        KnowledgeStoreService kstore = (KnowledgeStoreService) sessionContext.getBean(kstoreName);
+        KnowledgeBase kbase = (KnowledgeBase) sessionContext.getBean(kbaseName);
+        StatefulKnowledgeSession ksession = kstore.loadStatefulKnowledgeSession(sessionId, kbase, null, env);
+        return ksession;
+    }
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/timer/TimerJobExecutor.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/utils/SerializedMessageTranslator.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/utils/SerializedMessageTranslator.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/utils/SerializedMessageTranslator.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,49 @@
+package org.drools.job.executor.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import org.drools.job.executor.HornetQMessageTranslator;
+import org.hornetq.api.core.client.ClientMessage;
+import org.hornetq.api.core.client.ClientSession;
+
+public class SerializedMessageTranslator<T> implements HornetQMessageTranslator<T> {
+	
+	private ClientSession session;
+
+	public T readMessage(ClientMessage clientMessage) {
+		int bodySize = clientMessage.getBodySize();
+		byte[] message = new byte[bodySize];
+		clientMessage.getBodyBuffer().readBytes(message);
+		ByteArrayInputStream bais = new ByteArrayInputStream(message);
+		try {
+			ObjectInputStream ois = new ObjectInputStream(bais);
+			return (T) ois.readObject();
+		} catch (IOException e) {
+			throw new IllegalArgumentException("Error reading message");
+		} catch (ClassNotFoundException e) {
+			throw new IllegalArgumentException("Error creating TimerJob");
+		}
+	}
+	
+	public ClientMessage writeMessage(T object){
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		ObjectOutputStream oout;
+		try {
+			oout = new ObjectOutputStream(baos);
+			oout.writeObject(object);
+			ClientMessage clientMessage = session.createMessage(true);
+			clientMessage.getBodyBuffer().writeBytes(baos.toByteArray());
+			return clientMessage;
+		} catch (IOException e) {
+			throw new RuntimeException("Error creating message", e);
+		}
+	}
+
+	public void setSession(ClientSession session) {
+		this.session = session;
+	}
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/java/org/drools/job/executor/utils/SerializedMessageTranslator.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/resources/executor.properties
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/resources/executor.properties	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/resources/executor.properties	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1 @@
+sessioncontext.location=classpath:/dummy.xml
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/resources/executor.properties
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/resources/executorContext.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/resources/executorContext.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/resources/executorContext.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,55 @@
+<?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="timerJobExecutorService" class="org.drools.job.executor.JobExecutorService">
+    <property name="consumer">
+      <bean id="timerMessagesConsumer" factory-bean="clientSession" factory-method="createConsumer" destroy-method="close">
+        <constructor-arg value="executeTimerMessages" />
+      </bean>
+    </property>
+    <property name="translator" ref="messageTranslator" />
+    <property name="executor">
+      <bean class="org.drools.job.executor.timer.TimerJobExecutor">
+        <property name="sessionContextLocation" value="${sessioncontext.location}" />
+      </bean>
+    </property>
+  </bean>
+
+  <bean id="messageTranslator" class="org.drools.job.executor.utils.SerializedMessageTranslator">
+    <property name="session" ref="clientSession" />
+  </bean>
+
+  <!-- client connection with the HornetQ server -->
+  <bean id="clientSession" factory-bean="clientSessionFactory" factory-method="createSession" init-method="start" />
+  <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>
+
+  <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+    <property name="location" value="classpath:executor.properties" />
+  </bean>
+
+  <!-- dummy hornetQServer for override in tests -->
+  <bean id="hornetQServer" class="java.lang.Object"/>
+</beans>
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/main/resources/executorContext.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/Buddy.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/Buddy.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/Buddy.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,7 @@
+package org.drools.job.executor.timer;
+
+import java.io.Serializable;
+
+public class Buddy implements Serializable{
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/Buddy.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/MockProcessTimerPersistenceStrategy.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/MockProcessTimerPersistenceStrategy.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/MockProcessTimerPersistenceStrategy.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,20 @@
+package org.drools.job.executor.timer;
+
+import org.drools.time.JobContext;
+import org.drools.time.JobHandle;
+import org.drools.time.ProcessTimerPersistenceStrategy;
+import org.drools.time.impl.IntervalTrigger;
+
+public class MockProcessTimerPersistenceStrategy implements
+        ProcessTimerPersistenceStrategy {
+
+    public JobHandle save(JobContext processContext,
+            IntervalTrigger intervalTrigger) {
+                return null;
+    }
+
+    public boolean remove(JobHandle jobHandle) {
+        return true;
+    }
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/MockProcessTimerPersistenceStrategy.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/TimerExecutorServiceTest.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/TimerExecutorServiceTest.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/TimerExecutorServiceTest.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,405 @@
+package org.drools.job.executor.timer;
+
+import java.util.Properties;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import org.drools.KnowledgeBase;
+import org.drools.core.util.KnowledgeSessionRuntimeConfigurator;
+import org.drools.job.executor.HornetQMessageTranslator;
+import org.drools.job.executor.JobExecutorService;
+import org.drools.job.executor.utils.SerializedMessageTranslator;
+import org.drools.persistence.jpa.KnowledgeStoreService;
+import org.drools.runtime.Environment;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.timer.message.TimerJob;
+import org.h2.tools.DeleteDbFiles;
+import org.h2.tools.Server;
+import org.hornetq.api.core.HornetQException;
+import org.hornetq.api.core.client.ClientProducer;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class TimerExecutorServiceTest {
+	
+	private static final Logger logger = LoggerFactory.getLogger(TimerExecutorServiceTest.class);
+	private static final String H2_DB_NAME = "persistentTimersTest"; 
+
+	private static Server h2Server;
+	
+    @BeforeClass
+    public static void startH2Database() throws Exception {
+        DeleteDbFiles.execute("", H2_DB_NAME, true);
+        h2Server = Server.createTcpServer(new String[0]);
+        h2Server.start();
+    }
+
+    @AfterClass
+    public static void stopH2Database() throws Exception {
+        logger .info( "stoping database" );
+        h2Server.stop();
+        DeleteDbFiles.execute( "", H2_DB_NAME, true );
+    }
+	
+	@Test
+	public void checkTriggerCompletedProcess() throws InterruptedException, HornetQException{
+	    String sessionContextLocation = "classpath:/completedProcessSession.xml";
+	    String sessionConfiguratorBeanName = "sessionConfigurator";
+        String knowledgeStoreServiceBeanName = "kstore";
+        String knowledgeBaseBeanName = "kbase";
+        String environmentBeanName = "env";
+
+        StatefulKnowledgeSessionManager sessionManager = new StatefulKnowledgeSessionManager()
+            .setSessionConfiguratorBeanName(sessionConfiguratorBeanName)
+            .setKnowledgeStoreServiceBeanName(knowledgeStoreServiceBeanName)
+            .setKnowledgeBaseBeanName(knowledgeBaseBeanName)
+            .setEnvironmentBeanName(environmentBeanName)
+            .setDroolsApplicationContext(new ClassPathXmlApplicationContext(sessionContextLocation))
+        ;
+
+	    //start the executor
+	    AbstractApplicationContext executorContext = createExecutorContext(sessionContextLocation);
+	    JobExecutorService<TimerJob> timerJobExecutorService = startJobExecutor(executorContext);
+
+        //start process
+	    final StatefulKnowledgeSession ksession = sessionManager.createSession();
+	    int sessionId = ksession.getId();
+	    
+        long processId = ksession.startProcess("shortProcess").getId();
+        ksession.dispose();
+	    
+	    ClientProducer producer = (ClientProducer)executorContext.getBean("timerMessageProducer");
+        @SuppressWarnings("unchecked")
+        HornetQMessageTranslator<TimerJob> timerJobMessageTranslator = (HornetQMessageTranslator<TimerJob>) executorContext.getBean("messageTranslator");
+        TimerSchedulerSimulator scheduler = 
+            new TimerSchedulerSimulator(timerJobMessageTranslator, producer)
+                .setKnowledgeSessionRuntimeConfiguratorBeanName(sessionConfiguratorBeanName)
+                .setKnowledgeStoreServiceBeanName(knowledgeStoreServiceBeanName)
+                .setKnowledgeBaseBeanName(knowledgeBaseBeanName)
+                .setEnvironmentBeanName(environmentBeanName)
+                .setSessionId(sessionId)
+                .setProcessId(processId)
+                .setTimerId(1)
+                .setPeriod(1000); // any value != 0
+        
+        scheduler.triggerTimerJob();
+        Thread.sleep(1000);
+
+	    //close everything
+        timerJobExecutorService.cancel();
+        producer.close();
+	    executorContext.close();
+	}
+
+    /**
+     * this test uses the following process:
+     * start -> timer -> action (insert Buddy) -> wait until 5 Buddies inserted -> end
+     * 
+     * start process
+     * simulate timer triggered
+     * check process still active
+     * simulate timer triggered 4 times (total Buddies inserted 5)
+     * check process id is not in the session anymore (it has finished)
+     * 
+     * voila
+     * 
+     * @throws InterruptedException
+     * @throws HornetQException
+     */
+	@Test
+    public void checkTriggerTimer() throws InterruptedException, HornetQException{
+        String sessionContextLocation = "classpath:/timerProcessSession.xml";
+        String sessionConfiguratorBeanName = "sessionConfigurator";
+        String knowledgeStoreServiceBeanName = "kstore";
+        String knowledgeBaseBeanName = "kbase";
+        String environmentBeanName = "env";
+
+        StatefulKnowledgeSessionManager sessionManager = new StatefulKnowledgeSessionManager()
+            .setSessionConfiguratorBeanName(sessionConfiguratorBeanName)
+            .setKnowledgeStoreServiceBeanName(knowledgeStoreServiceBeanName)
+            .setKnowledgeBaseBeanName(knowledgeBaseBeanName)
+            .setEnvironmentBeanName(environmentBeanName)
+            .setDroolsApplicationContext(new ClassPathXmlApplicationContext(sessionContextLocation))
+        ;
+
+        //start the executor
+        AbstractApplicationContext executorContext = createExecutorContext(sessionContextLocation);
+        JobExecutorService<TimerJob> timerJobExecutorService = startJobExecutor(executorContext);
+
+        //start process
+        StatefulKnowledgeSession ksession = sessionManager.createSession();
+        int sessionId = ksession.getId();
+        
+        long processId = ksession.startProcess("timerProcess").getId();
+        ksession.dispose();
+        
+        //create scheduler simulator
+        ClientProducer producer = (ClientProducer)executorContext.getBean("timerMessageProducer");
+        @SuppressWarnings("unchecked")
+        HornetQMessageTranslator<TimerJob> timerJobMessageTranslator = (SerializedMessageTranslator<TimerJob>) executorContext.getBean("messageTranslator");
+        TimerSchedulerSimulator scheduler = 
+            new TimerSchedulerSimulator(timerJobMessageTranslator, producer)
+                .setKnowledgeSessionRuntimeConfiguratorBeanName(sessionConfiguratorBeanName)
+                .setKnowledgeStoreServiceBeanName(knowledgeStoreServiceBeanName)
+                .setKnowledgeBaseBeanName(knowledgeBaseBeanName)
+                .setEnvironmentBeanName(environmentBeanName)
+                .setSessionId(sessionId)
+                .setProcessId(processId)
+                .setTimerId(1)
+                .setPeriod(1000); // any value != 0
+        
+        scheduler.triggerTimerJob();
+        Thread.sleep(1000);
+
+        ksession = sessionManager.loadSession(sessionId);
+        ProcessInstance processInstance = ksession.getProcessInstance(processId);
+        Assert.assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+        ksession.dispose();
+
+        scheduler.triggerTimerJob();
+        scheduler.triggerTimerJob();
+        scheduler.triggerTimerJob();
+        scheduler.triggerTimerJob();
+        Thread.sleep(4000);
+        
+        ksession = sessionManager.loadSession(sessionId);
+        processInstance = ksession.getProcessInstance(processId);
+        Assert.assertNull(processInstance); // this mean the process was completed elsewhere
+        
+        //close everything
+        timerJobExecutorService.cancel();
+        producer.close();
+        executorContext.close();
+    }
+
+    private JobExecutorService<TimerJob> startJobExecutor(AbstractApplicationContext executorContext)
+            throws InterruptedException {
+        @SuppressWarnings("unchecked")
+        JobExecutorService<TimerJob> timerJobExecutorService = (JobExecutorService<TimerJob>) executorContext.getBean("timerJobExecutorService");
+        ExecutorService executor = Executors.newSingleThreadExecutor();
+        executor.execute(timerJobExecutorService);
+        Thread.sleep(1500); // executor doesn't guarantee you it'll run immediately
+        Assert.assertTrue(timerJobExecutorService.isRunning());
+        return timerJobExecutorService;
+    }
+	
+    private AbstractApplicationContext createExecutorContext(String sessionContextLocation) {
+        PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
+        Properties properties = new Properties();
+        properties.setProperty( "sessioncontext.location", sessionContextLocation );
+        configurer.setProperties( properties );
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();
+        context.addBeanFactoryPostProcessor(configurer);
+        context.setConfigLocations(new String[]{
+                            "classpath:/executorContext.xml", 
+                            "classpath:/executorContextTest.xml",
+        });
+        context.refresh();
+
+        return context;
+    }
+
+    private static class StatefulKnowledgeSessionManager {
+
+        private String sessionConfiguratorBeanName;
+        private String knowledgeStoreServiceBeanName;
+        private String knowledgeBaseBeanName;
+        private String environmentBeanName;
+        private ApplicationContext droolsApplicationContext;
+
+        public StatefulKnowledgeSession createSession() {
+            Environment env = (Environment) getDroolsApplicationContext().getBean(getEnvironmentBeanName());
+            KnowledgeStoreService kstore = (KnowledgeStoreService) getDroolsApplicationContext().getBean(getKnowledgeStoreServiceBeanName());
+            KnowledgeBase kbase = (KnowledgeBase) getDroolsApplicationContext().getBean(getKnowledgeBaseBeanName());
+            StatefulKnowledgeSession ksession = kstore.newStatefulKnowledgeSession(kbase, null, env);
+            KnowledgeSessionRuntimeConfigurator sessionConfigurator = (KnowledgeSessionRuntimeConfigurator) getDroolsApplicationContext().getBean(getSessionConfiguratorBeanName());
+            sessionConfigurator.configure(ksession);
+            return ksession;
+        }
+        
+        public StatefulKnowledgeSession loadSession(int sessionId) {
+            Environment env = (Environment) getDroolsApplicationContext().getBean(getEnvironmentBeanName());
+            KnowledgeStoreService kstore = (KnowledgeStoreService) getDroolsApplicationContext().getBean(getKnowledgeStoreServiceBeanName());
+            KnowledgeBase kbase = (KnowledgeBase) getDroolsApplicationContext().getBean(getKnowledgeBaseBeanName());
+            StatefulKnowledgeSession ksession = kstore.loadStatefulKnowledgeSession(sessionId, kbase, null, env);
+            KnowledgeSessionRuntimeConfigurator sessionConfigurator = (KnowledgeSessionRuntimeConfigurator) getDroolsApplicationContext().getBean(getSessionConfiguratorBeanName());
+            sessionConfigurator.configure(ksession);
+            return ksession;
+        }
+        
+        public String getSessionConfiguratorBeanName() {
+            return sessionConfiguratorBeanName;
+        }
+
+        public StatefulKnowledgeSessionManager setSessionConfiguratorBeanName(String sessionConfiguratorBeanName) {
+            this.sessionConfiguratorBeanName = sessionConfiguratorBeanName;
+            return this;
+        }
+
+        public String getKnowledgeStoreServiceBeanName() {
+            return knowledgeStoreServiceBeanName;
+        }
+
+        public StatefulKnowledgeSessionManager setKnowledgeStoreServiceBeanName(String knowledgeStoreServiceBeanName) {
+            this.knowledgeStoreServiceBeanName = knowledgeStoreServiceBeanName;
+            return this;
+        }
+
+        public String getKnowledgeBaseBeanName() {
+            return knowledgeBaseBeanName;
+        }
+
+        public StatefulKnowledgeSessionManager setKnowledgeBaseBeanName(String knowledgeBaseBeanName) {
+            this.knowledgeBaseBeanName = knowledgeBaseBeanName;
+            return this;
+        }
+
+        public String getEnvironmentBeanName() {
+            return environmentBeanName;
+        }
+
+        public StatefulKnowledgeSessionManager setEnvironmentBeanName(String environmentBeanName) {
+            this.environmentBeanName = environmentBeanName;
+            return this;
+        }
+
+        public ApplicationContext getDroolsApplicationContext() {
+            return droolsApplicationContext;
+        }
+
+        public StatefulKnowledgeSessionManager setDroolsApplicationContext(ApplicationContext droolsApplicationContext) {
+            this.droolsApplicationContext = droolsApplicationContext;
+            return this;
+        }
+
+    }
+    
+    private static class TimerSchedulerSimulator {
+        
+        private HornetQMessageTranslator<TimerJob> translator;
+        private ClientProducer producer;
+        
+        private long processId;
+        private int sessionId;
+
+        private long timerId;
+        private long period;
+        
+        private String knowledgeStoreServiceBeanName;
+        private String knowledgeSessionRuntimeConfiguratorBeanName;
+        private String knowledgeBaseBeanName;
+        private String environmentBeanName;
+
+        public TimerSchedulerSimulator(HornetQMessageTranslator<TimerJob> translator, ClientProducer producer){
+            this.translator = translator;
+            this.producer = producer;
+        }
+        
+        public void triggerTimerJob() throws HornetQException{
+            TimerJob timerJob = new TimerJob();
+            timerJob.setProcessId(getProcessId());
+            timerJob.setSessionId(getSessionId());
+            
+            timerJob.setTimerId(getTimerId());
+            timerJob.setPeriod(getPeriod());
+            
+            timerJob.setKnowledgeStoreServiceBeanName(getKnowledgeStoreServiceBeanName());
+            timerJob.setRuntimeSessionConfiguratorBeanName(getKnowledgeSessionRuntimeConfiguratorBeanName());
+            timerJob.setEnvironmentBeanName(getEnvironmentBeanName());
+            timerJob.setKnowledgeBaseBeanName(getKnowledgeBaseBeanName());
+            
+            getProducer().send(getTranslator().writeMessage(timerJob));
+        }
+
+        public long getProcessId() {
+            return processId;
+        }
+
+        public TimerSchedulerSimulator setProcessId(long processId) {
+            this.processId = processId;
+            return this;
+        }
+
+        public int getSessionId() {
+            return sessionId;
+        }
+
+        public TimerSchedulerSimulator setSessionId(int sessionId) {
+            this.sessionId = sessionId;
+            return this;
+        }
+
+        public long getTimerId() {
+            return timerId;
+        }
+
+        public TimerSchedulerSimulator setTimerId(long timerId) {
+            this.timerId = timerId;
+            return this;
+        }
+
+        public long getPeriod() {
+            return period;
+        }
+
+        public TimerSchedulerSimulator setPeriod(long period) {
+            this.period = period;
+            return this;
+        }
+
+        public String getKnowledgeStoreServiceBeanName() {
+            return knowledgeStoreServiceBeanName;
+        }
+
+        public TimerSchedulerSimulator setKnowledgeStoreServiceBeanName(
+                String knowledgeStoreServiceBeanName) {
+            this.knowledgeStoreServiceBeanName = knowledgeStoreServiceBeanName;
+            return this;
+        }
+
+        public String getKnowledgeSessionRuntimeConfiguratorBeanName() {
+            return knowledgeSessionRuntimeConfiguratorBeanName;
+        }
+
+        public TimerSchedulerSimulator setKnowledgeSessionRuntimeConfiguratorBeanName(
+                String knowledgeSessionRuntimeConfiguratorBeanName) {
+            this.knowledgeSessionRuntimeConfiguratorBeanName = knowledgeSessionRuntimeConfiguratorBeanName;
+            return this;
+        }
+
+        public String getKnowledgeBaseBeanName() {
+            return knowledgeBaseBeanName;
+        }
+
+        public TimerSchedulerSimulator setKnowledgeBaseBeanName(String knowledgeBaseBeanName) {
+            this.knowledgeBaseBeanName = knowledgeBaseBeanName;
+            return this;
+        }
+
+        public String getEnvironmentBeanName() {
+            return environmentBeanName;
+        }
+
+        public TimerSchedulerSimulator setEnvironmentBeanName(String environmentBeanName) {
+            this.environmentBeanName = environmentBeanName;
+            return this;
+        }
+
+        public HornetQMessageTranslator<TimerJob> getTranslator() {
+            return translator;
+        }
+        
+        public ClientProducer getProducer() {
+            return producer;
+        }
+    }
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/java/org/drools/job/executor/timer/TimerExecutorServiceTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/META-INF/orm.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/META-INF/orm.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/META-INF/orm.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
+               version="1.0">  
+      <named-query name="ProcessInstancesWaitingForEvent">
+          <query>
+select 
+    processInstanceInfo.processInstanceId
+from 
+    ProcessInstanceInfo processInstanceInfo
+where
+    :type in elements(processInstanceInfo.eventTypes)
+          </query>
+      </named-query>
+</entity-mappings>


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/META-INF/orm.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/META-INF/persistence.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/META-INF/persistence.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" 
+		xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
+		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		xsi:schemaLocation="
+				http://java.sun.com/xml/ns/persistence			http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
+				http://java.sun.com/xml/ns/persistence/orm		http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
+
+	<persistence-unit name="org.drools.persistence.jpa.local" transaction-type="RESOURCE_LOCAL">
+		<provider>org.hibernate.ejb.HibernatePersistence</provider>
+		<!--
+		<jta-data-source>jdbc/testDS1</jta-data-source>
+		-->
+		<class>org.drools.persistence.session.SessionInfo</class>
+		<class>org.drools.persistence.processinstance.ProcessInstanceInfo</class>
+		<class>org.drools.persistence.processinstance.variabletypes.JPAPersistedVariable</class>
+		<class>org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo</class>
+		<class>org.drools.persistence.processinstance.variabletypes.SerializablePersistedVariable</class>
+		<class>org.drools.persistence.processinstance.WorkItemInfo</class>
+		
+		<properties>
+			<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
+			<!--property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/-->
+			<!--property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/-->
+
+			<property name="hibernate.max_fetch_depth" value="3" />
+			<property name="hibernate.hbm2ddl.auto" value="create" />
+			<property name="hibernate.show_sql" value="false" />
+			
+			<!--
+			<property name="hibernate.connection.autocommit" value="false" />
+			<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup" />
+			-->
+		</properties>
+	</persistence-unit>
+</persistence>


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/META-INF/persistence.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/completedProcessSession.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/completedProcessSession.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/completedProcessSession.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,82 @@
+<?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"
+  xmlns:drools="http://drools.org/schema/drools-spring"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+                      http://www.springframework.org/schema/util     http://www.springframework.org/schema/util/spring-util-3.0.xsd
+                      http://drools.org/schema/drools-spring         http://drools.org/schema/drools-spring.xsd">
+
+
+  <!-- drools configuration -->
+
+  <bean id="sessionConfigurator" class="org.drools.core.util.KnowledgeSessionRuntimeConfiguratorImpl">
+    <property name="workItemHandlers">
+      <map>
+        <entry key="nothing">
+          <bean class="org.drools.process.instance.impl.demo.DoNothingWorkItemHandler" />
+        </entry>
+      </map>
+    </property>
+  </bean>
+  
+  <drools:kstore id="kstore" />  
+
+  <drools:connection id="connection1" type="local" />
+  <drools:execution-node id="node1" connection="connection1" />
+  
+  <drools:kbase id="kbase">
+    <drools:resources>
+      <drools:resource type="DRF" source="classpath:shortProcess.rf" />
+    </drools:resources>
+  </drools:kbase>
+
+  <bean id="env" class="org.drools.container.spring.beans.EnvironmentFactoryBean">
+    <property name="environment">
+      <map>
+        <entry>
+          <key>
+            <util:constant static-field="org.drools.runtime.EnvironmentName.ENTITY_MANAGER_FACTORY"/>
+          </key>
+          <ref bean="entityManagerFactory"/>
+        </entry>
+        <entry>
+          <key>
+            <util:constant static-field="org.drools.runtime.EnvironmentName.TRANSACTION_MANAGER"/>
+          </key>
+          <ref bean="transactionManager"/>
+        </entry>
+        <entry>
+          <key>
+            <util:constant static-field="org.drools.runtime.EnvironmentName.GLOBALS"/>
+          </key>
+          <bean class="org.drools.base.MapGlobalResolver"/>
+        </entry>
+        <entry>
+          <key>
+            <util:constant static-field="org.drools.runtime.EnvironmentName.PROCESS_TIMER_STRATEGY"/>
+          </key>
+          <bean class="org.drools.job.executor.timer.MockProcessTimerPersistenceStrategy" />
+        </entry>
+      </map>
+    </property>
+  </bean>
+  
+  <!-- persistence configuration -->
+  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
+    <property name="driverClassName" value="org.h2.Driver" />
+    <property name="url" value="jdbc:h2:tcp://localhost/persistentTimersTest" />
+    <property name="username" value="sa" />
+    <property name="password" value="" />
+  </bean>
+  
+  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+    <property name="dataSource" ref="dataSource" />
+    <property name="persistenceUnitName" value="org.drools.persistence.jpa.local" />
+  </bean>
+
+  <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+    <property name="entityManagerFactory" ref="entityManagerFactory" />
+  </bean>
+</beans>
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/completedProcessSession.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/executorContextTest.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/executorContextTest.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/executorContextTest.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,55 @@
+<?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="timerMessageProducer" factory-bean="clientSession" factory-method="createProducer" destroy-method="close">
+    <constructor-arg value="executeTimerMessages" />
+  </bean>
+
+  <!-- start HornetQ server -->
+  <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="executeTimerMessages" />
+              <constructor-arg name="name" value="executeTimerMessages" />
+              <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/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/executorContextTest.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/log4j.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/log4j.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/log4j.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+<!-- ===================================================================== -->
+<!--                                                                       -->
+<!--  Log4j Configuration                                                  -->
+<!--                                                                       -->
+<!-- ===================================================================== -->
+<!-- $Id: log4j.xml,v 1.8 2006/04/26 17:29:10 gavin Exp $ -->
+<!--
+   | For more configuration infromation and examples see the Jakarta Log4j
+   | owebsite: http://jakarta.apache.org/log4j
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<param name="Target" value="System.out"/>
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%-5p %d{dd-MM HH:mm:ss,SSS} (%F:%M:%L) \t %m%n"/>
+		</layout>
+	</appender>
+	<logger name="org.drools">
+		<level value="DEBUG"/>
+	</logger>
+    <logger name="org.hibernate.SQL">
+      <level value="DEBUG"/>
+    </logger>
+	<root>
+		<priority value="ERROR"/>
+		<appender-ref ref="CONSOLE"/>
+	</root>
+</log4j:configuration>


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/log4j.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/shortProcess.rf
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/shortProcess.rf	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/shortProcess.rf	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<process xmlns="http://drools.org/drools-5.0/process"
+         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+         xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
+         type="RuleFlow" name="org.drools.timer.ShortProcess" id="shortProcess" package-name="org.drools.timer" >
+
+  <header>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" x="96" y="96" width="48" height="48" />
+    <end id="2" name="End" x="204" y="96" width="48" height="48" />
+  </nodes>
+
+  <connections>
+    <connection from="1" to="2" />
+  </connections>
+
+</process>
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/shortProcess.rf
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/timerProcess.rf
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/timerProcess.rf	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/timerProcess.rf	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<process xmlns="http://drools.org/drools-5.0/process"
+         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+         xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
+         type="RuleFlow" name="org.drools.timer.TimerProcess" id="timerProcess" package-name="org.drools.timer" version="1" >
+
+  <header>
+    <imports>
+      <import name="org.drools.job.executor.timer.Buddy" />
+    </imports>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" x="96" y="96" width="48" height="48" />
+    <timerNode id="2" name="Timer" x="228" y="96" width="48" height="48" delay="800ms"  period="200ms" />
+    <actionNode id="3" name="Action" x="348" y="96" width="80" height="48" >
+        <action type="expression" dialect="java" >System.out.println("Triggered");
+insert( new Buddy() );</action>
+    </actionNode>
+    <milestone id="4" name="Wait" x="504" y="96" width="80" height="48" >
+      <constraint type="rule" dialect="mvel" >Number( intValue &gt;= 5 ) from accumulate ( b: Buddy( ), count( b ) )</constraint>
+    </milestone>
+    <end id="5" name="End" x="648" y="96" width="48" height="48" />
+  </nodes>
+
+  <connections>
+    <connection from="1" to="2" />
+    <connection from="2" to="3" />
+    <connection from="3" to="4" />
+    <connection from="4" to="5" />
+  </connections>
+
+</process>
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/timerProcess.rf
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/timerProcessSession.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/timerProcessSession.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/timerProcessSession.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,82 @@
+<?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"
+  xmlns:drools="http://drools.org/schema/drools-spring"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+                      http://www.springframework.org/schema/util     http://www.springframework.org/schema/util/spring-util-3.0.xsd
+                      http://drools.org/schema/drools-spring         http://drools.org/schema/drools-spring.xsd">
+
+
+  <!-- drools configuration -->
+
+  <bean id="sessionConfigurator" class="org.drools.core.util.KnowledgeSessionRuntimeConfiguratorImpl">
+    <property name="workItemHandlers">
+      <map>
+        <entry key="nothing">
+          <bean class="org.drools.process.instance.impl.demo.DoNothingWorkItemHandler" />
+        </entry>
+      </map>
+    </property>
+  </bean>
+  
+  <drools:kstore id="kstore" />  
+
+  <drools:connection id="connection1" type="local" />
+  <drools:execution-node id="node1" connection="connection1" />
+  
+  <drools:kbase id="kbase">
+    <drools:resources>
+      <drools:resource type="DRF" source="classpath:timerProcess.rf" />
+    </drools:resources>
+  </drools:kbase>
+
+  <bean id="env" class="org.drools.container.spring.beans.EnvironmentFactoryBean">
+    <property name="environment">
+      <map>
+        <entry>
+          <key>
+            <util:constant static-field="org.drools.runtime.EnvironmentName.ENTITY_MANAGER_FACTORY"/>
+          </key>
+          <ref bean="entityManagerFactory"/>
+        </entry>
+        <entry>
+          <key>
+            <util:constant static-field="org.drools.runtime.EnvironmentName.TRANSACTION_MANAGER"/>
+          </key>
+          <ref bean="transactionManager"/>
+        </entry>
+        <entry>
+          <key>
+            <util:constant static-field="org.drools.runtime.EnvironmentName.GLOBALS"/>
+          </key>
+          <bean class="org.drools.base.MapGlobalResolver"/>
+        </entry>
+        <entry>
+          <key>
+            <util:constant static-field="org.drools.runtime.EnvironmentName.PROCESS_TIMER_STRATEGY"/>
+          </key>
+          <bean class="org.drools.job.executor.timer.MockProcessTimerPersistenceStrategy" />
+        </entry>
+      </map>
+    </property>
+  </bean>
+
+  <!-- persistence configuration -->
+  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
+    <property name="driverClassName" value="org.h2.Driver" />
+    <property name="url" value="jdbc:h2:tcp://localhost/persistentTimersTest" />
+    <property name="username" value="sa" />
+    <property name="password" value="" />
+  </bean>
+  
+  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+    <property name="dataSource" ref="dataSource" />
+    <property name="persistenceUnitName" value="org.drools.persistence.jpa.local" />
+  </bean>
+
+  <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+    <property name="entityManagerFactory" ref="entityManagerFactory" />
+  </bean>
+</beans>
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-executor/src/test/resources/timerProcessSession.xml
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages
___________________________________________________________________
Name: svn:ignore
   + .*


Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/pom.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/pom.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/pom.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,14 @@
+<?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.2.0.SNAPSHOT</version>
+  </parent>
+  <artifactId>drools-timer-messages</artifactId>
+  <packaging>jar</packaging>
+  <name>Drools :: Timers :: Messages</name>
+
+</project>


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

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/Message.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/Message.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/Message.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,7 @@
+package org.drools.timer.message;
+
+import java.io.Serializable;
+
+public interface Message extends Serializable {
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/Message.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/TimerJob.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/TimerJob.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/TimerJob.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,79 @@
+package org.drools.timer.message;
+
+import java.io.Serializable;
+
+public class TimerJob implements Serializable{
+    
+    private long processId;
+    private String runtimeSessionConfiguratorBeanName;
+    private String knowledgeStoreServiceBeanName;
+    private String knowledgeBaseBeanName;
+    private String environmentBeanName;
+    private int sessionId;
+    private long timerId;
+    private long period;
+
+    public void setProcessId(long processId) {
+        this.processId = processId;
+    }
+
+    public long getProcessId() {
+        return processId;
+    }
+
+    public void setRuntimeSessionConfiguratorBeanName(String sessionConfiguratorBeanName) {
+        this.runtimeSessionConfiguratorBeanName = sessionConfiguratorBeanName;
+    }
+
+    public String getRuntimeSessionConfiguratorBeanName() {
+        return runtimeSessionConfiguratorBeanName;
+    }
+
+    public void setKnowledgeStoreServiceBeanName(String knowledgeStoreServiceBeanName) {
+        this.knowledgeStoreServiceBeanName = knowledgeStoreServiceBeanName;
+    }
+
+    public String getKnowledgeStoreServiceBeanName() {
+        return knowledgeStoreServiceBeanName;
+    }
+
+    public void setSessionId(int id) {
+        this.sessionId = id;
+    }
+
+    public int getSessionId() {
+        return sessionId;
+    }
+
+    public void setTimerId(long timerId) {
+        this.timerId = timerId;
+    }
+
+    public void setPeriod(long period) {
+        this.period = period;
+    }
+
+    public long getTimerId() {
+        return timerId;
+    }
+
+    public long getPeriod() {
+        return period;
+    }
+
+    public String getKnowledgeBaseBeanName() {
+        return knowledgeBaseBeanName;
+    }
+
+    public void setKnowledgeBaseBeanName(String knowledgeBaseBeanName) {
+        this.knowledgeBaseBeanName = knowledgeBaseBeanName;
+    }
+
+    public String getEnvironmentBeanName() {
+        return environmentBeanName;
+    }
+
+    public void setEnvironmentBeanName(String environmentBeanName) {
+        this.environmentBeanName = environmentBeanName;
+    }
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/TimerJob.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/TimerMessage.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/TimerMessage.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/TimerMessage.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,18 @@
+package org.drools.timer.message;
+
+public abstract class TimerMessage implements Message {
+
+	private static final long serialVersionUID = 1L;
+
+	private long processInstanceId;
+
+	public long getProcessInstanceId() {
+		return processInstanceId;
+	}
+
+	public void setProcessInstanceId(long processInstanceId) {
+		this.processInstanceId = processInstanceId;
+	}
+
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/TimerMessage.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/InsertScheduledTimerMessage.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/InsertScheduledTimerMessage.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/InsertScheduledTimerMessage.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,68 @@
+package org.drools.timer.message.impl;
+
+import org.drools.timer.message.TimerMessage;
+
+public class InsertScheduledTimerMessage extends TimerMessage {
+
+	private static final long serialVersionUID = 1L;
+
+	private long period;
+	private long delay;
+    private String runtimeSessionConfiguratorBeanName;
+    private String knowledgeStoreServiceBeanName;
+    private String knowledgeBaseBeanName;
+    private String environmentBeanName;
+    private int sessionId;
+    private long timerId;
+
+
+	public void setPeriod(long period) {
+		this.period = period;
+	}
+	public long getPeriod() {
+		return period;
+	}
+	public void setDelay(long delay) {
+		this.delay = delay;
+	}
+	public long getDelay() {
+		return delay;
+	}
+    public String getRuntimeSessionConfiguratorBeanName() {
+        return runtimeSessionConfiguratorBeanName;
+    }
+    public void setRuntimeSessionConfiguratorBeanName(String runtimeSessionConfiguratorBeanName) {
+        this.runtimeSessionConfiguratorBeanName = runtimeSessionConfiguratorBeanName;
+    }
+    public String getKnowledgeStoreServiceBeanName() {
+        return knowledgeStoreServiceBeanName;
+    }
+    public void setKnowledgeStoreServiceBeanName(String knowledgeStoreServiceBeanName) {
+        this.knowledgeStoreServiceBeanName = knowledgeStoreServiceBeanName;
+    }
+    public String getKnowledgeBaseBeanName() {
+        return knowledgeBaseBeanName;
+    }
+    public void setKnowledgeBaseBeanName(String knowledgeBaseBeanName) {
+        this.knowledgeBaseBeanName = knowledgeBaseBeanName;
+    }
+    public String getEnvironmentBeanName() {
+        return environmentBeanName;
+    }
+    public void setEnvironmentBeanName(String environmentBeanName) {
+        this.environmentBeanName = environmentBeanName;
+    }
+    public int getSessionId() {
+        return sessionId;
+    }
+    public void setSessionId(int sessionId) {
+        this.sessionId = sessionId;
+    }
+    public long getTimerId() {
+        return timerId;
+    }
+    public void setTimerId(long timerId) {
+        this.timerId = timerId;
+    }
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/InsertScheduledTimerMessage.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/RemoveScheduledTimerMessage.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/RemoveScheduledTimerMessage.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/RemoveScheduledTimerMessage.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,9 @@
+package org.drools.timer.message.impl;
+
+import org.drools.timer.message.TimerMessage;
+
+public class RemoveScheduledTimerMessage extends TimerMessage {
+
+	private static final long serialVersionUID = 1L;
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-messages/src/main/java/org/drools/timer/message/impl/RemoveScheduledTimerMessage.java
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence
___________________________________________________________________
Name: svn:ignore
   + .*


Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/pom.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/pom.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/pom.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,89 @@
+<?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.2.0.SNAPSHOT</version>
+  </parent>
+  <artifactId>drools-timer-persistence</artifactId>
+  <packaging>jar</packaging>
+  <name>Drools :: Timers :: Persistence</name>
+  
+  <dependencies>
+  
+  	<!-- Hibernate -->
+    <dependency>
+      <groupId>org.hibernate</groupId>
+      <artifactId>hibernate-entitymanager</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.hibernate</groupId>
+      <artifactId>hibernate-annotations</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.hibernate</groupId>
+      <artifactId>hibernate-commons-annotations</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.hibernate</groupId>
+      <artifactId>hibernate-core</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-tx</artifactId>
+      <version>${springframework-version}</version>
+    </dependency>
+
+    <!-- HSQLDB -->
+   	<dependency>
+      <groupId>com.h2database</groupId>
+      <artifactId>h2</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+   	<dependency>
+      <groupId>javax.persistence</groupId>
+      <artifactId>persistence-api</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.transaction</groupId>
+      <artifactId>jta</artifactId>
+    </dependency>
+
+    <dependency>
+	  <groupId>org.codehaus.btm</groupId>
+	  <artifactId>btm</artifactId>
+	  <scope>test</scope>
+    </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/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/pom.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/JPATimerPersistence.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/JPATimerPersistence.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/JPATimerPersistence.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,80 @@
+package org.drools.timer.persistence;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.NoResultException;
+
+import org.drools.timer.persistence.model.TimerState;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JPATimerPersistence implements TimerPersistence {
+
+    private static Logger logger = LoggerFactory.getLogger(JPATimerPersistence.class);
+    
+	private EntityManagerFactory entityManagerFactory;
+
+	public void save(TimerState object) {
+	    EntityManager entityManager = getEntityManager();
+	    entityManager.joinTransaction();
+	    entityManager.persist(object);
+        logger.debug("Saved timer for process instance " + object.getProcessInstanceId());
+	}
+
+	public boolean isExecutable(final long processInstanceId) {
+        TimerState timerState = (TimerState) getEntityManager()
+            .createQuery("SELECT t FROM TimerState t WHERE t.processInstanceId=:processInstanceId")
+            .setParameter("processInstanceId", processInstanceId)
+            .getSingleResult();
+        return timerState.isExecuted();
+	}
+
+	public TimerState load(long processInstanceId) {
+		TimerState timerState = (TimerState) getEntityManager()
+		    .createQuery("SELECT t FROM TimerState t WHERE t.processInstanceId=:processInstanceId")
+		    .setParameter("processInstanceId", processInstanceId)
+		    .getSingleResult();
+		return timerState;
+	}
+
+	public boolean remove(long processInstanceId) {
+	    EntityManager entityManager = getEntityManager();
+	    try{
+	        entityManager.joinTransaction();
+            boolean removed = entityManager.createQuery("delete TimerState where processInstanceId=:processId")
+                   .setParameter("processId", processInstanceId)
+                   .executeUpdate() == 1;
+    	    logger.debug("Removed timer for process instance " + processInstanceId);
+    	    return removed;
+	    } catch (RuntimeException e) {
+	        logger.error("Error removing timer", e);
+	        throw e;
+	    }
+	}
+
+    private EntityManager getEntityManager(){
+        return getEntityManagerFactory().createEntityManager();
+    }
+
+    public EntityManagerFactory getEntityManagerFactory() {
+        return entityManagerFactory;
+    }
+
+    public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) {
+        this.entityManagerFactory = entityManagerFactory;
+    }
+
+    public boolean exists(long timerId, long processInstanceId) {
+        try{
+        getEntityManager()
+            .createQuery("from TimerState as ts where ts.processInstanceId = :processInstanceId and ts.timerId = :timerId")
+            .setParameter("processInstanceId", processInstanceId)
+            .setParameter("timerId", timerId)
+        .getSingleResult();
+        return true;
+        } catch (NoResultException nre){
+            return false;
+        }
+    }
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/JPATimerPersistence.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/TimerPersistence.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/TimerPersistence.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/TimerPersistence.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,17 @@
+package org.drools.timer.persistence;
+
+import org.drools.timer.persistence.model.TimerState;
+
+public interface TimerPersistence {
+
+	public void save(TimerState object);
+
+	public TimerState load(long processInstanceId);
+
+	public boolean isExecutable(long processInstanceId);
+
+	public boolean remove(long processInstanceId);
+
+    public boolean exists(long timerId, long processInstanceId);
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/TimerPersistence.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/model/TimerState.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/model/TimerState.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/model/TimerState.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,43 @@
+package org.drools.timer.persistence.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+ at Entity
+public class TimerState {
+
+	private long id;
+	private long processInstanceId;
+	private long timerId;
+	private boolean executed;
+
+	@Id
+	@GeneratedValue(strategy=GenerationType.AUTO)
+	public long getId() {
+		return id;
+	}
+	public void setId(long id) {
+		this.id = id;
+	}
+	public long getProcessInstanceId() {
+		return processInstanceId;
+	}
+	public void setProcessInstanceId(long processInstanceId) {
+		this.processInstanceId = processInstanceId;
+	}
+	public boolean isExecuted() {
+		return executed;
+	}
+	public void setExecuted(boolean executed) {
+		this.executed = executed;
+	}
+    public long getTimerId() {
+        return timerId;
+    }
+    public void setTimerId(long timerId) {
+        this.timerId = timerId;
+    }
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/java/org/drools/timer/persistence/model/TimerState.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/resources/META-INF/persistence.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/resources/META-INF/persistence.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence       http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd    http://java.sun.com/xml/ns/persistence/orm     http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
+  <persistence-unit name="org.drools.timer.persistence.jpa" transaction-type="RESOURCE_LOCAL">
+    <provider>org.hibernate.ejb.HibernatePersistence</provider>
+    <jta-data-source>jdbc/timersDS</jta-data-source>        
+    <class>org.drools.timer.persistence.model.TimerState</class>
+    <properties>
+      <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>          
+      <property name="hibernate.max_fetch_depth" value="3"/>
+      <property name="hibernate.hbm2ddl.auto" value="update" />
+      <property name="hibernate.show_sql" value="false" /> 
+    </properties>        
+  </persistence-unit>
+</persistence>
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-persistence/src/main/resources/META-INF/persistence.xml
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler
___________________________________________________________________
Name: svn:ignore
   + .*


Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/pom.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/pom.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/pom.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,121 @@
+<?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.2.0.SNAPSHOT</version>
+  </parent>
+  <artifactId>drools-timer-scheduler</artifactId>
+  <packaging>jar</packaging>
+  <name>Drools :: Timers :: Scheduler</name>
+  
+  <dependencies>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-timer-messages</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-timer-persistence</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>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-beans</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context-support</artifactId>
+      <version>${springframework-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-tx</artifactId>
+      <version>${springframework-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-orm</artifactId>
+      <version>${springframework-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-jdbc</artifactId>
+    </dependency>
+
+	<!-- Quartz -->
+    <dependency>
+      <groupId>org.opensymphony.quartz</groupId>
+      <artifactId>quartz</artifactId>
+      <version>1.6.1</version>
+    </dependency>
+    
+    <dependency>
+      <groupId>commons-collections</groupId>
+      <artifactId>commons-collections</artifactId>
+      <version>3.1</version>
+    </dependency>
+
+    <dependency>
+      <groupId>commons-dbcp</groupId>
+      <artifactId>commons-dbcp</artifactId>
+      <version>1.2.2</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>
+    <dependency>
+      <groupId>com.h2database</groupId>
+      <artifactId>h2</artifactId>
+      <scope>test</scope>
+    </dependency>    
+    
+  </dependencies>
+  
+</project>


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

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerScheduler.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerScheduler.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerScheduler.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,107 @@
+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.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;
+import org.quartz.SimpleTrigger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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(String.valueOf(message.getProcessInstanceId()), Scheduler.DEFAULT_GROUP, TimerExecutorJob.class);
+		
+		job.getJobDataMap().put(TimerExecutorJob.PROCESS_INSTANCE_ID, message.getProcessInstanceId());
+		job.getJobDataMap().put(TimerExecutorJob.ENV, message.getEnvironmentBeanName());
+		job.getJobDataMap().put(TimerExecutorJob.KBASE, message.getKnowledgeBaseBeanName());
+		job.getJobDataMap().put(TimerExecutorJob.KSTORE, message.getKnowledgeStoreServiceBeanName());
+		job.getJobDataMap().put(TimerExecutorJob.SESSION_CONFIGURATION, message.getRuntimeSessionConfiguratorBeanName());
+        job.getJobDataMap().put(TimerExecutorJob.KSESSION_ID, message.getSessionId());
+        job.getJobDataMap().put(TimerExecutorJob.TIMER_ID, message.getTimerId());
+		
+		job.getJobDataMap().put(TimerExecutorJob.TIMER_EXECUTOR_CONNECTOR, timerExecutorConnector);
+		job.getJobDataMap().put(TimerExecutorJob.TIMER_EXECUTOR_SESSION, session);
+		job.getJobDataMap().put(TimerExecutorJob.TIMER_PERSISTENCE, timerPersistence);
+		
+		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) {
+			logger.error("Error scheduling timer " + message.getProcessInstanceId(), e);
+		}
+		logger.info("New timer scheduled");
+	}
+
+	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);
+		} catch (SchedulerException e) {
+			logger.error("Error deleting scheduled timer " + message.getProcessInstanceId(), e);
+		}
+	}
+
+	private String createUniqueTimerJobId(TimerMessage message) {
+		return "trigger" + String.valueOf(message.getProcessInstanceId());
+	}
+
+	public void process(TimerMessage message) {
+	    logger.debug("Processing " + message.getClass().getSimpleName() + " 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");
+		}
+	}
+
+	public void setTimerPersistence(TimerPersistence timerPersistence) {
+		this.timerPersistence = timerPersistence;
+	}
+
+	public void setScheduler(Scheduler scheduler) {
+		this.scheduler = scheduler;
+	}
+
+	public void setTimerExecutorConnector(ClientProducer timerExecutorConnector) {
+		this.timerExecutorConnector = timerExecutorConnector;
+	}
+
+	public void setSession(ClientSession session) {
+		this.session = session;
+	}
+
+}


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

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerHornetQServer.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerHornetQServer.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerHornetQServer.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,91 @@
+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) {
+		    logger.error("Internal server error", 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/diega_esteban_jpm_integration_r34940/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/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerHornetQService.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerHornetQService.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerHornetQService.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,94 @@
+package org.drools.timer.scheduler;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.util.TimerTask;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+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 TimerSchedulerHornetQService extends TimerTask {
+
+	private static final Logger logger = LoggerFactory.getLogger(TimerSchedulerHornetQService.class);
+
+	private ClientConsumer consumer;
+	private TimerScheduler timerScheduler;
+	private AtomicBoolean running = new AtomicBoolean(false);
+
+    public void run() {
+        running.set(true);
+        try {
+            while (running.get()) {
+                ClientMessage clientMessage = getConsumer().receive();
+                if (clientMessage != null) {
+                    logger.debug("Message received in scheduler");
+                    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) {
+            logger.error("Server exception", e);
+            throw new RuntimeException("Server Exception with class " + getClass());
+        }finally{
+            running.set(false);
+        }
+    }
+	
+	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");
+		}
+	}
+
+    @Override
+    public boolean cancel() {
+        boolean cancelResult = super.cancel();
+        running.set(false);
+        return cancelResult;
+    }
+
+    public boolean isRunning() {
+        return running.get();
+    }
+	
+	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/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerHornetQService.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerServer.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerServer.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerServer.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -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/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/TimerSchedulerServer.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/job/TimerExecutorJob.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/job/TimerExecutorJob.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/java/org/drools/timer/scheduler/job/TimerExecutorJob.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,94 @@
+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.drools.timer.persistence.TimerPersistence;
+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;
+import org.quartz.SimpleTrigger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TimerExecutorJob implements Job {
+
+    private final static Logger logger = LoggerFactory.getLogger(TimerExecutorJob.class);
+    
+	public static final String PROCESS_INSTANCE_ID = "processInstanceId";
+	public static final String SESSION_CONFIGURATION = "runtimeSessionConfiguratorBeanName";
+	public static final String KSTORE = "knowledgeStoreServiceBeanName";
+	public static final String KBASE = "knowledgeBaseBeanName";
+	public static final String ENV = "environmentBeanName";
+	public static final String KSESSION_ID = "sessionId";
+	public static final String TIMER_ID = "timerId";
+
+	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 {
+	    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();
+		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);
+
+		ClientProducer producer = (ClientProducer) data.get(TIMER_EXECUTOR_CONNECTOR);
+		ClientSession session = (ClientSession) data.get(TIMER_EXECUTOR_SESSION);
+		write(session, timerId, producer, processInstanceId, sessionId, period, runtimeSessionConfiguratorBeanName,
+		        knowledgeStoreServiceBeanName, knowledgeBaseBeanName, environmentBeanName);
+		logger.debug("Process Instance ID: " + processInstanceId + " executed at " + new Date());
+	}
+
+	private void write(ClientSession session, long timerId, ClientProducer producer, long processInstanceId, int sessionId, 
+	        long period, String runtimeSessionConfiguratorBeanName, String knowledgeStoreServiceBeanName, 
+	        String knowledgeBaseBeanName, String environmentBeanName) {
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		ObjectOutputStream oout;
+		try {
+			oout = new ObjectOutputStream(baos);
+			
+			TimerJob timerJob = new TimerJob();
+			timerJob.setProcessId(processInstanceId);
+			timerJob.setSessionId(sessionId);
+			timerJob.setEnvironmentBeanName(environmentBeanName);
+			timerJob.setKnowledgeBaseBeanName(knowledgeBaseBeanName);
+			timerJob.setKnowledgeStoreServiceBeanName(knowledgeStoreServiceBeanName);
+			timerJob.setRuntimeSessionConfiguratorBeanName(runtimeSessionConfiguratorBeanName);
+			timerJob.setPeriod(period);
+			timerJob.setTimerId(timerId);
+			
+			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);
+		}
+	}
+
+}


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

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/resources/log4j.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/resources/log4j.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/resources/log4j.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+<!-- ===================================================================== -->
+<!--                                                                       -->
+<!--  Log4j Configuration                                                  -->
+<!--                                                                       -->
+<!-- ===================================================================== -->
+<!-- $Id: log4j.xml,v 1.8 2006/04/26 17:29:10 gavin Exp $ -->
+<!--
+   | For more configuration infromation and examples see the Jakarta Log4j
+   | owebsite: http://jakarta.apache.org/log4j
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+		<param name="Target" value="System.out"/>
+		<layout class="org.apache.log4j.PatternLayout">
+			<param name="ConversionPattern" value="%-5p %d{dd-MM HH:mm:ss,SSS} (%F:%M:%L) \t %m%n"/>
+		</layout>
+	</appender>
+	<logger name="org.drools">
+		<level value="DEBUG"/>
+	</logger>
+	<root>
+		<priority value="ERROR"/>
+		<appender-ref ref="CONSOLE"/>
+	</root>
+</log4j:configuration>


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/resources/log4j.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/resources/schedulerContext.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/resources/schedulerContext.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/resources/schedulerContext.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,110 @@
+<?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="schedulerService" class="org.drools.timer.scheduler.TimerSchedulerHornetQService">
+    <property name="consumer" ref="timerMessageConsumer"/>
+    <property name="timerScheduler"  ref="timerScheduler"/>
+  </bean>
+  
+  <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="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
+    <property name="autoStartup"><value>true</value></property>
+    <property name="applicationContextSchedulerContextKey"><value>applicationContext</value></property> 
+    <property name="waitForJobsToCompleteOnShutdown"><value>true</value></property> 
+    <property name="quartzProperties">
+      <props>
+        <!-- ThreadPool -->
+        <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
+        <prop key="org.quartz.threadPool.threadCount">5</prop>
+        <prop key="org.quartz.threadPool.threadPriority">5</prop>
+        <!-- Plugins -->
+        <prop key="org.quartz.plugin.shutdownhook.class">org.quartz.plugins.management.ShutdownHookPlugin</prop>
+        <prop key="org.quartz.plugin.shutdownhook.cleanShutdown">true</prop>
+        <prop key="org.quartz.plugin.triggHistory.class">org.quartz.plugins.history.LoggingTriggerHistoryPlugin</prop>
+        <prop key="org.quartz.plugin.triggHistory.triggerFiredMessage">Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}</prop>
+        <prop key="org.quartz.plugin.triggHistory.triggerCompleteMessage">Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}</prop>
+      </props>
+    </property>
+  </bean>
+  
+  <!-- persistence -->
+  <bean id="jpaTimerPersistence" class="org.drools.timer.persistence.JPATimerPersistence" >
+    <property name="entityManagerFactory" ref="entityManagerFactory" />
+  </bean>
+  
+  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+    <property name="dataSource" ref="dataSource" />
+    <property name="persistenceUnitName" value="org.drools.timer.persistence.jpa" />
+  </bean>
+  
+  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
+    <property name="driverClassName" value="${datasource.driverClassName}" />
+    <property name="url" value="${datasource.url}" />
+    <property name="username" value="${datasource.username}" />
+    <property name="password" value="${datasource.password}" />
+  </bean>
+
+  <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+    <property name="entityManagerFactory" ref="entityManagerFactory" />
+  </bean>
+
+  <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+    <property name="location" value="classpath:datasource.properties"/>
+  </bean>
+
+  <!-- HornetQ configuration -->
+    
+  <bean id="timerMessageProducer" factory-bean="clientSession" factory-method="createProducer" destroy-method="close">
+    <constructor-arg value="executeTimerMessages" />
+  </bean>
+
+  <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="java.lang.Object"/>
+
+  <!--
+  <bean id="timerMessageHornetQClient" class="org.drools.timer.scheduler.TimerMessageHornetQClient">
+    <property name="session" ref="clientSession" />
+    <property name="producer" ref="timerMessageProducer" />
+  </bean>
+  -->
+  
+</beans>
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/main/resources/schedulerContext.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerMessageHornetQClient.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerMessageHornetQClient.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerMessageHornetQClient.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -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/diega_esteban_jpm_integration_r34940/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/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerSchedulerServiceTest.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerSchedulerServiceTest.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/TimerSchedulerServiceTest.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,109 @@
+package org.drools.timer.scheduler;
+
+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;
+import org.hornetq.api.core.HornetQException;
+import org.hornetq.api.core.client.ClientConsumer;
+import org.hornetq.api.core.client.ClientProducer;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class TimerSchedulerServiceTest {
+    
+    //private static final Logger logger = LoggerFactory.getLogger(TimerSchedulerServiceTest.class);
+    private static final String H2_DB_NAME = "schedulerService"; 
+    private static Server h2Server;
+    
+    @BeforeClass
+    public static void startH2Database() throws Exception {
+        DeleteDbFiles.execute("", H2_DB_NAME, true);
+        h2Server = Server.createTcpServer(new String[0]);
+        h2Server.start();
+    }
+
+    @AfterClass
+    public static void stopH2Database() throws Exception {
+        h2Server.stop();
+        DeleteDbFiles.execute( "", H2_DB_NAME, true );
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void scheduleAndTriggerJob() throws InterruptedException, HornetQException{
+        AbstractApplicationContext schedulerContext = createExecutorContext();
+        TimerSchedulerHornetQService schedulerService = startSchedulerService(schedulerContext);
+        
+        ClientProducer schedulerProducer = (ClientProducer) schedulerContext.getBean("schedulerProducer");
+        ClientConsumer timerJobsConsumer = (ClientConsumer) schedulerContext.getBean("timerJobsConsumer");
+        EntityManagerFactory entityManagerFactoryForTest = (EntityManagerFactory) schedulerContext.getBean("entityManagerFactoryForTest");
+        
+        HornetQMessageTranslator<InsertScheduledTimerMessage> schedulerTranslator = (HornetQMessageTranslator<InsertScheduledTimerMessage>) schedulerContext.getBean("messageTranslator");
+        HornetQMessageTranslator<TimerJob> executorTranslator =  (HornetQMessageTranslator<TimerJob>) schedulerContext.getBean("messageTranslator");
+        
+        long scheduledPeriod = 1000;
+        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());
+        
+        //close everything
+        schedulerService.cancel();
+        schedulerContext.close();
+    }
+
+    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);
+        schedulerProducer.send(schedulerTranslator.writeMessage(scheduleTimerMessage));
+    }
+
+    private TimerSchedulerHornetQService startSchedulerService(AbstractApplicationContext schedulerContext) throws InterruptedException {
+        TimerSchedulerHornetQService schedulerService = (TimerSchedulerHornetQService) schedulerContext.getBean("schedulerService");
+        ExecutorService executor = Executors.newSingleThreadExecutor();
+        executor.execute(schedulerService);
+        Thread.sleep(1500); // executor doesn't guarantee you it'll run immediately
+        Assert.assertTrue(schedulerService.isRunning());
+        return schedulerService;
+    }
+
+    private AbstractApplicationContext createExecutorContext() {
+        return new ClassPathXmlApplicationContext(new String[]{
+                "classpath:/schedulerContext.xml",
+                "classpath:/schedulerContextTest.xml"
+        });
+    }
+    
+}


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

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/utils/HornetQMessageTranslator.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/utils/HornetQMessageTranslator.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/utils/HornetQMessageTranslator.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,11 @@
+package org.drools.timer.scheduler.utils;
+
+import org.hornetq.api.core.client.ClientMessage;
+
+public interface HornetQMessageTranslator<T> {
+
+	T readMessage(ClientMessage clientMessage);
+
+    ClientMessage writeMessage(T object);
+
+}


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

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/utils/SerializedMessageTranslator.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/utils/SerializedMessageTranslator.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/java/org/drools/timer/scheduler/utils/SerializedMessageTranslator.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,48 @@
+package org.drools.timer.scheduler.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import org.hornetq.api.core.client.ClientMessage;
+import org.hornetq.api.core.client.ClientSession;
+
+public class SerializedMessageTranslator<T> implements HornetQMessageTranslator<T> {
+	
+	private ClientSession session;
+
+	public T readMessage(ClientMessage clientMessage) {
+		int bodySize = clientMessage.getBodySize();
+		byte[] message = new byte[bodySize];
+		clientMessage.getBodyBuffer().readBytes(message);
+		ByteArrayInputStream bais = new ByteArrayInputStream(message);
+		try {
+			ObjectInputStream ois = new ObjectInputStream(bais);
+			return (T) ois.readObject();
+		} catch (IOException e) {
+			throw new IllegalArgumentException("Error reading message");
+		} catch (ClassNotFoundException e) {
+			throw new IllegalArgumentException("Error creating TimerJob");
+		}
+	}
+	
+	public ClientMessage writeMessage(T object){
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		ObjectOutputStream oout;
+		try {
+			oout = new ObjectOutputStream(baos);
+			oout.writeObject(object);
+			ClientMessage clientMessage = session.createMessage(true);
+			clientMessage.getBodyBuffer().writeBytes(baos.toByteArray());
+			return clientMessage;
+		} catch (IOException e) {
+			throw new RuntimeException("Error creating message", e);
+		}
+	}
+
+	public void setSession(ClientSession session) {
+		this.session = session;
+	}
+}


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

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/META-INF/persistence.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/META-INF/persistence.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence       http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd    http://java.sun.com/xml/ns/persistence/orm     http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
+  <persistence-unit name="org.drools.timer.scheduler.test" transaction-type="RESOURCE_LOCAL">
+    <provider>org.hibernate.ejb.HibernatePersistence</provider>
+    <jta-data-source>jdbc/timersDS</jta-data-source>        
+    <class>org.drools.timer.persistence.model.TimerState</class>
+    <properties>
+      <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>          
+      <property name="hibernate.max_fetch_depth" value="3"/>
+      <property name="hibernate.hbm2ddl.auto" value="update" />
+      <property name="hibernate.show_sql" value="false" /> 
+  </properties>        
+  </persistence-unit>
+</persistence>
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/META-INF/persistence.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/datasource.properties
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/datasource.properties	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/datasource.properties	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,4 @@
+datasource.driverClassName=org.h2.Driver
+datasource.url=jdbc:h2:tcp://localhost/schedulerService
+datasource.username=sa
+datasource.password=sasa
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/datasource.properties
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/schedulerContextTest.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/schedulerContextTest.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/schedulerContextTest.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,92 @@
+<?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="schedulerProducer" factory-bean="clientSession" factory-method="createProducer" destroy-method="close">
+    <constructor-arg value="timerServiceMessages" />
+  </bean>
+
+  <bean id="timerJobsConsumer" factory-bean="clientSession" factory-method="createConsumer" destroy-method="close">
+    <constructor-arg value="executeTimerMessages" />
+  </bean>
+  
+  <bean id="messageTranslator" class="org.drools.timer.scheduler.utils.SerializedMessageTranslator">
+    <property name="session" ref="clientSession" />
+  </bean>
+  
+  <!-- persistence configuration -->
+  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
+    <property name="driverClassName" value="${datasource.driverClassName}" />
+    <property name="url" value="${datasource.url}" />
+    <property name="username" value="${datasource.username}" />
+    <property name="password" value="${datasource.password}" />
+  </bean>
+  
+  <bean id="entityManagerFactoryForTest" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+    <property name="dataSource" ref="dataSource" />
+    <property name="persistenceUnitName" value="org.drools.timer.scheduler.test" />
+  </bean>
+
+  <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+    <property name="entityManagerFactory" ref="entityManagerFactory" />
+  </bean>
+
+  <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+    <property name="location" value="classpath:datasource.properties"/>
+  </bean>
+  
+
+  <!-- start HornetQ server -->
+  <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="executeTimerMessages" />
+              <constructor-arg name="name" value="executeTimerMessages" />
+              <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="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/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-scheduler/src/test/resources/schedulerContextTest.xml
___________________________________________________________________
Name: svn:eol-style
   + native


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests
___________________________________________________________________
Name: svn:ignore
   + .*


Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/pom.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/pom.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/pom.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,145 @@
+<?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.2.0.SNAPSHOT</version>
+  </parent>
+
+  <artifactId>drools-timer-tests</artifactId>
+  <packaging>jar</packaging>
+  <name>Drools :: Timers :: Tests</name>
+  
+  <dependencies>
+  <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-api</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-compiler</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-persistence-jpa</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-timer-core</artifactId>
+    </dependency>
+  	<dependency>
+  	  <groupId>org.drools</groupId>
+  	  <artifactId>drools-timer-persistence</artifactId>
+  	</dependency>
+  	<dependency>
+  	  <groupId>org.drools</groupId>
+  	  <artifactId>drools-timer-messages</artifactId>
+  	</dependency>
+  	<dependency>
+  	  <groupId>org.drools</groupId>
+  	  <artifactId>drools-timer-scheduler</artifactId>
+  	</dependency>
+  	
+  	<!-- HornetQ/Quartz/Spring dependencies that should be resolved automatically by maven -->
+    <dependency>
+      <groupId>org.hornetq</groupId>
+      <artifactId>hornetq-core</artifactId>
+      <version>${hornetq.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.hornetq</groupId>
+      <artifactId>hornetq-transports</artifactId>
+      <version>${hornetq.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.netty</groupId>
+      <artifactId>netty</artifactId>
+      <version>${netty.version}</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context-support</artifactId>
+      <version>${springframework-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-orm</artifactId>
+      <version>${springframework-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-jdbc</artifactId>
+    </dependency>
+
+	<!-- Quartz -->
+    <dependency>
+      <groupId>org.opensymphony.quartz</groupId>
+      <artifactId>quartz</artifactId>
+      <version>1.6.1</version>
+    </dependency>
+    
+    <dependency>
+      <groupId>commons-collections</groupId>
+      <artifactId>commons-collections</artifactId>
+      <version>3.1</version>
+    </dependency>
+
+    <dependency>
+      <groupId>commons-dbcp</groupId>
+      <artifactId>commons-dbcp</artifactId>
+      <version>1.2.2</version>
+    </dependency>
+
+    <!-- HSQLDB -->
+   	<dependency>
+      <groupId>com.h2database</groupId>
+      <artifactId>h2</artifactId>
+      <scope>test</scope>
+    </dependency>
+    
+    <!-- Bixtronix -->
+    <dependency>
+	  <groupId>org.codehaus.btm</groupId>
+	  <artifactId>btm</artifactId>
+	  <scope>test</scope>
+    </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/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/pom.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/IntegrationTest.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/IntegrationTest.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/IntegrationTest.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,31 @@
+package org.drools.timer.test;
+
+import junit.framework.Assert;
+
+import org.drools.timer.message.impl.InsertScheduledTimerMessage;
+import org.drools.timer.scheduler.TimerSchedulerHornetQServer;
+import org.drools.timer.test.helper.TimerMessageHornetQClient;
+import org.junit.Test;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class IntegrationTest {
+
+	@Test
+	public void simple() throws InterruptedException {
+		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("contextTest.xml");
+		TimerSchedulerHornetQServer timerMessageServer = (TimerSchedulerHornetQServer) context.getBean("timerSchedulerHornetQServer");
+		Assert.assertNotNull(timerMessageServer);
+
+		TimerMessageHornetQClient client = (TimerMessageHornetQClient) context.getBean("timerMessageHornetQClient");
+		Assert.assertNotNull(client);
+
+		InsertScheduledTimerMessage message = new InsertScheduledTimerMessage();
+		message.setProcessInstanceId(12L);
+		message.setPeriod(3000);
+		message.setDelay(1000);
+		client.write(message);
+		
+		Thread.sleep(10000);
+	}
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/IntegrationTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/JPAPersistentTimerTest.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/JPAPersistentTimerTest.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/JPAPersistentTimerTest.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,57 @@
+package org.drools.timer.test;
+
+import javax.persistence.EntityManagerFactory;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.base.MapGlobalResolver;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.persistence.jpa.JPAKnowledgeService;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import bitronix.tm.TransactionManagerServices;
+
+public class JPAPersistentTimerTest extends TestCase {
+
+	public void testPersistenceTimer() throws Exception {
+		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("contextTest.xml");
+
+		KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+		kbuilder.add(new ClassPathResource("TimerProcess.rf"), ResourceType.DRF);
+		KnowledgeBase kbase = kbuilder.newKnowledgeBase();
+
+		EntityManagerFactory emf = (EntityManagerFactory) context.getBean("entityManagerFactory");
+
+		Environment env = KnowledgeBaseFactory.newEnvironment();
+		env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
+		env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+		//env.set(EnvironmentName.PROCESS_TIMER_STRATEGY, new ProcessTimerQuartzPersistenceStrategy(new HornetQSchedulerConnector("127.0.0.1", 5446)));
+		env.set(EnvironmentName.TRANSACTION_MANAGER, TransactionManagerServices.getTransactionManager());
+
+		StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+		int id = ksession.getId();
+		ksession.dispose();
+
+		ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+		ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" );
+		ksession.dispose();
+
+//		assertNotNull(TestWorkItemHandler.getInstance().getWorkItem());
+
+		Thread.sleep(5000);
+
+		ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+		processInstance = ksession.getProcessInstance( processInstance.getId() );
+		assertNull( processInstance );
+	}
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/JPAPersistentTimerTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/helper/QuartzDBStructureInit.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/helper/QuartzDBStructureInit.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/helper/QuartzDBStructureInit.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,90 @@
+package org.drools.timer.test.helper;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.sql.DataSource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class QuartzDBStructureInit {
+	
+	private static final Logger logger = LoggerFactory.getLogger(QuartzDBStructureInit.class);
+
+	private Connection connection;
+	private String dataSource;
+	private String sqlFile;
+
+	public void connect() throws SQLException, NamingException, IOException {
+		logger.info("Initializing initial Quartz Database Structure");
+		Context ctx = new InitialContext();
+		DataSource ds = (DataSource) ctx.lookup(dataSource);
+		connection = ds.getConnection();
+		Statement statement = connection.createStatement();
+		statement.execute(readSQLStatementsFile());
+		statement.close();
+		logger.info("Quartz Database Structure created.");
+	}
+
+	private String readSQLStatementsFile() throws IOException {
+		InputStream inputStream = QuartzDBStructureInit.class.getResourceAsStream(sqlFile);
+		StringBuilder sqlStatement = new StringBuilder();
+		BufferedInputStream bis = new BufferedInputStream(inputStream);
+		BufferedReader br = new BufferedReader(new InputStreamReader(bis));
+		String line;
+		while ((line = br.readLine()) != null)   {
+			sqlStatement.append(line);
+			sqlStatement.append(System.getProperty("line.separator"));
+		}
+		br.close();
+		inputStream.close();
+		return sqlStatement.toString();
+	}
+
+	public void disconnect() throws SQLException {
+		connection.close();
+	}
+
+	public void setDataSource(String dataSource) {
+		this.dataSource = dataSource;
+	}
+
+	public String getDataSource() {
+		return dataSource;
+	}
+
+	public void setSqlFile(String sqlFile) {
+		this.sqlFile = sqlFile;
+	}
+
+	public String getSqlFile() {
+		return sqlFile;
+	}
+
+	public static void main(String[] args) throws IOException {
+		InputStream inputStream = QuartzDBStructureInit.class.getResourceAsStream("/tables_h2.sql");
+		StringBuilder contents = new StringBuilder();
+		BufferedInputStream bis = new BufferedInputStream(inputStream);
+		BufferedReader br = new BufferedReader(new InputStreamReader(bis));
+		String line;
+		while ((line = br.readLine()) != null)   {
+			contents.append(line);
+			contents.append(System.getProperty("line.separator"));
+		}
+		//Close the input stream
+		br.close();
+		inputStream.close();
+		System.out.println(contents);
+	}
+
+}


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/helper/QuartzDBStructureInit.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/helper/TimerMessageHornetQClient.java
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/helper/TimerMessageHornetQClient.java	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/helper/TimerMessageHornetQClient.java	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,49 @@
+package org.drools.timer.test.helper;
+
+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/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/java/org/drools/timer/test/helper/TimerMessageHornetQClient.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/META-INF/persistence.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/META-INF/persistence.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence       http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd    http://java.sun.com/xml/ns/persistence/orm     http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
+  <persistence-unit name="org.drools.persistence.jpa" transaction-type="JTA">
+    <provider>org.hibernate.ejb.HibernatePersistence</provider>
+    <jta-data-source>jdbc/timersDS</jta-data-source>        
+    <class>org.drools.persistence.session.SessionInfo</class>
+    <class>org.drools.persistence.processinstance.ProcessInstanceInfo</class>
+    <class>org.drools.persistence.processinstance.variabletypes.JPAPersistedVariable</class>
+    <class>org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo</class>
+    <class>org.drools.persistence.processinstance.variabletypes.SerializablePersistedVariable</class>
+    <class>org.drools.persistence.processinstance.WorkItemInfo</class>
+    <class>org.drools.timer.persistence.model.TimerState</class>
+
+    <properties>
+      <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>	        
+	  <property name="hibernate.max_fetch_depth" value="3"/>
+	  <property name="hibernate.hbm2ddl.auto" value="update" />
+      <property name="hibernate.show_sql" value="true" />	
+      <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup" />
+	</properties>        
+
+  </persistence-unit>
+</persistence>
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/META-INF/persistence.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/TimerProcess.rf
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/TimerProcess.rf	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/TimerProcess.rf	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<process xmlns="http://drools.org/drools-5.0/process"
+         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+         xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
+         type="RuleFlow" name="ruleflow" id="org.drools.test.TestProcess" package-name="org.drools.test" >
+
+  <header>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" />
+    <humanTask id="2" name="User Task" >
+      <work name="Human Task" >
+      </work>
+      <timers>
+        <timer id="1" delay="1000" >
+        <action type="expression" dialect="java" >System.out.println("Timer triggered");
+((org.drools.process.instance.ProcessInstance) kcontext.getProcessInstance()).setState(org.drools.runtime.process.ProcessInstance.STATE_ABORTED);</action>
+        </timer>
+      </timers>
+    </humanTask>
+    <end id="3" name="End" />
+  </nodes>
+
+  <connections>
+    <connection from="1" to="2" />
+    <connection from="2" to="3" />
+  </connections>
+
+</process>
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/TimerProcess.rf
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/contextTest.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/contextTest.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/contextTest.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,186 @@
+<?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="dataSource" class="bitronix.tm.resource.jdbc.PoolingDataSource" init-method="init" destroy-method="close">
+    <property name="className" value="org.h2.jdbcx.JdbcDataSource" />
+    <property name="uniqueName" value="jdbc/timersDS" />
+    <property name="minPoolSize" value="0" />
+    <property name="maxPoolSize" value="3" />
+    <property name="allowLocalTransactions" value="true" />
+    <property name="driverProperties">
+	  <props>
+	    <prop key="user">sa</prop>
+        <prop key="password">sasa</prop>
+        <prop key="URL">jdbc:h2:mem:mydb</prop>
+	  </props>
+    </property>
+  </bean>
+
+  <!-- Bitronix Transaction Manager embedded configuration -->
+  <bean id="btmConfig" factory-method="getConfiguration" class="bitronix.tm.TransactionManagerServices">
+    <property name="serverId" value="spring-btm" />
+  </bean>
+
+  <!-- create BTM transaction manager -->
+  <bean id="bitronixTransactionManager" factory-method="getTransactionManager" class="bitronix.tm.TransactionManagerServices" depends-on="btmConfig, dataSource" destroy-method="shutdown" />
+
+  <!-- Spring JtaTransactionManager -->
+  <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
+    <property name="transactionManager" ref="bitronixTransactionManager" />
+    <property name="userTransaction" ref="bitronixTransactionManager" />
+  </bean>
+
+  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean" depends-on="transactionManager">
+    <property name="persistenceUnitName" value="org.drools.persistence.jpa"/>
+  </bean>
+
+  <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" >
+  	<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" >
+  	<property name="transactionManager" ref="transactionManager" />
+  </bean>
+
+  <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" depends-on="quartzDBStructureInit" >
+    <!-- Quartz Persistence -->
+     <property name="dataSource">
+       <ref bean="dataSource"/>
+     </property>
+    <property name="autoStartup"><value>true</value></property>
+    <property name="applicationContextSchedulerContextKey"><value>applicationContext</value></property> 
+    <property name="waitForJobsToCompleteOnShutdown"><value>true</value></property> 
+    <property name="quartzProperties">
+      <props>
+        <!-- ThreadPool -->
+        <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
+        <prop key="org.quartz.threadPool.threadCount">5</prop>
+        <prop key="org.quartz.threadPool.threadPriority">5</prop>
+        <!-- Job store -->
+        <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
+        <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
+        <prop key="org.quartz.jobStore.useProperties">false</prop>
+        <prop key="org.quartz.jobStore.isClustered">true</prop>
+        <prop key="org.quartz.jobStore.clusterCheckinInterval">10000</prop>
+        <prop key="org.quartz.jobStore.dataSource">quartzDS</prop> 
+        <!-- DataSource -->
+        <!-- <prop key="org.quartz.jobStore.selectWithLockSQL">SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?</prop>-->
+        <!-- Plugins -->
+        <prop key="org.quartz.plugin.shutdownhook.class">org.quartz.plugins.management.ShutdownHookPlugin</prop>
+        <prop key="org.quartz.plugin.shutdownhook.cleanShutdown">true</prop>
+        <prop key="org.quartz.plugin.triggHistory.class">org.quartz.plugins.history.LoggingTriggerHistoryPlugin</prop>
+        <prop key="org.quartz.plugin.triggHistory.triggerFiredMessage">Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}</prop>
+        <prop key="org.quartz.plugin.triggHistory.triggerCompleteMessage">Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}</prop>
+      </props>
+    </property>
+  </bean>
+
+  <bean id="quartzDBStructureInit" class="org.drools.timer.test.helper.QuartzDBStructureInit" init-method="connect" destroy-method="disconnect">
+  	<property name="dataSource" value="jdbc/timersDS" /> 
+  	<property name="sqlFile" value="/tables_h2.sql" />
+  </bean>
+
+  <!-- Test Bean -->
+  <bean id="timerMessageHornetQClient" class="org.drools.timer.test.helper.TimerMessageHornetQClient">
+	<property name="session" ref="clientSession" />
+	<property name="producer" ref="timerMessageProducer" />
+  </bean>
+
+  <!-- Test Bean -->
+  <bean id="timerMessageProducer" factory-bean="clientSession" factory-method="createProducer" destroy-method="close">
+  	<constructor-arg value="timerServiceMessages" />
+  </bean>
+
+  <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 -->
+  <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>
+            <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">
+          <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/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/contextTest.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/jdbc.properties
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/jdbc.properties	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/jdbc.properties	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,5 @@
+jdbc.quartz.delegateClassName=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
+jdbc.driverClassName=com.mysql.jdbc.Driver
+jdbc.url=jdbc:mysql://localhost:3306/persistent_timers
+jdbc.username=quartz
+jdbc.password=quartz
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/jdbc.properties
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/jndi.properties
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/jndi.properties	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/jndi.properties	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1 @@
+java.naming.factory.initial=bitronix.tm.jndi.BitronixInitialContextFactory
\ No newline at end of file


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/jndi.properties
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/tables_h2.sql
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/tables_h2.sql	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/tables_h2.sql	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,238 @@
+-- Thanks to Amir Kibbar and Peter Rietzler for contributing the schema for H2 database, 
+-- and verifying that it works with Quartz's StdJDBCDelegate
+--
+-- Note, Quartz depends on row-level locking which means you must use the MVCC=TRUE 
+-- setting on your H2 database, or you will experience dead-locks
+--
+--
+-- In your Quartz properties file, you'll need to set 
+-- org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
+
+CREATE TABLE QRTZ_CALENDARS (
+  CALENDAR_NAME VARCHAR (200)  NOT NULL ,
+  CALENDAR IMAGE NOT NULL
+);
+
+CREATE TABLE QRTZ_CRON_TRIGGERS (
+  TRIGGER_NAME VARCHAR (200)  NOT NULL ,
+  TRIGGER_GROUP VARCHAR (200)  NOT NULL ,
+  CRON_EXPRESSION VARCHAR (120)  NOT NULL ,
+  TIME_ZONE_ID VARCHAR (80) 
+);
+
+CREATE TABLE QRTZ_FIRED_TRIGGERS (
+  ENTRY_ID VARCHAR (95)  NOT NULL ,
+  TRIGGER_NAME VARCHAR (200)  NOT NULL ,
+  TRIGGER_GROUP VARCHAR (200)  NOT NULL ,
+  IS_VOLATILE BOOLEAN  NOT NULL ,
+  INSTANCE_NAME VARCHAR (200)  NOT NULL ,
+  FIRED_TIME BIGINT NOT NULL ,
+  PRIORITY INTEGER NOT NULL ,
+  STATE VARCHAR (16)  NOT NULL,
+  JOB_NAME VARCHAR (200)  NULL ,
+  JOB_GROUP VARCHAR (200)  NULL ,
+  IS_STATEFUL BOOLEAN  NULL ,
+  REQUESTS_RECOVERY BOOLEAN  NULL 
+);
+
+CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
+  TRIGGER_GROUP VARCHAR (200)  NOT NULL 
+);
+
+CREATE TABLE QRTZ_SCHEDULER_STATE (
+  INSTANCE_NAME VARCHAR (200)  NOT NULL ,
+  LAST_CHECKIN_TIME BIGINT NOT NULL ,
+  CHECKIN_INTERVAL BIGINT NOT NULL
+);
+
+CREATE TABLE QRTZ_LOCKS (
+  LOCK_NAME VARCHAR (40)  NOT NULL 
+);
+
+CREATE TABLE QRTZ_JOB_DETAILS (
+  JOB_NAME VARCHAR (200)  NOT NULL ,
+  JOB_GROUP VARCHAR (200)  NOT NULL ,
+  DESCRIPTION VARCHAR (250) NULL ,
+  JOB_CLASS_NAME VARCHAR (250)  NOT NULL ,
+  IS_DURABLE BOOLEAN  NOT NULL ,
+  IS_VOLATILE BOOLEAN  NOT NULL ,
+  IS_STATEFUL BOOLEAN  NOT NULL ,
+  REQUESTS_RECOVERY BOOLEAN  NOT NULL ,
+  JOB_DATA IMAGE NULL
+);
+
+CREATE TABLE QRTZ_JOB_LISTENERS (
+  JOB_NAME VARCHAR (200)  NOT NULL ,
+  JOB_GROUP VARCHAR (200)  NOT NULL ,
+  JOB_LISTENER VARCHAR (200)  NOT NULL
+);
+
+CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
+  TRIGGER_NAME VARCHAR (200)  NOT NULL ,
+  TRIGGER_GROUP VARCHAR (200)  NOT NULL ,
+  REPEAT_COUNT BIGINT NOT NULL ,
+  REPEAT_INTERVAL BIGINT NOT NULL ,
+  TIMES_TRIGGERED BIGINT NOT NULL
+);
+
+CREATE TABLE QRTZ_BLOB_TRIGGERS (
+  TRIGGER_NAME VARCHAR (200)  NOT NULL ,
+  TRIGGER_GROUP VARCHAR (200)  NOT NULL ,
+  BLOB_DATA IMAGE NULL
+);
+
+CREATE TABLE QRTZ_TRIGGER_LISTENERS (
+  TRIGGER_NAME VARCHAR (200)  NOT NULL ,
+  TRIGGER_GROUP VARCHAR (200)  NOT NULL ,
+  TRIGGER_LISTENER VARCHAR (200)  NOT NULL
+);
+
+CREATE TABLE QRTZ_TRIGGERS (
+  TRIGGER_NAME VARCHAR (200)  NOT NULL ,
+  TRIGGER_GROUP VARCHAR (200)  NOT NULL ,
+  JOB_NAME VARCHAR (200)  NOT NULL ,
+  JOB_GROUP VARCHAR (200)  NOT NULL ,
+  IS_VOLATILE BOOLEAN  NOT NULL ,
+  DESCRIPTION VARCHAR (250) NULL ,
+  NEXT_FIRE_TIME BIGINT NULL ,
+  PREV_FIRE_TIME BIGINT NULL ,
+  PRIORITY INTEGER NULL ,
+  TRIGGER_STATE VARCHAR (16)  NOT NULL ,
+  TRIGGER_TYPE VARCHAR (8)  NOT NULL ,
+  START_TIME BIGINT NOT NULL ,
+  END_TIME BIGINT NULL ,
+  CALENDAR_NAME VARCHAR (200)  NULL ,
+  MISFIRE_INSTR SMALLINT NULL ,
+  JOB_DATA IMAGE NULL
+);
+
+ALTER TABLE QRTZ_CALENDARS  ADD
+  CONSTRAINT PK_QRTZ_CALENDARS PRIMARY KEY  
+  (
+    CALENDAR_NAME
+  );
+
+ALTER TABLE QRTZ_CRON_TRIGGERS  ADD
+  CONSTRAINT PK_QRTZ_CRON_TRIGGERS PRIMARY KEY  
+  (
+    TRIGGER_NAME,
+    TRIGGER_GROUP
+  );
+
+ALTER TABLE QRTZ_FIRED_TRIGGERS  ADD
+  CONSTRAINT PK_QRTZ_FIRED_TRIGGERS PRIMARY KEY  
+  (
+    ENTRY_ID
+  );
+
+ALTER TABLE QRTZ_PAUSED_TRIGGER_GRPS  ADD
+  CONSTRAINT PK_QRTZ_PAUSED_TRIGGER_GRPS PRIMARY KEY  
+  (
+    TRIGGER_GROUP
+  );
+
+ALTER TABLE QRTZ_SCHEDULER_STATE  ADD
+  CONSTRAINT PK_QRTZ_SCHEDULER_STATE PRIMARY KEY  
+  (
+    INSTANCE_NAME
+  );
+
+ALTER TABLE QRTZ_LOCKS  ADD
+  CONSTRAINT PK_QRTZ_LOCKS PRIMARY KEY  
+  (
+    LOCK_NAME
+  );
+
+ALTER TABLE QRTZ_JOB_DETAILS  ADD
+  CONSTRAINT PK_QRTZ_JOB_DETAILS PRIMARY KEY  
+  (
+    JOB_NAME,
+    JOB_GROUP
+  );
+
+ALTER TABLE QRTZ_JOB_LISTENERS  ADD
+  CONSTRAINT PK_QRTZ_JOB_LISTENERS PRIMARY KEY  
+  (
+    JOB_NAME,
+    JOB_GROUP,
+    JOB_LISTENER
+  );
+
+ALTER TABLE QRTZ_SIMPLE_TRIGGERS  ADD
+  CONSTRAINT PK_QRTZ_SIMPLE_TRIGGERS PRIMARY KEY  
+  (
+    TRIGGER_NAME,
+    TRIGGER_GROUP
+  );
+
+ALTER TABLE QRTZ_TRIGGER_LISTENERS  ADD
+  CONSTRAINT PK_QRTZ_TRIGGER_LISTENERS PRIMARY KEY  
+  (
+    TRIGGER_NAME,
+    TRIGGER_GROUP,
+    TRIGGER_LISTENER
+  );
+
+ALTER TABLE QRTZ_TRIGGERS  ADD
+  CONSTRAINT PK_QRTZ_TRIGGERS PRIMARY KEY  
+  (
+    TRIGGER_NAME,
+    TRIGGER_GROUP
+  );
+
+ALTER TABLE QRTZ_CRON_TRIGGERS ADD
+  CONSTRAINT FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS FOREIGN KEY
+  (
+    TRIGGER_NAME,
+    TRIGGER_GROUP
+  ) REFERENCES QRTZ_TRIGGERS (
+    TRIGGER_NAME,
+    TRIGGER_GROUP
+  ) ON DELETE CASCADE;
+
+ALTER TABLE QRTZ_JOB_LISTENERS ADD
+  CONSTRAINT FK_QRTZ_JOB_LISTENERS_QRTZ_JOB_DETAILS FOREIGN KEY
+  (
+    JOB_NAME,
+    JOB_GROUP
+  ) REFERENCES QRTZ_JOB_DETAILS (
+    JOB_NAME,
+    JOB_GROUP
+  ) ON DELETE CASCADE;
+
+ALTER TABLE QRTZ_SIMPLE_TRIGGERS ADD
+  CONSTRAINT FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS FOREIGN KEY
+  (
+    TRIGGER_NAME,
+    TRIGGER_GROUP
+  ) REFERENCES QRTZ_TRIGGERS (
+    TRIGGER_NAME,
+    TRIGGER_GROUP
+  ) ON DELETE CASCADE;
+
+ALTER TABLE QRTZ_TRIGGER_LISTENERS ADD
+  CONSTRAINT FK_QRTZ_TRIGGER_LISTENERS_QRTZ_TRIGGERS FOREIGN KEY
+  (
+    TRIGGER_NAME,
+    TRIGGER_GROUP
+  ) REFERENCES QRTZ_TRIGGERS (
+    TRIGGER_NAME,
+    TRIGGER_GROUP
+  ) ON DELETE CASCADE;
+
+ALTER TABLE QRTZ_TRIGGERS ADD
+  CONSTRAINT FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS FOREIGN KEY
+  (
+    JOB_NAME,
+    JOB_GROUP
+  ) REFERENCES QRTZ_JOB_DETAILS (
+    JOB_NAME,
+    JOB_GROUP
+  );
+
+INSERT INTO QRTZ_LOCKS VALUES('TRIGGER_ACCESS');
+INSERT INTO QRTZ_LOCKS VALUES('JOB_ACCESS');
+INSERT INTO QRTZ_LOCKS VALUES('CALENDAR_ACCESS');
+INSERT INTO QRTZ_LOCKS VALUES('STATE_ACCESS');
+INSERT INTO QRTZ_LOCKS VALUES('MISFIRE_ACCESS');
+COMMIT;


Property changes on: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/drools-timer-tests/src/test/resources/tables_h2.sql
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/pom.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/pom.xml	                        (rev 0)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/drools-persistent-timer/pom.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -0,0 +1,28 @@
+<?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-process</artifactId>
+    <groupId>org.drools</groupId>
+    <version>5.2.0.SNAPSHOT</version>
+  </parent>
+
+  <artifactId>drools-persistent-timer</artifactId>
+  <packaging>pom</packaging>
+  <name>Drools :: Persistent Timer</name>
+
+  <modules>
+    <module>drools-timer-core</module>
+    <module>drools-timer-persistence</module>
+    <module>drools-timer-messages</module>
+    <module>drools-timer-scheduler</module>
+    <module>drools-timer-executor</module>
+    <module>drools-timer-tests</module>
+  </modules>
+
+  <properties>
+    <hornetq.version>2.0.0.GA</hornetq.version>
+    <netty.version>3.1.5.GA</netty.version>
+  </properties>
+
+</project>


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

Modified: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/pom.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/pom.xml	2010-09-02 03:01:14 UTC (rev 34969)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/drools-process/pom.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -37,6 +37,7 @@
       <module>drools-gwt-graph</module>
       <module>drools-gwt-war</module>
       <module>drools-gwt-server-war</module>
+      <module>drools-persistent-timer</module>
   </modules>
   
 </project>

Modified: labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/pom.xml
===================================================================
--- labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/pom.xml	2010-09-02 03:01:14 UTC (rev 34969)
+++ labs/jbossrules/branches/diega_esteban_jpm_integration_r34940/pom.xml	2010-09-02 03:15:05 UTC (rev 34970)
@@ -1074,6 +1074,32 @@
             <artifactId>drools-ide-common</artifactId>
             <version>${project.version}</version>
          </dependency>
+         <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-timer-core</artifactId>
+            <version>${project.version}</version>
+         </dependency>
+         <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-timer-persistence</artifactId>
+            <version>${project.version}</version>
+         </dependency>
+         <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-timer-messages</artifactId>
+            <version>${project.version}</version>
+         </dependency>
+         <dependency>
+            <groupId>org.drools</groupId>
+            <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>
          <artifactId>junit</artifactId>



More information about the jboss-svn-commits mailing list