Integrating Drool 6 work bench with Java Applicati

2019-06-12 21:25发布

I have a drool 6 work bench. I am trying to read the rules from work bench and execute them in stand alone java application. Is there any way to download the drl file using URL from the workbench. Please write the code as well as I am new to drools

2条回答
Melony?
2楼-- · 2019-06-12 22:16

your pom.xml should have these dependencies

<dependency>
  <groupId>org.drools</groupId>
  <artifactId>drools-compiler</artifactId>
  <version>6.0.0.Final</version>
   <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.drools</groupId>
  <artifactId>drools-core</artifactId>
  <version>6.0.0.Final</version>
   <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.kie</groupId>
  <artifactId>kie-internal</artifactId>
  <version>6.0.0.Final</version>
   <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.kie</groupId>
  <artifactId>kie-api</artifactId>
  <version>6.0.0.Final</version>
   <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.drools</groupId>
  <artifactId>drools-templates</artifactId>
  <version>6.0.0.Final</version>
   <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.mvel</groupId>
  <artifactId>mvel2</artifactId>
  <version>2.1.7.Final</version>
   <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.antlr</groupId>
  <artifactId>antlr-runtime</artifactId>
  <version>3.5</version>
   <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>3.9</version>
   <scope>provided</scope>
</dependency>


<dependency>
  <groupId>org.drools</groupId>
  <artifactId>drools-decisiontables</artifactId>
  <version>6.0.0.Final</version>
   <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.eclipse.jdt</groupId>
  <artifactId>org.eclipse.jdt.core</artifactId>
  <version>3.7.1</version>
   <scope>provided</scope>
</dependency>

<dependency>
  <groupId>com.thoughtworks.xstream</groupId>
  <artifactId>xstream</artifactId>
  <version>1.4.3</version>
   <scope>provided</scope>
</dependency>

<dependency>
  <groupId>com.google.protobuf</groupId>
  <artifactId>protobuf-java</artifactId>
  <version>2.5.0</version>
  <scope>provided</scope>
</dependency>

or your classpath file should have these jars

drools-decisiontables-6.0.0.Final.jar
drools-core-6.0.0.Final.jar
kie-internal-6.0.0.Final.jar
kie-api-6.0.0.Final.jar

drools-templates-6.0.0.Final.jar slf4j-api-1.7.5.jar drools-compiler-6.0.0.Final.jar mvel2-2.1.7.Final.jar
antlr-runtime-3.5.jar
poi-ooxml-3.9.jar
poi-3.10-beta2.jar
commons-lang-2.4.jar
xstream-1.4.3.jar
protobuf-java-2.5.0.jar
org.eclipse.jdt.core-3.7.1.jar

查看更多
走好不送
3楼-- · 2019-06-12 22:19

First create Java application, include all drools 6 based binary dependencies. For that you can create Maven driven java application. include following dependencies in POM.xml file.. it will download all dependencies in your local maven repository.

<parent>
    <groupId>org.drools</groupId>
    <artifactId>drools-multiproject</artifactId>
    <version>6.0.1.Final</version>
</parent>
 <dependencies>      
    <!-- Internal dependencies -->
    <dependency>
        <groupId>org.kie</groupId>
        <artifactId>kie-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.kie</groupId>
        <artifactId>kie-ci</artifactId>            
    </dependency>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
    </dependency>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-decisiontables</artifactId>
    </dependency>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-templates</artifactId>
    </dependency>

    <!-- Needed for logging -->
    <dependency>
        <groupId>com.thoughtworks.xstream</groupId>
        <artifactId>xstream</artifactId>
    </dependency>

    <!-- Logging -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>    
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
    </dependency>
    <dependency><!-- For example app logging: configure in src/java/resources/logback.xml -->
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
    </dependency>
</dependencies>

also specify the profile in pom.xml :

<profiles>
    <profile>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <repositories>
            <repository>
                <id>guvnor-m2-repo</id>
                <name>Drools Workbench Repository Group</name>
                <url>http://localhost:4040/kie-drools-wb-distribution-wars-6.0.1.Final-tomcat7.0/maven2/</url>
                <layout>default</layout>
                <releases>
                    <enabled>true</enabled>
                    <updatePolicy>always</updatePolicy>
                </releases>
            </repository>
        </repositories>
    </profile>
</profiles>

In main.java

public static void main(String[] args) {
    ReleaseIdImpl releaseId = new ReleaseIdImpl("groupId", "artifactId", "LATEST");

    KieServices ks = KieServices.Factory.get();

    KieContainer kieContainer = ks.newKieContainer(releaseId);

    KieScanner kScanner = ks.newKieScanner(kieContainer);
    kScanner.start(10000L);             
    Scanner scanner = new Scanner(System.in);
    while (true) {
        runRule(kieContainer);
        System.out.println("Press enter in order to run the test again....");
        scanner.nextLine();
    }
  }
   private static void runRule(KieContainer kieKontainer) {
    KieSession newKieSession = kieKontainer.newKieSession();

    //Initiate POJO on which you want to define rule like
    //BankLoan bankLoan = new BankLoan();
      //  bankLoan.setLoanAmount(10000);
       // bankLoan.setLoanPeriod(11);

      //Insert into kieSession
       newKieSession.insert(bankLoan);

    int result = newKieSession.fireAllRules();
    newKieSession.dispose();
}
查看更多
登录 后发表回答