Java源码示例:org.kie.internal.builder.KnowledgeBuilder
示例1
@Test
public void testMapAccessWithVariable2() {
final String str = "package org.drools.compiler;\n" +
"import java.util.Map;\n" +
"rule \"map access with variable\"\n" +
" when\n" +
" $key : String( )\n" +
" $p1 : Person( name == 'Bob', namedAddresses[$key] != null, $na : namedAddresses[$key] )\n" +
" $p2 : Person( name == 'Mark', namedAddresses[$key] == $na )\n" +
" then\n" +
"end\n";
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newByteArrayResource(str.getBytes()), ResourceType.DRL);
assertTrue(kbuilder.hasErrors());
}
示例2
/**
* 2 resources (containing a the same type declaration) are added to the
* kbuilder.
* The expectation here is to silently discard the second type declaration.
*/
@Test
public void testDuplicatedTypeDeclarationInDifferentResources() {
//same package, different resources
String str1 = "";
str1 += "package org.drools.compiler \n" +
"declare org.drools.ClassA \n" +
" name : String \n" +
"end \n";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( str1.getBytes() ),
ResourceType.DRL );
kbuilder.add( ResourceFactory.newByteArrayResource( str1.getBytes() ),
ResourceType.DRL );
if ( kbuilder.hasErrors() ) {
fail( kbuilder.getErrors().toString() );
}
}
示例3
@Test
public void testParallelBuild() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
StringBuilder sb = new StringBuilder();
int rc = 0;
for (Class<?> c : classes) {
sb.append("rule \"rule_" + rc++ + "\"\n");
sb.append(" when\n");
sb.append(" a : " + c.getName() + "()\n");
sb.append(" then\n");
sb.append(" System.out.print(\".\");\n");
sb.append("end\n");
sb.append("\n");
}
kbuilder.add(ResourceFactory.newByteArrayResource(sb.toString().getBytes(StandardCharsets.UTF_8)), ResourceType.DRL);
}
示例4
protected KieSession getSessionFromString( String drlString) {
KnowledgeBuilder kBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
try {
System.setProperty("drools.negatable", "on");
kBuilder.add(ResourceFactory.newByteArrayResource(drlString.getBytes()),
ResourceType.DRL);
if (kBuilder.hasErrors()) {
System.err.println(kBuilder.getErrors());
fail();
}
} finally {
System.setProperty("drools.negatable", "off");
}
InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase( );
kBase.addPackages( kBuilder.getKnowledgePackages() );
KieSessionConfiguration ksConf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
((SessionConfiguration) ksConf).setBeliefSystemType( BeliefSystemType.JTMS );
KieSession kSession = kBase.newKieSession( ksConf, null );
return kSession;
}
示例5
protected KieSession getSessionFromFile( String ruleFile ) {
KnowledgeBuilder kBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kBuilder.add( ResourceFactory.newClassPathResource( ruleFile, getClass() ),
ResourceType.DRL );
if ( kBuilder.hasErrors() ) {
System.err.println( kBuilder.getErrors() );
fail();
}
InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase( );
kBase.addPackages( kBuilder.getKnowledgePackages() );
KieSessionConfiguration ksConf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
((SessionConfiguration) ksConf).setBeliefSystemType( BeliefSystemType.JTMS );
KieSession kSession = kBase.newKieSession( ksConf, null );
return kSession;
}
示例6
@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");
}
示例7
public KieBase call() throws Exception {
final Reader source = new InputStreamReader(ParallelCompilationTest.class.getResourceAsStream(DRL_FILE));
final Properties props = new Properties();
props.setProperty("drools.dialect.java.compiler", "JANINO");
props.setProperty("drools.dialect.java.compiler.lnglevel", "1.6");
KieBase result;
final KnowledgeBuilderConfiguration configuration = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(props, ParallelCompilationTest.class.getClass().getClassLoader());
final KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder(configuration);
Thread.sleep(Math.round(Math.random()*250));
Resource newReaderResource = ResourceFactory.newReaderResource(source);
//synchronized (RuleUtil.class)
{
builder.add(newReaderResource, ResourceType.DRL);
}
result = builder.newKieBase();
return result;
}
示例8
public KieSession genSession(String[] sources, int numerrors) {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
for (String source : sources)
kbuilder.add( ResourceFactory.newClassPathResource(source, getClass()), ResourceType.DRL );
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if ( kbuilder.getErrors().size() > 0 ) {
for ( KnowledgeBuilderError error : kbuilder.getErrors() ) {
System.err.println( error );
}
}
assertEquals(numerrors, errors.size() );
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages( kbuilder.getKnowledgePackages() );
return createKnowledgeSession(kbase);
}
示例9
@Test
public void testGetListeners() {
// JBRULES-3378
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
if (kbuilder.hasErrors()) {
throw new RuntimeException(kbuilder.getErrors().toString());
}
KieSession ksession = kbuilder.newKieBase().newKieSession();
ksession.getAgendaEventListeners();
ksession.getProcessEventListeners();
ksession.getRuleRuntimeEventListeners();
ksession.dispose();
}
示例10
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();
}
示例11
@Test
public void testOutOfScopeNamedConsequencesWithOr1() {
String str = "import org.drools.compiler.Cheese;\n " +
"global java.util.List results;\n" +
"\n" +
"rule R1 when\n" +
" ( $a: Cheese ( type == \"stilton\" )\n" +
" or\n" +
" $b: Cheese ( type == \"gorgonzola\" ) do[t1] )\n" +
" $c: Cheese ( type == \"cheddar\" )\n" +
"then\n" +
" results.add( $c.getType() );\n" +
"then[t1]\n" +
" results.add( $a.getType() );\n" +
"end\n";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource(str.getBytes()), ResourceType.DRL );
assertTrue(kbuilder.hasErrors());
}
示例12
@Test
public void testPRBindingOnNonexistingAttributes(){
final String str =
"package org.drools.test;\n" +
"\n" +
"import " + Klass4.class.getCanonicalName() + ";\n" +
"\n" +
"global java.util.List list;\n" +
"\n" +
"rule \"Get Person name\"\n" +
"salience 1\n" +
"when\n" +
" $x : Klass4( $name: nonexistingName )\n" +
"then\n" +
" list.add( $fullName );\n" +
"end\n";
final KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
knowledgeBuilder.add( new ByteArrayResource( str.getBytes() ), ResourceType.DRL );
System.out.println( knowledgeBuilder.getErrors() );
assertTrue( knowledgeBuilder.hasErrors() );
}
示例13
@Test
public void testWrongConsequenceName() {
String str = "import org.drools.compiler.Cheese;\n " +
"global java.util.List results;\n" +
"\n" +
"rule R1 dialect \"mvel\" when\n" +
" $a: Cheese ( type == \"stilton\" )\n" +
" $b: Cheese ( type == \"cheddar\" )\n" +
" if ( 200 < 400 ) break[t2]\n" +
"then\n" +
" results.add( $b.getType() );\n" +
"then[t1]\n" +
" results.add( $a.getType().toUpperCase() );\n" +
"end\n";
KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
builder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL);
assertTrue ( builder.hasErrors() );
}
示例14
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;
}
示例15
@Test
public void testNewClassPathResource() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
// newClassPathResource without specifying encoding
kbuilder.add( ResourceFactory.newClassPathResource( "test_I18nPerson_utf8_forTestNewClassPathResource.drl", getClass() ),
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 );
I18nPerson i18nPerson = new I18nPerson();
i18nPerson.set名称("山田花子");
ksession.insert(i18nPerson);
ksession.fireAllRules();
assertTrue(list.contains("名称は山田花子です"));
ksession.dispose();
}
示例16
@Test
public void testAddPackageSingle() throws Exception {
String rule = "package org.drools.compiler.test\n" +
"import org.drools.compiler.StockTick\n" +
"rule R1 when\n" +
" StockTick()\n" +
"then\n" +
"end\n";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newByteArrayResource(rule.getBytes()), ResourceType.DRL);
assertFalse(kbuilder.hasErrors(), kbuilder.getErrors().toString());
Collection<KiePackage> kpkgs = kbuilder.getKnowledgePackages();
assertEquals( 2, kpkgs.size() );
KiePackage kpkg = kpkgs.iterator().next();
assertEquals( 1, kpkg.getRules().size() );
}
示例17
@Test
public void testSegmentMemoryPrototype() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource(DRL.getBytes()),
ResourceType.DRL );
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages( kbuilder.getKnowledgePackages() );
KieSession ksession = kbase.newKieSession();
try {
checkKieSession(ksession);
} finally {
ksession.dispose();
}
// Create a 2nd KieSession (that will use segment memory prototype) and check that it works as the former one
KieSession ksession2 = kbase.newKieSession();
try {
checkKieSession(ksession2);
} finally {
ksession2.dispose();
}
}
示例18
@Test
public void testClassNameClashing() {
String str = "";
str += "package org.kie \n" +
"declare org.kie.Character \n" +
" name : String \n" +
"end \n";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
ResourceType.DRL );
if ( kbuilder.hasErrors() ) {
fail( kbuilder.getErrors().toString() );
}
}
示例19
@Test
public void testNestedEnum() {
final String str = ""+
"package org.drools.compiler.test \n" +
"import " + Triangle.class.getCanonicalName() + "\n" +
"global java.util.List list \n" +
"rule \"show\" \n" +
"when \n" +
" $t: Triangle(t == Triangle.Type.ACUTE) \n" +
"then \n" +
" list.add($t.getT()); \n" +
"end \n";
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newByteArrayResource(str.getBytes()), ResourceType.DRL);
if (kbuilder.hasErrors()) {
fail(kbuilder.getErrors().toString());
}
final InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages(kbuilder.getKnowledgePackages());
final KieSession ksession = createKnowledgeSession(kbase);
final List list = new ArrayList();
ksession.setGlobal("list", list);
final Triangle t = new Triangle(Triangle.Type.ACUTE);
ksession.insert(t);
ksession.fireAllRules();
assertEquals(Triangle.Type.ACUTE, list.get(0));
}
示例20
@Test
public void testMultipleInheritanceWithPosition1() 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( "field1", sw.getFields().get(1).getName() );
assertEquals( "mfield1", sw.getFields().get(2).getName() );
assertEquals( "field2", sw.getFields().get(3).getName() );
assertEquals( "mfield0", sw.getFields().get(4).getName() );
}
示例21
public KnowledgeBuilder newKnowledgeBuilder(KieBase kbase) {
if ( kbase != null ) {
return new KnowledgeBuilderImpl( (InternalKnowledgeBase)kbase );
} else {
return new KnowledgeBuilderImpl();
}
}
示例22
public KnowledgeBuilder newKnowledgeBuilder(KieBase kbase,
KnowledgeBuilderConfiguration conf) {
if ( kbase != null ) {
return new KnowledgeBuilderImpl( (InternalKnowledgeBase)kbase, (KnowledgeBuilderConfigurationImpl) conf );
} else {
return new KnowledgeBuilderImpl((KnowledgeBuilderConfigurationImpl) conf );
}
}
示例23
@Test
public void testMultipleInheritanceWithPosition5() throws Exception {
// DROOLS-249
String drl =
"package org.drools.test\n" +
"declare trait PosTrait\n" +
"@propertyReactive\n" +
" field0 : int = 100 @position(2)\n" +
" field1 : int = 101 @position(1)\n" +
" field2 : int = 102 @position(8)\n" +
"end\n" +
"\n" +
"declare trait MultiInhPosTrait extends PosTrait\n" +
"@propertyReactive\n" +
" mfield0 : int = 200 @position(7)\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( "field1", sw.getFields().get(0).getName() );
assertEquals( "field0", sw.getFields().get(1).getName() );
assertEquals( "mfield1", sw.getFields().get(2).getName() );
assertEquals( "mfield0", sw.getFields().get(3).getName() );
assertEquals( "field2", sw.getFields().get(4).getName() );
}
示例24
@Test
public void testMultipleInheritanceWithPosition4() throws Exception {
// DROOLS-249
String drl =
"package org.drools.test\n" +
"declare trait PosTrait\n" +
"@propertyReactive\n" +
" field0 : int = 100 @position(1)\n" +
" field1 : int = 101 @position(0)\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( "field1", sw.getFields().get(0).getName() );
assertEquals( "field2", sw.getFields().get(1).getName() );
assertEquals( "mfield0", sw.getFields().get(2).getName() );
assertEquals( "field0", sw.getFields().get(3).getName() );
assertEquals( "mfield1", sw.getFields().get(4).getName() );
}
示例25
@Test
public void testTokensInString(){
//should query antldr DFA63 class but don't know how
final String [] operators = {"," ,"=" , "|=", "*"};
//test various in consequence
final String strBegin = "" +
"package org.kie \n" +
"import org.drools.compiler.Cheese \n" +
"dialect \"mvel\"\n" +
"rule rule1 \n" +
"when \n" +
"$c:Cheese(type==\"swiss\") \n" +
"then \n"+
"modify($c){ type = \"swiss";
final String strEnd = "good\"};\n" + "end\n";
final StringBuilder failures = new StringBuilder();
for (final String oper : operators) {
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
final String rule = strBegin + oper + strEnd;
System.out.print(rule);
kbuilder.add(ResourceFactory.newByteArrayResource(rule.getBytes()), ResourceType.DRL);
if (kbuilder.hasErrors()) {
failures.append(kbuilder.getErrors().toString());
}
}
final String failStr = failures.toString();
if (failStr.length() > 0) {
fail(failStr);
}
}
示例26
@Override
public void deploy(EngineDeployment deployment, Map<String, Object> deploymentSettings) {
LOGGER.debug("Processing rules deployment {}", deployment.getName());
KnowledgeBuilder knowledgeBuilder = null;
DeploymentManager deploymentManager = CommandContextUtil.getProcessEngineConfiguration().getDeploymentManager();
Map<String, EngineResource> resources = deployment.getResources();
for (String resourceName : resources.keySet()) {
if (resourceName.endsWith(".drl")) { // is only parsing .drls sufficient? what about other rule dsl's? (@see ResourceType)
LOGGER.info("Processing rules resource {}", resourceName);
if (knowledgeBuilder == null) {
knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
}
EngineResource resourceEntity = resources.get(resourceName);
byte[] resourceBytes = resourceEntity.getBytes();
Resource droolsResource = ResourceFactory.newByteArrayResource(resourceBytes);
knowledgeBuilder.add(droolsResource, ResourceType.DRL);
}
}
if (knowledgeBuilder != null) {
KieBase kieBase = knowledgeBuilder.newKieBase();
deploymentManager.getKnowledgeBaseCache().add(deployment.getId(), kieBase);
}
}
示例27
protected void testInvalidDrl(final String drl) {
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newByteArrayResource(drl.getBytes()), ResourceType.DRL);
if (kbuilder.hasErrors()) {
logger.warn(kbuilder.getErrors().toString());
}
assertTrue(kbuilder.hasErrors());
}
示例28
@ParameterizedLogicalTraitTest
public void testShadowAlias(VirtualPropertyMode mode) {
KnowledgeBuilder kbuilderImpl = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilderImpl.add(
ResourceFactory.newClassPathResource("org/drools/compiler/factmodel/traits/testTraitedAliasing.drl"),
ResourceType.DRL);
if (kbuilderImpl.hasErrors()) {
fail(kbuilderImpl.getErrors().toString());
}
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages(kbuilderImpl.getKnowledgePackages());
TraitFactory.setMode(mode, kbase);
KieSession ks = kbase.newKieSession();
ArrayList list = new ArrayList();
ks.setGlobal("list", list);
ks.fireAllRules();
for (Object o : ks.getObjects()) {
System.out.println(o);
}
try {
ks = SerializationHelper.getSerialisedStatefulKnowledgeSession(ks, true);
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
System.out.println(list);
assertFalse(list.contains(false));
assertEquals(8, list.size());
}
示例29
@Test
public void testTypeDeclarationWithInnerClasses() {
// DROOLS-150
String str = "";
str += "package org.drools.compiler;\n" +
"\n" +
"import org.drools.compiler.compiler.TypeDeclarationTest.EventBar.*;\n" +
"" +
"declare Foo\n" +
" @role( event )\n" +
"end\n" +
"" +
"rule R when Foo() then end";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
ResourceType.DRL );
System.err.println( kbuilder.getErrors() );
assertFalse( kbuilder.hasErrors() );
InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();
kBase.addPackages( kbuilder.getKnowledgePackages() );
KieSession knowledgeSession = kBase.newKieSession();
FactHandle handle = knowledgeSession.insert( new EventBar.Foo() );
assertTrue( handle instanceof EventFactHandle );
}
示例30
@Test
public void testPackageImports() {
String str = "";
str += "package org.kie \n";
str += "dialect \"mvel\"\n";
str += "import org.acme.healthcare.* \n";
str += "import org.acme.insurance.* \n";
str += "import org.acme.sensors.SensorReading \n";
str += "rule rule1 \n";
str += " when \n";
str += " eval(true)\n";
str += " then \n";
str += " insert(new Claim()); // from org.acme.healthcare.* \n";
str += " insert(new Policy()); // from org.acme.insurance.* \n";
str += " insert(new SensorReading()); // from org.acme.sensor.SensorReading \n";
str += "end\n";
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newByteArrayResource(str.getBytes()), ResourceType.DRL);
if (kbuilder.hasErrors()) {
throw new RuntimeException(kbuilder.getErrors().toString());
}
final InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages(kbuilder.getKnowledgePackages());
final KieSession ksession = createKnowledgeSession(kbase);
final int result = ksession.fireAllRules();
assertEquals(1, result);
final Collection<? extends Object> insertedObjects = ksession.getObjects();
assertEquals(3, insertedObjects.size());
}