/** * Copyright 2010 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.common; import java.util.Map; import java.util.concurrent.locks.Lock; import org.drools.FactException; import org.drools.FactHandle; import org.drools.SessionConfiguration; import org.drools.WorkingMemory; import org.drools.concurrent.ExecutorService; import org.drools.event.AgendaEventSupport; import org.drools.event.WorkingMemoryEventSupport; import org.drools.reteoo.LIANodePropagation; import org.drools.reteoo.ObjectTypeConf; import org.drools.reteoo.PartitionTaskManager; import org.drools.rule.EntryPoint; import org.drools.rule.Rule; import org.drools.runtime.Calendars; import org.drools.runtime.Channel; import org.drools.runtime.ExitPoint; import org.drools.runtime.KnowledgeRuntime; import org.drools.runtime.impl.ExecutionResultImpl; import org.drools.runtime.process.InternalProcessRuntime; import org.drools.runtime.rule.WorkingMemoryEntryPoint; import org.drools.spi.Activation; import org.drools.spi.FactHandleFactory; import org.drools.spi.PropagationContext; import org.drools.time.TimerService; import org.drools.type.DateFormats; public interface InternalWorkingMemory extends WorkingMemory { public int getId(); public void setId(int id); public void setWorkingMemoryEventSupport(WorkingMemoryEventSupport workingMemoryEventSupport); ///public ObjectHashMap getAssertMap(); public void setAgendaEventSupport(AgendaEventSupport agendaEventSupport); public Object getNodeMemory(NodeMemory node); public void clearNodeMemory(NodeMemory node); public long getNextPropagationIdCounter(); //public ObjectHashMap getFactHandleMap() public ObjectStore getObjectStore(); public TruthMaintenanceSystem getTruthMaintenanceSystem(); public void executeQueuedActions(); public void queueWorkingMemoryAction(final WorkingMemoryAction action); public FactHandleFactory getFactHandleFactory(); public EntryPoint getEntryPoint(); public void insert(final InternalFactHandle handle, final Object object, final Rule rule, final Activation activation, ObjectTypeConf typeConf); /** * Looks for the fact handle associated to the given object * by looking up the object IDENTITY (==), even if rule base * is configured to AssertBehavior.EQUALITY. * * @param object * @return null if fact handle not found */ public FactHandle getFactHandleByIdentity(final Object object); void retract(final FactHandle factHandle, final boolean removeLogical, final boolean updateEqualsMap, final Rule rule, final Activation activation) throws FactException; public Lock getLock(); public boolean isSequential(); public void addLIANodePropagation(LIANodePropagation liaNodePropagation); public ObjectTypeConfigurationRegistry getObjectTypeConfigurationRegistry(); public InternalFactHandle getInitialFactHandle(); public Calendars getCalendars(); /** * Returns the TimerService instance (session clock) for this * session. * * @return */ public TimerService getTimerService(); /** * Returns the PartitionTaskManager for the given partition ID * in case the rulebase has partitions enabled * * @param partitionId the ID of the partition for which the task manager is assigned * * @return the PartitionTaskManager */ public PartitionTaskManager getPartitionTaskManager( RuleBasePartitionId partitionId ); public void setKnowledgeRuntime(InternalKnowledgeRuntime kruntime); public InternalKnowledgeRuntime getKnowledgeRuntime(); /** * @deprecated Use {@link #getChannels()} instead. */ @Deprecated public Map<String, ExitPoint> getExitPoints(); /** * Returns a map of channel Id->Channel of all channels in * this working memory * * @return */ public Map< String, Channel> getChannels(); public Map<String, ? extends WorkingMemoryEntryPoint> getEntryPoints(); public SessionConfiguration getSessionConfiguration(); public void startBatchExecution(ExecutionResultImpl results); public ExecutionResultImpl getExecutionResult(); public void endBatchExecution(); /** * This method must be called before starting any new work in the engine, * like inserting a new fact or firing a new rule. It will reset the engine * idle time counter. * * This method must be extremely light to avoid contentions when called by * multiple threads/entry-points */ public void startOperation(); /** * This method must be called after finishing any work in the engine, * like inserting a new fact or firing a new rule. It will reset the engine * idle time counter. * * This method must be extremely light to avoid contentions when called by * multiple threads/entry-points */ public void endOperation(); /** * Returns the number of time units (usually ms) that the engine is idle * according to the session clock or -1 if it is not idle. * * This method is not synchronised and might return an approximate value. * * @return */ public long getIdleTime(); /** * Returns the number of time units (usually ms) to * the next scheduled job * * @return the number of time units until the next scheduled job or -1 if * there is no job scheduled */ public long getTimeToNextJob(); public void updateEntryPointsCache(); /** * This method is called by the agenda before firing a new activation * to ensure the working memory is in a safe state to fire the activation. */ public void prepareToFireActivation(); /** * This method is called by the agenda right after an activation was fired * to allow the working memory to resume any activities blocked during * activation firing. */ public void activationFired(); /** * Returns the total number of facts in the working memory, i.e., counting * all facts from all entry points. This is an approximate value and may not * be accurate due to the concurrent nature of the entry points. * * @return */ public long getTotalFactCount(); public DateFormats getDateFormats(); InternalProcessRuntime getProcessRuntime(); }