[jboss-svn-commits] JBL Code SVN: r20235 - in labs/jbossrules/trunk: drools-jsr94/src/main/java/org/drools/jsr94/rules and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri May 30 14:46:18 EDT 2008
Author: tirelli
Date: 2008-05-30 14:46:18 -0400 (Fri, 30 May 2008)
New Revision: 20235
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/JDKScheduler.java
Modified:
labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/Jsr94FactHandleFactory.java
labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/StatefulRuleSessionImpl.java
labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/RuleExecutionSetImpl.java
Log:
Refactoring session clock to unify CEP and processes clock implementations
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/JDKScheduler.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/JDKScheduler.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/time/impl/JDKScheduler.java 2008-05-30 18:46:18 UTC (rev 20235)
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2008 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.drools.time.impl;
+
+import java.util.Date;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+import org.drools.time.Job;
+import org.drools.time.JobContext;
+import org.drools.time.JobHandle;
+import org.drools.time.SessionClock;
+import org.drools.time.TimerService;
+import org.drools.time.Trigger;
+
+/**
+ * A default Scheduler implementation that uses the
+ * JDK built-in ScheduledThreadPoolExecutor as the
+ * scheduler and the system clock as the clock.
+ *
+ */
+public class JDKScheduler
+ implements
+ TimerService,
+ SessionClock {
+
+ private ScheduledThreadPoolExecutor scheduler;
+
+ public JDKScheduler() {
+ this( 3 );
+ }
+
+ public JDKScheduler(int size) {
+ this.scheduler = new ScheduledThreadPoolExecutor( size );
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public long getCurrentTime() {
+ return System.currentTimeMillis();
+ }
+
+ public JobHandle scheduleJob(Job job,
+ JobContext ctx,
+ Trigger trigger) {
+ JDKJobHandle jobHandle = new JDKJobHandle();
+
+ Date date = trigger.getNextFireTime();
+
+ if ( date != null ) {
+ JDKCallableJob callableJob = new JDKCallableJob( job,
+ ctx,
+ trigger,
+ jobHandle,
+ this.scheduler );
+ ScheduledFuture future = schedule( date,
+ callableJob,
+ this.scheduler );
+ jobHandle.setFuture( future );
+
+ return jobHandle;
+ } else {
+ return null;
+ }
+ }
+
+ public boolean removeJob(JobHandle jobHandle) {
+ return this.scheduler.remove( (Runnable) ((JDKJobHandle) jobHandle).getFuture() );
+ }
+
+ private static ScheduledFuture<Void> schedule(Date date,
+ JDKCallableJob callableJob,
+ ScheduledThreadPoolExecutor scheduler) {
+ long then = date.getTime();
+ long now = System.currentTimeMillis();
+ ScheduledFuture<Void> future = null;
+ if ( then >= now ) {
+ future = scheduler.schedule( callableJob,
+ then - now,
+ TimeUnit.MILLISECONDS );
+ } else {
+ future = scheduler.schedule( callableJob,
+ 0,
+ TimeUnit.MILLISECONDS );
+ }
+ return future;
+ }
+
+ public static class JDKCallableJob
+ implements
+ Callable<Void> {
+ private final Job job;
+ private final Trigger trigger;
+ private final JobContext ctx;
+ private final ScheduledThreadPoolExecutor scheduler;
+ private final JDKJobHandle handle;
+
+ public JDKCallableJob(Job job,
+ JobContext ctx,
+ Trigger trigger,
+ JDKJobHandle handle,
+ ScheduledThreadPoolExecutor scheduler) {
+ this.job = job;
+ this.ctx = ctx;
+ this.trigger = trigger;
+ this.handle = handle;
+ this.scheduler = scheduler;
+ }
+
+ public Void call() throws Exception {
+ this.job.execute( this.ctx );
+
+ // our triggers allow for flexible rescheduling
+ Date date = this.trigger.getNextFireTime();
+ if ( date != null ) {
+ ScheduledFuture<Void> future = schedule( date,
+ this,
+ this.scheduler );
+ this.handle.setFuture( future );
+ }
+
+ return null;
+ }
+ }
+
+ public class JDKJobHandle
+ implements
+ JobHandle {
+
+ private static final long serialVersionUID = 6607880828232839927L;
+
+ private ScheduledFuture<Void> future;
+
+ public JDKJobHandle() {
+ }
+
+ public ScheduledFuture<Void> getFuture() {
+ return future;
+ }
+
+ public void setFuture(ScheduledFuture<Void> future) {
+ this.future = future;
+ }
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/Jsr94FactHandleFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/Jsr94FactHandleFactory.java 2008-05-30 18:42:27 UTC (rev 20234)
+++ labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/Jsr94FactHandleFactory.java 2008-05-30 18:46:18 UTC (rev 20235)
@@ -16,7 +16,6 @@
* limitations under the License.
*/
-import org.drools.TemporalSession;
import org.drools.common.AbstractFactHandleFactory;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
@@ -42,7 +41,7 @@
// later we need to centralize the following code snippet in a common method
// shared by all fact handle factory implementations
TypeDeclaration type = conf.getTypeDeclaration();
- long timestamp = ((TemporalSession) workingMemory).getSessionClock().getCurrentTime();
+ long timestamp = workingMemory.getSessionClock().getCurrentTime();
long duration = 0;
if ( type.getDurationExtractor() != null ) {
duration = type.getDurationExtractor().getLongValue( workingMemory,
Modified: labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/StatefulRuleSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/StatefulRuleSessionImpl.java 2008-05-30 18:42:27 UTC (rev 20234)
+++ labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/StatefulRuleSessionImpl.java 2008-05-30 18:46:18 UTC (rev 20235)
@@ -32,6 +32,7 @@
import org.drools.FactException;
import org.drools.FactHandle;
+import org.drools.SessionConfiguration;
import org.drools.StatefulSession;
import org.drools.WorkingMemory;
import org.drools.jsr94.rules.admin.RuleExecutionSetImpl;
@@ -99,15 +100,17 @@
this.setRuleExecutionSet( ruleSet );
- initSession( true );
+ SessionConfiguration conf = new SessionConfiguration();
+ conf.setKeepReference( true );
+ initSession( conf );
}
/**
* Initialize this <code>RuleSession</code>
* with a new <code>WorkingMemory</code>.
*/
- protected void initSession(boolean keepReference) {
- this.session = this.getRuleExecutionSet().newStatefulSession( keepReference);
+ protected void initSession(SessionConfiguration conf) {
+ this.session = this.getRuleExecutionSet().newStatefulSession( conf );
final Map props = this.getProperties();
if ( props != null ) {
@@ -339,7 +342,7 @@
*/
public void reset() {
// stateful rule sessions should not be high load, thus safe to keep references
- initSession( true );
+ initSession( new SessionConfiguration() );
}
public int getType() throws InvalidRuleSessionException {
Modified: labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/RuleExecutionSetImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/RuleExecutionSetImpl.java 2008-05-30 18:42:27 UTC (rev 20234)
+++ labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/RuleExecutionSetImpl.java 2008-05-30 18:46:18 UTC (rev 20235)
@@ -28,6 +28,7 @@
import org.drools.RuleBase;
import org.drools.RuleBaseConfiguration;
import org.drools.RuleIntegrationException;
+import org.drools.SessionConfiguration;
import org.drools.StatefulSession;
import org.drools.StatelessSession;
import org.drools.jsr94.rules.Constants;
@@ -169,8 +170,8 @@
*
* @return A new WorkingMemory object.
*/
- public StatefulSession newStatefulSession(boolean keepReference) {
- return this.ruleBase.newStatefulSession(keepReference);
+ public StatefulSession newStatefulSession(SessionConfiguration conf) {
+ return this.ruleBase.newStatefulSession(conf);
}
/**
More information about the jboss-svn-commits
mailing list