[jboss-jira] [JBoss JIRA] (DROOLS-1647) DataSource aren't corrctly bound to executor during runUntilHalt

Mario Fusco (JIRA) issues at jboss.org
Mon Jul 3 13:43:00 EDT 2017


Mario Fusco created DROOLS-1647:
-----------------------------------

             Summary: DataSource aren't corrctly bound to executor during runUntilHalt
                 Key: DROOLS-1647
                 URL: https://issues.jboss.org/browse/DROOLS-1647
             Project: Drools
          Issue Type: Bug
          Components: core engine
            Reporter: Mario Fusco
            Assignee: Mario Fusco


DataSource aren't corrctly bound to executor during runUntilHalt causing the following test case to not complete as expected

{code}
    @Test(timeout = 10000L)
    public void testReactiveOnUnitCreatingDataSource() throws Exception {
        String drl1 =
                "package org.drools.compiler.integrationtests\n" +
                "unit " + getCanonicalSimpleName( AdultUnitCreatingDataSource.class ) + "\n" +
                "import " + Person.class.getCanonicalName() + "\n" +
                "import " + ReactiveAdultUnit.class.getCanonicalName() + "\n" +
                "rule Adult when\n" +
                "    Person(age >= 18, $name : name) from persons\n" +
                "then\n" +
                "    System.out.println($name + \" is adult\");" +
                "    list.add($name);\n" +
                "end";

        KieBase kbase = new KieHelper().addContent( drl1, ResourceType.DRL ).build();
        RuleUnitExecutor executor = RuleUnitExecutor.create().bind( kbase );

        DebugList<String> list = new DebugList<>();
        executor.bindVariable( "list", list );

        AdultUnitCreatingDataSource adultUnit = new AdultUnitCreatingDataSource(list);
        adultUnit.insertPerson( new Person( "Mario", 42 ) );

        Semaphore ready = new Semaphore( 0, true);
        list.onItemAdded = ( l -> ready.release() );

        new Thread( () -> executor.runUntilHalt( adultUnit ) ).start();

        ready.acquire();

        assertEquals( 1, list.size() );
        assertEquals( "Mario", list.get(0) );
        list.clear();

        list.onItemAdded = ( l -> ready.release() );

        adultUnit.insertPerson( new Person( "Sofia", 4 ) );
        adultUnit.insertPerson( new Person( "Marilena", 44 ) );

        ready.acquire();

        assertEquals( 1, list.size() );
        assertEquals( "Marilena", list.get(0) );

        executor.halt();
    }

    public static class AdultUnitCreatingDataSource implements RuleUnit {
        private final DataSource<Person> persons;
        private final List<String> list;

        public AdultUnitCreatingDataSource( List<String> list ) {
            this.persons = DataSource.create();
            this.list = list;
        }

        public DataSource<Person> getPersons() {
            return persons;
        }

        public List<String> getList() {
            return list;
        }

        public void insertPerson(Person person) {
            persons.insert( person );
        }
    }
{code}




--
This message was sent by Atlassian JIRA
(v7.2.3#72005)


More information about the jboss-jira mailing list