/**
* Copyright 2005 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;
import java.io.Externalizable;
import org.drools.definition.type.FactType;
import org.drools.rule.Package;
import org.drools.runtime.Environment;
/**
* Active collection of <code>Rule</code>s.
*
* <p>
* From a <code>RuleBase</code> many <code>WorkingMemory</code> rule
* sessions may be instantiated. Additionally, it may be inspected to determine
* which <code>Package</code> s it contains.
* </p>
*
* @see WorkingMemory
*/
public interface RuleBase
extends
Externalizable,
RuleBaseEventManager {
public static final int RETEOO = 1;
StatelessSession newStatelessSession();
/**
* Create a new <code>WorkingMemory</code> session for this
* <code>RuleBase</code>. By default the RuleBase retains a
* weak reference to returned WorkingMemory.
*
* <p>
* The created <code>WorkingMemory</code> uses the default conflict
* resolution strategy.
* </p>
*
* @see WorkingMemory
* @see org.drools.conflict.DefaultConflictResolver
*
* @return A newly initialized <code>WorkingMemory</code>.
*
* IMPORTANT: when using the stateful session REMEMBER TO CALL <code>dispose()</code> when you are done with the session.
*/
StatefulSession newStatefulSession();
StatefulSession newStatefulSession(boolean keepReference);
StatefulSession newStatefulSession(java.io.InputStream stream);
StatefulSession newStatefulSession(java.io.InputStream stream,
boolean keepReference);
/**
* Create a new <code>WorkingMemory</code> session for this
* <code>RuleBase</code>.
*
* @param config the session configuration object to use for the
* created session.
*
* @see WorkingMemory
* @see org.drools.conflict.DefaultConflictResolver
*
* @return A newly initialized <code>WorkingMemory</code>.
*/
StatefulSession newStatefulSession(SessionConfiguration config, Environment environment);
Package[] getPackages();
Package getPackage(String name);
void addPackages(Package[] pkgs );
void addPackage(Package pkg);
/**
* This locks the current RuleBase and all there referenced StatefulSessions. This should be
* used when there is a number of dynamic RuleBase changes you wish to make, but cannot have any normal
* WorkingMemory operations occuring inbetween.
*
*/
void lock();
/**
* Unlocks the RuleBase and all of the referenced StatefulSessions.
*
*/
void unlock();
/**
* Returns the number of additive operations applied since the last lock() was obtained
* @return
*/
int getAdditionsSinceLock();
/**
* Returns the number of removal operations applied since the last lock() was obtained
* @return
*/
int getRemovalsSinceLock();
/**
* Remove the package and all it's rules, functions etc
* @param packageName
*/
void removePackage(String packageName);
/**
* Remove a specific Rule in a Package
* @param packageName
* @param ruleName
*/
void removeRule(String packageName,
String ruleName);
/**
* Remove a specific Query in a Package
* @param packageName
* @param ruleName
*/
void removeQuery(String packageName,
String queryName);
/**
* Removes a specific function in a specific package.
* @param packageName
* @param functionName
*/
void removeFunction(String packageName,
String functionName);
/**
* Removes a process by the process' id
* @param id
*/
void removeProcess(String id);
/**
* Returns an array of all the referenced StatefulSessions
* @return
*/
public StatefulSession[] getStatefulSessions();
/**
* Returns a declared FactType.
* FactTypes are types that are declared as part of the rules (an alternative to POJOs).
* From a fact type you can generate instances of facts which you can use to communicate with the engine.
*
* @param string - the name of the declared type (a type defined in the rules).
* This would typically be packagename + . + type name.
*
* Eg, if there is a delcared type of name "Driver", and the package name is "com.company".
* Then the string you pass in would be "com.company.Driver".
*
*/
public FactType getFactType(String string);
}