[jboss-jira] [JBoss JIRA] (DROOLS-46) JavaDialectError when attaching a new KBuilder to an existing session
Edson Tirelli (JIRA)
jira-events at lists.jboss.org
Wed Feb 20 20:50:57 EST 2013
[ https://issues.jboss.org/browse/DROOLS-46?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Edson Tirelli updated DROOLS-46:
--------------------------------
Description:
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}
> 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: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list