Java源码示例:org.drools.core.impl.KnowledgeBaseFactory
示例1
public InternalKnowledgeBase createKieBase( KieBaseModelImpl kBaseModel, KieProject kieProject, ResultsImpl messages, KieBaseConfiguration conf ) {
KnowledgePackagesBuildResult knowledgePackagesBuildResult = buildKnowledgePackages(kBaseModel, kieProject, messages);
if(knowledgePackagesBuildResult.hasErrors()) {
return null;
}
Collection<KiePackage> pkgs = knowledgePackagesBuildResult.getPkgs();
checkStreamMode( kBaseModel, conf, pkgs );
ClassLoader cl = kieProject.getClassLoader();
if (conf == null) {
conf = getKnowledgeBaseConfiguration(kBaseModel, cl);
} else if (conf instanceof RuleBaseConfiguration ) {
((RuleBaseConfiguration)conf).setClassLoader(cl);
}
InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase(kBaseModel.getName(), conf );
kBase.addPackages( pkgs );
return kBase;
}
示例2
protected KieSession getSessionFromString( String drlString, KieBaseConfiguration kbConf ) {
KieHelper kieHelper = new KieHelper();
kieHelper.addContent( drlString, ResourceType.DRL );
Results res = kieHelper.verify();
if ( res.hasMessages( Message.Level.ERROR ) ) {
fail( res.getMessages( Message.Level.ERROR ).toString() );
}
if ( kbConf == null ) {
kbConf = KieServices.Factory.get().newKieBaseConfiguration();
}
kbConf.setOption( EqualityBehaviorOption.EQUALITY );
KieBase kieBase = kieHelper.build( kbConf );
KieSessionConfiguration ksConf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
((SessionConfiguration) ksConf).setBeliefSystemType( BeliefSystemType.DEFEASIBLE );
return kieBase.newKieSession( ksConf, null );
}
示例3
@Test
public void testRegisterHandlerWithKsessionUsingConfiguration() {
KieBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
Properties props = new Properties();
props.setProperty("drools.workItemHandlers", "CustomWorkItemHandlers.conf");
KieSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(props);
KieSession ksession = kbase.newKieSession(config, EnvironmentFactory.newEnvironment());
assertNotNull(ksession);
// this test would fail on creation of the work item manager if injecting session is not supported
WorkItemManager manager = ksession.getWorkItemManager();
assertNotNull(manager);
Map<String, WorkItemHandler> handlers = ((SessionConfiguration)config).getWorkItemHandlers();
assertNotNull(handlers);
assertEquals(1, handlers.size());
assertTrue(handlers.containsKey("Custom"));
}
示例4
@Test
public void testCallActivity() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivity.bpmn2"), ResourceType.BPMN2);
kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivitySubProcess.bpmn2"), ResourceType.BPMN2);
if (!kbuilder.getErrors().isEmpty()) {
for (KnowledgeBuilderError error : kbuilder.getErrors()) {
logger.error("{}", error);
}
throw new IllegalArgumentException("Errors while parsing knowledge base");
}
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages(kbuilder.getKnowledgePackages());
KieSession ksession = createKnowledgeSession(kbase);
Map<String, Object> params = new HashMap<String, Object>();
params.put("x", "oldValue");
ProcessInstance processInstance = ksession.startProcess("ParentProcess", params);
assertThat(processInstance.getState()).isEqualTo(ProcessInstance.STATE_COMPLETED);
assertThat(((WorkflowProcessInstance) processInstance).getVariable("y")).isEqualTo("new value");
}
示例5
@Test
public void testQuery() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("org/drools/compiler/integrationtests/simple_query_test.drl"), ResourceType.DRL);
if (kbuilder.hasErrors()) {
fail(kbuilder.getErrors().toString());
}
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages(kbuilder.getKnowledgePackages());
ksession = createKnowledgeSession(kbase);
ksession.insert( new Cheese( "stinky", 5 ) );
ksession.insert( new Cheese( "smelly", 7 ) );
List<Command<?>> commands = new ArrayList<Command<?>>();
commands.add(CommandFactory.newQuery("numStinkyCheeses", "simple query"));
Command<?> cmds = CommandFactory.newBatchExecution(commands);
ExecutionResults result = (ExecutionResults) ksession.execute(cmds);
assertNotNull(result, "Batch execution result is null!");
Object queryResultsObject = result.getValue("numStinkyCheeses");
assertTrue(queryResultsObject != null && queryResultsObject instanceof QueryResults, "Retrieved object is null or incorrect!");
assertEquals( 1, ((QueryResults) queryResultsObject).size() );
}
示例6
@Test
public void testIntegregation() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newClassPathResource("changeset1Test.xml",
getClass()),
ResourceType.CHANGE_SET );
assertFalse( kbuilder.hasErrors() );
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages( kbuilder.getKnowledgePackages() );
KieSession ksession = createKnowledgeSession(kbase);
List list = new ArrayList();
ksession.setGlobal( "list",
list );
ksession.fireAllRules();
ksession.dispose();
assertEquals( 2,
list.size() );
assertTrue( list.containsAll( Arrays.asList( new String[]{"rule1", "rule2"} ) ) );
}
示例7
private StatelessKieSession getSession(boolean serialize) throws Exception {
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
for ( String drl : DRLs ) {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newInputStreamResource(getClass().getResourceAsStream(drl)),
ResourceType.DRL );
assertFalse(kbuilder.hasErrors(), kbuilder.getErrors().toString());
Collection<KiePackage> kpkgs = kbuilder.getKnowledgePackages();
Collection<KiePackage> newCollection = null;
if ( serialize ) {
newCollection = new ArrayList<KiePackage>();
for( KiePackage kpkg : kpkgs) {
kpkg = SerializationHelper.serializeObject(kpkg);
newCollection.add( kpkg );
}
} else {
newCollection = kpkgs;
}
kbase.addPackages( newCollection );
}
return kbase.newStatelessKieSession();
}
示例8
@Test
public void testAdd() {
/*
* create a RuleBase with a single ObjectTypeNode we attach a
* MockObjectSink so we can detect assertions and retractions
*/
InternalKnowledgeBase kBase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase();
BuildContext context = new BuildContext(kBase);
NodeFactory nFacotry = kBase.getConfiguration().getComponentFactory().getNodeFactoryService();
EntryPointNode entryPoint = context.getKnowledgeBase().getRete().getEntryPointNodes().values().iterator().next();
final ObjectTypeNode objectTypeNode = nFacotry.buildObjectTypeNode( 0, entryPoint, new ClassObjectType( Object.class ), context );
objectTypeNode.attach(context);
final MockObjectSink sink = new MockObjectSink();
objectTypeNode.addObjectSink( sink );
kBase.newKieSession();
// objectTypeNode.
}
示例9
@BeforeEach
public void setUp() throws Exception {
baseConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
// use stream mode to enable proper event processing (see Drools Fusion 5.5.0 Doc "Event Processing Modes")
baseConfig.setOption( EventProcessingOption.STREAM );
kbase = KnowledgeBaseFactory.newKnowledgeBase(baseConfig);
// config
sessionConfig = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
// use a pseudo clock, which starts at 0 and can be advanced manually
sessionConfig.setOption( ClockTypeOption.get("pseudo") );
// create and return session
session = kbase.newKieSession(sessionConfig, null);
clock = session.getSessionClock();
}
示例10
@Test
public void testRemoveIdentities() throws Exception {
System.setProperty( "drools.removeIdentities",
"true" );
try {
InternalKnowledgeBase kBase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase();
kBase.addPackage( this.pkg );
this.ksession = kBase.newKieSession();
this.ksession.insert( "F1" );
this.ksession.insert( "F2" );
this.ksession.insert( "F3" );
this.ksession.insert( "F4" );
this.ksession.fireAllRules();
// A full cross product is 16, this is just 12
assertEquals( 12,
this.values.size() );
} finally {
System.setProperty( "drools.removeIdentities",
"false" );
}
}
示例11
@Test
public void testAccept() {
KieBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
KieSession ksession = kbase.newKieSession();
WorkflowProcessImpl process = new WorkflowProcessImpl();
RuleFlowProcessInstance processInstance = new RuleFlowProcessInstance();
processInstance.setState(ProcessInstance.STATE_ACTIVE);
processInstance.setProcess(process);
processInstance.setKnowledgeRuntime((InternalKnowledgeRuntime) ksession);
ProcessInstanceResolverStrategy strategy = new ProcessInstanceResolverStrategy();
assertTrue( strategy.accept(processInstance) );
Object object = new Object();
assertTrue( ! strategy.accept(object) );
}
示例12
@Test
public void testRuleSegmentsAllLinkedTestMasks() {
setUp( JOIN_NODE );
KieBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
InternalKnowledgeBase kBase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase(kconf);
StatefulKnowledgeSessionImpl wm = new StatefulKnowledgeSessionImpl( 1L, kBase );
PathMemory rs = (PathMemory) wm.getNodeMemory( rtn1 );
assertFalse( rs.isRuleLinked() );
assertEquals( 1, rs.getAllLinkedMaskTest() );
rs = (PathMemory) wm.getNodeMemory( rtn2 );
assertFalse( rs.isRuleLinked() );
assertEquals( 3, rs.getAllLinkedMaskTest() );
rs = (PathMemory) wm.getNodeMemory( rtn3 );
assertFalse( rs.isRuleLinked() );
assertEquals( 7, rs.getAllLinkedMaskTest() );
}
示例13
@Test
public void testOrWithVariableResolution() throws Exception {
// KieBase kbase = loadKnowledgeBase( "test_OrCEFollowedByMultipleEval.drl");
// KieSession workingMemory = createKnowledgeSession(kbase);
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newClassPathResource( "test_OrCEFollowedByMultipleEval.drl",
FirstOrderLogicTest.class ),
ResourceType.DRL );
assertFalse(kbuilder.hasErrors(), kbuilder.getErrors().toString());
final InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages( kbuilder.getKnowledgePackages() );
final KieSession ksession = createKnowledgeSession(kbase);
final AgendaEventListener al = mock( AgendaEventListener.class );
ksession.addEventListener( al );
ksession.insert( new FactA( "a" ) );
ksession.insert( new FactB( "b" ) );
ksession.insert( new FactC( "c" ) );
ksession.fireAllRules();
verify( al,
times( 6 ) ).afterMatchFired(any(AfterMatchFiredEvent.class));
}
示例14
@Test
public void testDynamicRuleRemoval() throws Exception {
InternalKnowledgeBase kbase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase();
addRule(kbase, "rule1");
addRule(kbase, "rule2");
addRule(kbase, "rule3");
final KieSession ksession = kbase.newKieSession();
List<String> rulesList = new ArrayList<String>();
ksession.setGlobal("list", rulesList);
ksession.insert("2");
ksession.fireAllRules();
assertEquals(3, rulesList.size());
assertTrue(rulesList.contains("rule1"));
assertTrue(rulesList.contains("rule2"));
assertTrue(rulesList.contains("rule3"));
removeRule(kbase, "rule1");
rulesList.clear();
ksession.insert("3");
ksession.fireAllRules();
assertEquals(2, rulesList.size());
assertFalse(rulesList.contains("rule1"));
assertTrue(rulesList.contains("rule2"));
assertTrue(rulesList.contains("rule3"));
}
示例15
public KieBase newKnowledgeBase(KieBaseConfiguration conf) {
KnowledgeBuilderErrors errors = getErrors();
if (!errors.isEmpty()) {
for (KnowledgeBuilderError error : errors) {
logger.error(error.toString());
}
throw new IllegalArgumentException("Could not parse knowledge. See the logs for details.");
}
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(conf);
kbase.addPackages(Arrays.asList(getPackages()));
return kbase;
}
示例16
public KieSession createKieSession(Process... process) {
KieBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
for (Process processToAdd : process) {
((KnowledgeBaseImpl) kbase).addProcess(processToAdd);
}
return kbase.newKieSession();
}
示例17
private StatelessKieSession getSession2(final Resource resource) throws Exception {
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( resource, ResourceType.DRL );
if (kbuilder.hasErrors() ) {
System.out.println( kbuilder.getErrors() );
}
assertFalse( kbuilder.hasErrors() );
final Collection<KiePackage> pkgs = kbuilder.getKnowledgePackages();
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages( pkgs );
kbase = SerializationHelper.serializeObject( kbase );
final StatelessKieSession session = kbase.newStatelessKieSession();
session.setGlobal( "list",
this.list );
session.setGlobal( "cheesery",
this.cheesery );
return session;
}
示例18
@BeforeEach
public void setUp() {
InternalKnowledgeBase kBase = (InternalKnowledgeBase) KnowledgeBaseFactory.newKnowledgeBase();
ksession = (StatefulKnowledgeSessionImpl)kBase.newKieSession();
tms = ((NamedEntryPoint)ksession.getWorkingMemoryEntryPoint( EntryPointId.DEFAULT.getEntryPointId() ) ).getTruthMaintenanceSystem();
}
示例19
@Test
public void testMultipleInheritanceWithPosition3() throws Exception {
// DROOLS-249
String drl =
"package org.drools.test\n" +
"declare trait PosTrait\n" +
"@propertyReactive\n" +
" field0 : int = 100 @position(0)\n" +
" field1 : int = 101 @position(1)\n" +
" field2 : int = 102 @position(0)\n" +
"end\n" +
"\n" +
"declare trait MultiInhPosTrait extends PosTrait\n" +
"@propertyReactive\n" +
" mfield0 : int = 200 //@position(0)\n" +
" mfield1 : int = 201 @position(2)\n" +
"end";
KnowledgeBuilder kBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder( );
kBuilder.add( new ByteArrayResource( drl.getBytes() ), ResourceType.DRL );
if ( kBuilder.hasErrors() ) {
System.err.println( kBuilder.getErrors() );
}
assertFalse( kBuilder.hasErrors() );
InternalKnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
knowledgeBase.addPackages( kBuilder.getKnowledgePackages() );
FactType sw = knowledgeBase.getFactType( "org.drools.test", "MultiInhPosTrait" );
assertEquals( 5, sw.getFields().size() );
assertEquals( "field0", sw.getFields().get(0).getName() );
assertEquals( "field2", sw.getFields().get(1).getName() );
assertEquals( "field1", sw.getFields().get(2).getName() );
assertEquals( "mfield1", sw.getFields().get(3).getName() );
assertEquals( "mfield0", sw.getFields().get(4).getName() );
}
示例20
@Test
public void testNamedConsequence() {
PackageDescr pkg = DescrFactory.newPackage()
.name( "org.drools.compiler" )
.newRule().name( "test" )
.lhs()
.pattern("Cheese").constraint( "type == \"stilton\"" ).end()
.namedConsequence().name("c1").end()
.pattern("Cheese").constraint( "type == \"cheddar\"" ).end()
.end()
.rhs( "// do something" )
.namedRhs( "c1", "// do something else" )
.end()
.getDescr();
assertEquals( 1,
pkg.getRules().size() );
KiePackage kpkg = compilePkgDescr( pkg );
assertEquals( "org.drools.compiler",
kpkg.getName() );
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages( Collections.singletonList( kpkg ) );
KieSession ksession = createKnowledgeSession(kbase);
Cheese stilton = new Cheese( "stilton", 5 );
Cheese cheddar = new Cheese( "cheddar", 7 );
Cheese brie = new Cheese( "brie", 5 );
ksession.insert( stilton );
ksession.insert( cheddar );
ksession.insert( brie );
int rules = ksession.fireAllRules();
assertEquals( 2,
rules );
}
示例21
@Test
public void testImmediateEventsExpiration() {
StringBuilder sb = new StringBuilder( 400 );
sb.append( "global java.util.List list;\n" );
sb.append( "import " + MyEvent.class.getCanonicalName() + ";\n" );
sb.append( "declare MyEvent @role( event ) @expires( 1ms ) @timestamp( timestamp ) end\n" );
for (int i = 0; i < 10; i++) {
sb.append( getRuleWithEvent( i ) );
}
KieSessionConfiguration sessionConfig = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
KieSession ksession = new KieHelper().addContent( sb.toString(), ResourceType.DRL )
.build( EventProcessingOption.STREAM, MultithreadEvaluationOption.YES )
.newKieSession( sessionConfig, null );
assertTrue( ( (InternalWorkingMemory) ksession ).getAgenda().isParallelAgenda() );
List<Integer> list = new DebugList<Integer>();
ksession.setGlobal( "list", list );
for (int i = 0; i < 10; i++) {
ksession.insert( new MyEvent( i, i*2L ) );
}
ksession.fireAllRules();
assertEquals(10, list.size());
}
示例22
@BeforeEach
public void createKSession() throws Exception {
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource(ruleString.getBytes()), ResourceType.DRL );
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
assertFalse( kbuilder.hasErrors() );
kbase.addPackages( kbuilder.getKnowledgePackages() );
ksession = createKnowledgeSession(kbase);
}
示例23
@Test
public void testPositional() {
String drl =
"import " + Man.class.getCanonicalName() + ";\n" +
"\n" +
"global java.util.List list;" +
"\n" +
"rule \"To be or not to be\"\n" +
"when\n" +
" $m : Man( \"john\" , 18 , $w ; )\n" +
"then\n" +
" list.add($w); " +
"end";
KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
knowledgeBuilder.add( new ByteArrayResource( drl.getBytes() ),
ResourceType.DRL );
System.out.println( knowledgeBuilder.getErrors().toString() );
assertFalse( knowledgeBuilder.hasErrors() );
InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();
kBase.addPackages( knowledgeBuilder.getKnowledgePackages() );
KieSession kSession = createKnowledgeSession(kBase);
java.util.ArrayList list = new ArrayList();
kSession.setGlobal( "list",
list );
kSession.insert( new Man( "john",
18,
84.2 ) );
kSession.fireAllRules();
assertTrue( list.contains( 84.2 ) );
}
示例24
@Test
public void testPatterDeclarations() {
String s =
"package org.kie.test\n" +
"global java.util.List list\n" +
"rule r1 when\n" +
" s1 : String( this == 's1' )\n" +
" s2 : String( this == 's2' )\n" +
" s3 : String( this == 's3' )\n" +
" s4 : String( this == 's4' )\n" +
" s5 : String( this == 's5' )\n" +
"then\n" +
" // s5 is missed out on purpose to make sure we only resolved required declarations\n" +
" list.add( s1 + s2 + s3 + s5 ); \n" +
"end\n";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource(s.getBytes()), ResourceType.DRL );
if ( kbuilder.hasErrors() ) {
fail( kbuilder.getErrors().toString() );
}
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages( kbuilder.getKnowledgePackages() );
KieSession ksession = createKnowledgeSession(kbase);
List list = new ArrayList();
ksession.setGlobal( "list", list );
ksession.insert( "s1" );
ksession.insert( "s2" );
ksession.insert( "s3" );
ksession.insert( "s4" );
ksession.insert( "s5" );
ksession.fireAllRules();
assertEquals( 1, list.size() );
assertEquals( "s1s2s3s5", list.get( 0 ));
}
示例25
private StatelessKieSession getSession(String drl) {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newByteArrayResource(drl.getBytes()), ResourceType.DRL);
if (kbuilder.hasErrors()) {
System.err.println(kbuilder.getErrors());
}
assertFalse(kbuilder.hasErrors());
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages(kbuilder.getKnowledgePackages());
return kbase.newStatelessKieSession();
}
示例26
@Test
public void testDeclareInheritance() throws Exception {
String s1 = "package org.drools;\n" +
"import org.drools.compiler.integrationtests.ExtendsTest.*;\n" +
"\n" +
"declare A \n" +
" @role( event )" +
" @typesafe( false )\n" +
"end\n" +
"" +
"declare C @role( event ) @typesafe( false ) end \n" +
"" +
"rule R \n" +
"when " +
" $x : C( this.x == 1 ) \n" +
"then\n" +
" System.out.println( $x ); \n" +
"end\n" +
"";
KnowledgeBuilder kBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder( );
kBuilder.add( new ByteArrayResource( s1.getBytes() ), ResourceType.DRL );
if ( kBuilder.hasErrors() ) {
System.err.println( kBuilder.getErrors() );
}
assertFalse( kBuilder.hasErrors() );
InternalKnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
knowledgeBase.addPackages( kBuilder.getKnowledgePackages() );
KieSession knowledgeSession = knowledgeBase.newKieSession();
FactHandle h = knowledgeSession.insert( new X() );
assertTrue( ( (InternalFactHandle) h ).isEvent() );
}
示例27
@Test
public void testPopulatedSingleRuleNoSharingWithSubnetworkAtStart() throws Exception {
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession());
wm.insert(new A(1));
wm.insert(new A(2));
wm.insert(new D(1));
wm.insert(new E(1));
wm.insert(new C(2));
wm.fireAllRules();
kbase.addPackages( buildKnowledgePackage("r1", " A() not( B() and C() ) D() E()\n") );
List list = new ArrayList();
wm.setGlobal("list", list);
wm.fireAllRules();
assertEquals(2, list.size() );
assertEquals( "r1", ((Match)list.get(0)).getRule().getName() );
assertEquals( "r1", ((Match)list.get(1)).getRule().getName() );
kbase.removeRule("org.kie", "r1");
wm.insert(new A(1));
wm.fireAllRules();
assertEquals(2, list.size() );
}
示例28
@Test
public void testPopulatedSingleRuleNoSharing() throws Exception {
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
InternalWorkingMemory wm = ((InternalWorkingMemory)kbase.newKieSession());
wm.insert(new A(1));
wm.insert(new B(1));
wm.insert(new C(1));
wm.insert(new C(2));
wm.insert(new D(1));
wm.insert(new E(1));
wm.fireAllRules();
kbase.addPackages( buildKnowledgePackage("r1", " A() B() C(object == 2) D() E()\n") );
List list = new ArrayList();
wm.setGlobal("list", list);
ObjectTypeNode aotn = getObjectTypeNode(kbase, A.class );
LeftInputAdapterNode liaNode = (LeftInputAdapterNode) aotn.getObjectSinkPropagator().getSinks()[0];
LiaNodeMemory lm = ( LiaNodeMemory ) wm.getNodeMemory(liaNode);
SegmentMemory sm = lm.getSegmentMemory();
assertNotNull(sm.getStagedLeftTuples().getInsertFirst());
wm.fireAllRules();
assertNull(sm.getStagedLeftTuples().getInsertFirst());
assertEquals(1, list.size() );
assertEquals( "r1", ((Match)list.get(0)).getRule().getName() );
}
示例29
@Test
public void testSimpleBlockingUsingForall() {
String str = "";
str += "package org.domain.test \n";
str += "import " + Match.class.getName() + "\n";
str += "global java.util.List list \n";
str += "dialect 'mvel' \n";
str += "rule rule1 @department(sales) salience -100 \n";
str += "when \n";
str += " $s : String( this == 'go1' ) \n";
str += "then \n";
str += " list.add( kcontext.rule.name + ':' + $s ); \n";
str += "end \n";
str += "rule rule2 salience 200\n";
str += "when \n";
str += " $s : String( this == 'go1' ) \n";
str += " exists Match( department == 'sales' ) \n";
str += " forall ( $a : Match( department == 'sales' ) Match( this == $a, active == false ) ) \n";
str += "then \n";
str += " list.add( kcontext.rule.name + ':' + $s ); \n";
str += "end \n";
KieBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
kconf.setOption( DeclarativeAgendaOption.ENABLED );
KieBase kbase = loadKnowledgeBaseFromString( kconf, str );
KieSession ksession = createKnowledgeSession(kbase);
List list = new ArrayList();
ksession.setGlobal( "list",
list );
ksession.insert( "go1" );
ksession.fireAllRules();
assertEquals( 2,
list.size() );
assertTrue( list.contains("rule1:go1") );
assertTrue( list.contains("rule2:go1") );
ksession.dispose();
}
示例30
@Test
public void testStartNode() {
KieBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
KieSession ksession = kbase.newKieSession();
MockNode mockNode = new MockNode();
MockNodeInstanceFactory mockNodeFactory = new MockNodeInstanceFactory( new MockNodeInstance( mockNode ) );
NodeInstanceFactoryRegistry.getInstance(ksession.getEnvironment()).register( mockNode.getClass(), mockNodeFactory );
RuleFlowProcess process = new RuleFlowProcess();
StartNode startNode = new StartNode();
startNode.setId( 1 );
startNode.setName( "start node" );
mockNode.setId( 2 );
new ConnectionImpl(
startNode, org.jbpm.workflow.core.Node.CONNECTION_DEFAULT_TYPE,
mockNode, org.jbpm.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
process.addNode( startNode );
process.addNode( mockNode );
RuleFlowProcessInstance processInstance = new RuleFlowProcessInstance();
processInstance.setProcess( process );
processInstance.setKnowledgeRuntime( (InternalKnowledgeRuntime) ksession );
assertEquals( ProcessInstance.STATE_PENDING, processInstance.getState() );
processInstance.start();
assertEquals( ProcessInstance.STATE_ACTIVE, processInstance.getState() );
MockNodeInstance mockNodeInstance = mockNodeFactory.getMockNodeInstance();
List<NodeInstance> triggeredBy =
mockNodeInstance.getTriggers().get(org.jbpm.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
assertNotNull(triggeredBy);
assertEquals(1, triggeredBy.size());
assertSame(startNode.getId(), triggeredBy.get(0).getNodeId());
}