[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 >= 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 >= 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