Hi all,

we are working on a new  FRuleEngineI implementation I would like to run all 
the jena-core tests on our implementation.
To do this, i have added a dependency in the jena-core test module :

                <dependency>
                        <groupId>org.apache.jena</groupId>
                        <artifactId>jena-core</artifactId>
                        <version>2.11.2-SNAPSHOT</version>
                        <type>test-jar</type>
                        <scope>test</scope>
                </dependency>

and i have configured the following test suite in my project. This test suite 
register our engine implementation and add the
 com.hp.hpl.jena.reasoner.test.TestPackage test suite.

import junit.framework.TestSuite;
import com.hp.hpl.jena.reasoner.rulesys.impl.FRuleEngineIFactory;

public class EngineTestPackage extends TestSuite {
    public static TestSuite suite() {
        // use my engine implementation JENA-679 
        FRuleEngineIFactory.setInstance(new MyEngineFactory());
        return new EngineTestPackage();
    }

    private EngineTestPackage() {
        super("myEngine");
        addTest("reasoners", com.hp.hpl.jena.reasoner.test.TestPackage.suite());
    }

    private void addTest(String name, TestSuite tc) {
        tc.setName(name);
        addTest(tc);
    }
}

Then  run the tests using maven 
$ mvn test

The principle works but a lot of tests are failing because of the following 
exception :
com.hp.hpl.jena.shared.NotFoundException: Not found: 
file:testing/reasoners/owl/tbox.owl
        at 
com.hp.hpl.jena.util.FileManager.readModelWorker(FileManager.java:423)
        at 
com.hp.hpl.jena.util.FileManager.loadModelWorker(FileManager.java:333)
        at com.hp.hpl.jena.util.FileManager.loadModel(FileManager.java:285)
        at 
com.hp.hpl.jena.reasoner.rulesys.test.OWLConsistencyTest.testResults(OWLConsistencyTest.java:119)
        at 
com.hp.hpl.jena.reasoner.rulesys.test.OWLConsistencyTest.runTest(OWLConsistencyTest.java:137)

The problem is that the tests resources are in a testing folder in the 
jena-core module. So these resources are not included by maven in the test jar.

Is it possible to follow the maven convention and put all the jena-core test 
resources in the src/test/resources folder ?

Regards 

Seb 

: : . . . . . . . . . . . . . . . . . . . . . . . . . . : :
Sébastien Boulet
Lead développeur

intactile DESIGN
: : Création d’interfaces subtiles : :
+33 (0)4 67 52 88 61
+33 (0)6 89 34 24 12
20 rue du Carré du Roi
34 000 Montpellier, France
www.intactile.com

Le 18 avr. 2014 à 16:57, Sébastien Boulet <[email protected]> a écrit :

> It is ok.
> 
> Thanks Dave
> 
> : : . . . . . . . . . . . . . . . . . . . . . . . . . . : :
> Sébastien Boulet
> Lead développeur
> 
> intactile DESIGN
> : : Création d’interfaces subtiles : :
> +33 (0)4 67 52 88 61
> +33 (0)6 89 34 24 12
> 20 rue du Carré du Roi
> 34 000 Montpellier, France
> www.intactile.com
> 
> Le 18 avr. 2014 à 16:17, Dave Reynolds <[email protected]> a écrit :
> 
>> 
>> Thanks, I've committed the changes from the patch.
>> 
>> If you can confirm that they look OK to you and then close the jira.
>> 
>> Dave
>> 
>> On 18/04/14 14:15, Sébastien Boulet wrote:
>>> Ok,
>>> 
>>> i have just proposed a patch with these modifications.
>>> 
>>> https://issues.apache.org/jira/browse/JENA-679
>>> 
>>> Seb
>>> 
>>> 
>>> : : . . . . . . . . . . . . . . . . . . . . . . . . . . : :
>>> Sébastien Boulet
>>> Lead développeur
>>> 
>>> intactile DESIGN
>>> : : Création d’interfaces subtiles : :
>>> +33 (0)4 67 52 88 61
>>> +33 (0)6 89 34 24 12
>>> 20 rue du Carré du Roi
>>> 34 000 Montpellier, France
>>> www.intactile.com
>>> 
>>> Le 15 avr. 2014 à 19:07, Dave Reynolds <[email protected]> a écrit :
>>> 
>>>> 
>>>> On 15/04/14 14:55, Sébastien Boulet wrote:
>>>>> Hi all,
>>>>> 
>>>>> i would like to use an alternative implementation of the FRuleEngineI. My 
>>>>> problem is that the FRuleEngineI is instantiated directly from two 
>>>>> locations :
>>>>> in com.hp.hpl.jena.reasoner.rulesys.FBRuleInfGraph
>>>>>    @Override
>>>>>    protected void instantiateRuleEngine(List<Rule> rules) {
>>>>>        if (rules != null) {
>>>>>            if (useRETE) {
>>>>>                engine = new RETEEngine(this, rules);
>>>>>            } else {
>>>>>                engine = new FRuleEngine(this, rules);
>>>>>            }
>>>>>        } else {
>>>>>            if (useRETE) {
>>>>>                engine = new RETEEngine(this);
>>>>>            } else {
>>>>>                engine = new FRuleEngine(this);
>>>>>            }
>>>>>        }
>>>>>    }
>>>>> and in com.hp.hpl.jena.reasoner.rulesys.RETERuleInfGraph
>>>>> 
>>>>>    @Override
>>>>>    protected void instantiateRuleEngine(List<Rule> rules) {
>>>>>        if (rules != null) {
>>>>>            engine = new RETEEngine(this, rules);
>>>>>        } else {
>>>>>            engine = new RETEEngine(this);
>>>>>        }
>>>>>    }
>>>>> 
>>>>> For now, if i want to use another FRuleEngineI, i have to sub class 
>>>>> theses classes for instantiating my own FRuleEngineI implementation. And 
>>>>> since theses classes (FBRuleInfGraph, RETERuleInfGraph) are instantiated 
>>>>> directly by others ones (GenericRuleReasoner, FBRuleReasoner, 
>>>>> OWLFBRuleReasoner…), i will have to sub class a lot of existing classes.
>>>>> 
>>>>> So my question is, is there an easiest way to do this ?
>>>> 
>>>> No. It's not be a usecase that's come up before. People have sometimes 
>>>> done custom versions of FBRuleInfGraph or created new sorts of InfGraph 
>>>> but I'm not aware of anyone previously replacing the forward engine across 
>>>> all existing InfGraph types.
>>>> 
>>>>> If not, i was thinking of introducing a singleton FRuleEngineIFactory (I 
>>>>> kept the useRETE  flag for backward compatibility.) :
>>>> 
>>>> [Yeah the non-RETE engine and the useRETE flag ought to be removed 
>>>> sometime but for now it's in there.]
>>>> 
>>>>> public class FRuleEngineIFactory {
>>>>>    private static FRuleEngineIFactory instance;
>>>> 
>>>> [needs to be initialized :)]
>>>> 
>>>>>    public static void setInstance(FRuleEngineIFactory instance) { 
>>>>> FRuleEngineIFactory.instance = instance; }
>>>>>    public FRuleEngineIFactory getInstance() { return instance; }
>>>>> 
>>>>>    public FRuleEngineI createFRuleEngineI(ForwardRuleInfGraphI parent, 
>>>>> List<Rule> rules, boolean useRETE) {
>>>>>        FRuleEngineI engine;
>>>>>        if (rules != null) {
>>>>>            if (useRETE) {
>>>>>                engine = new RETEEngine(parent, rules);
>>>>>            } else {
>>>>>                engine = new FRuleEngine(parent, rules);
>>>>>            }
>>>>>        } else {
>>>>>            if (useRETE) {
>>>>>                engine = new RETEEngine(parent);
>>>>>            } else {
>>>>>                engine = new FRuleEngine(parent);
>>>>>            }
>>>>>        }
>>>>>        return engine;
>>>>>    }
>>>>> }
>>>>> 
>>>>> This factory might be used by
>>>>> 
>>>>> com.hp.hpl.jena.reasoner.rulesys.FBRuleInfGraph
>>>>>    @Override
>>>>>    protected void instantiateRuleEngine(List<Rule> rules) {
>>>>>        engine = 
>>>>> FRuleEngineIFactory.getInstance().createFRuleEngineI(this, rules, 
>>>>> useRETE);
>>>>>    }
>>>>> 
>>>>> and by com.hp.hpl.jena.reasoner.rulesys.RETERuleInfGraph
>>>>>    @Override
>>>>>    protected void instantiateRuleEngine(List<Rule> rules) {
>>>>>        engine = 
>>>>> FRuleEngineIFactory.getInstance().createFRuleEngineI(this, rules, true);
>>>>>    }
>>>>> 
>>>>> And i could replace the factory instance by my own instance :
>>>>> 
>>>>>        FRuleEngineIFactory.setInstance(new CustomFRuleEngineIFactory());
>>>>> 
>>>>> 
>>>>> What do you think of that ?
>>>> 
>>>> Sure. That would enable the sort of plug point you are after without 
>>>> causing knock on problems.
>>>> 
>>>> Dave
>>> 
>>> 
>> 
> 

Reply via email to