]
Edson Tirelli resolved DROOLS-46.
---------------------------------
Resolution: Done
Fixed in 5.3.x, 5.4.x, 5.5.x and 5.6
JavaDialectError when attaching a new KBuilder to an existing
session
---------------------------------------------------------------------
Key: DROOLS-46
URL:
https://issues.jboss.org/browse/DROOLS-46
Project: Drools
Issue Type: Bug
Security Level: Public(Everyone can see)
Affects Versions: 5.5
Reporter: Edson Tirelli
Assignee: Edson Tirelli
Fix For: 5.6
Stack trace:
{code}
java.lang.RuntimeException: [JavaDialectError message='PackageStore was unable to
read resourceName='java/lang.class'']
[JavaDialectError message='PackageStore was unable to read
resourceName='java/lang/Object.class'']
[JavaDialectError message='PackageStore was unable to read
resourceName='java/lang/package-info.class'']
...
{code}
Test case:
{code:title=TestCase.java|borderStype=solid}
@Test
public void testDynamicRulesWithTypeDeclarations() {
String type = "package com.sample\n" +
"declare type Foo\n" +
" id : int\n" +
"end\n";
String r1 = "package com.sample\n" +
"rule R1 when\n" +
" not Foo()\n" +
"then\n" +
" insert( new Foo(1) );\n" +
"end\n";
String r2 = "package com.sample\n" +
"rule R2 when\n" +
" $f : Foo()\n" +
"then\n" +
" $f.setId( 2 );\n" +
"end\n";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( type.getBytes() ),
ResourceType.DRL );
assertFalse( kbuilder.getErrors().toString(), kbuilder.hasErrors() );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
AgendaEventListener ael = mock( AgendaEventListener.class );
ksession.addEventListener( ael );
ksession.fireAllRules();
verify( ael, never() ).afterActivationFired( any( AfterActivationFiredEvent.class
) );
kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder( kbase );
kbuilder.add( ResourceFactory.newByteArrayResource( r1.getBytes() ),
ResourceType.DRL );
assertFalse( kbuilder.getErrors().toString(), kbuilder.hasErrors() );
ksession.fireAllRules();
ArgumentCaptor<AfterActivationFiredEvent> capt = ArgumentCaptor.forClass(
AfterActivationFiredEvent.class );
verify( ael, times(1) ).afterActivationFired( capt.capture() );
assertThat( "R1", is(
capt.getValue().getActivation().getRule().getName() ) );
kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder( kbase );
kbuilder.add( ResourceFactory.newByteArrayResource( r2.getBytes() ),
ResourceType.DRL );
assertFalse( kbuilder.getErrors().toString(), kbuilder.hasErrors() );
ksession.fireAllRules();
verify( ael, times(2) ).afterActivationFired( capt.capture() );
assertThat( "R2", is( capt.getAllValues().get( 2
).getActivation().getRule().getName() ) );
ksession.dispose();
}
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: