[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