【问题标题】:Integrating Drool 6 work bench with Java Application将 Drool 6 工作台与 Java 应用程序集成
【发布时间】:2025-12-13 07:50:01
【问题描述】:

我有一个 drool 6 工作台。我正在尝试从工作台读取规则并在独立的 Java 应用程序中执行它们。有什么方法可以使用工作台中的 URL 下载 drl 文件。请写代码以及我是流口水的新手

【问题讨论】:

    标签: jboss drools workbench


    【解决方案1】:

    你的 pom.xml 应该有这些依赖

    <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>
    

    或者你的类路径文件应该有这些 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

    【讨论】:

      【解决方案2】:

      首先创建 Java 应用程序,包括所有基于 drools 6 的二进制依赖项。为此,您可以创建 Maven 驱动的 java 应用程序。 在 POM.xml 文件中包含以下依赖项。它会将所有依赖项下载到本地 maven 存储库中。

      <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>
      

      还要在 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>
      

      在 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();
      }
      

      【讨论】:

      • 我试过这种方法。但应用程序无法找到 kie 模块。我也尝试使用直接使用 jar 文件的其他方法。但它无法触发规则。 POJO 模型在 jar 中定义,我在独立的 Java 应用程序中创建了相同的 POJO。我的方法有什么问题吗?
      • 您还可以指导我如何从工作台下载单个 drl 文件。它的网址是什么?
      • 您是否设置了工作台数据将驻留在 POM 文件中的存储库路径?????
      • 是的,它在我的远程服务器上。所以我给出了具有存储库的远程服务器的位置。
      • 你能在这里发布你的问题吗...?