web-dev-qa-db-ja.com

Drools / KIEWorkbenchアーティファクトをリポジトリから直接ロードする

まったく新しいKIEワークベンチ(以前はGuvnorと呼ばれていました)と新しいMavenベースのアーティファクトを使用してDrools6に切り替えようとしています。

次に、2番目の画像(「デプロイメント」)の このブログ投稿 で説明されているシステムを使用したいと思います:ワークベンチリポジトリからHTTP経由でルールをロードします(点線の矢印、HTTPから左を直接アプリケーションに)。

問題は、アーティファクトをKieServices/KieModuleオブジェクトにロードする方法がわからないことです。私は基本的にMavenを使用したくありません。また、Mavenのsettings.xmlへのパスをJavaパラメーターとしてグローバルに提供できないため、このオプションはありません。

同様の問題は これ だと思います。そこに述べたように、私もURLリソースをロードしようとしましたが、問題は、システムが、指定されたURL(http://localhost:8080/kie-drools/maven2/.../-1.0.0.jar)がどのようなResourceTypeであるかを判別できないことであるようです。はい、認証なしで、ブラウザから直接リポジトリから.jarにアクセスできます。

これを行う方法のアイデアやチュートリアルはありますか?

私のテストコード:

public static void main(String[] args) {
    KieServices ks = KieServices.Factory.get();
    KieRepository repo = ks.getRepository();

    String url = "http://localhost:8080/kie-drools/maven2/de/test/test/1.0.0/test-1.0.0.jar";

    Resource urlResource = ks.getResources().newUrlResource(url);
    KieModule kModule = repo.addKieModule(urlResource); // this already fails
}

エラー:

Exception in thread "main" Java.lang.RuntimeException: Unable to fetch module from resource :[UrlResource path='http://localhost:8080/kie-drools/maven2/de/itm/Herma400/1.0.1/Herma400-1.0.1.jar']
    at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.Java:205)
    at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.addKieModule(KieRepositoryImpl.Java:161)
    at kieTest.MainKieTest.main(MainKieTest.Java:24)
Caused by: Java.lang.NullPointerException
    at org.drools.compiler.kie.builder.impl.ClasspathKieProject.getPomProperties(ClasspathKieProject.Java:197)
    at org.drools.compiler.kie.builder.impl.ClasspathKieProject.fetchKModule(ClasspathKieProject.Java:148)
    at org.drools.compiler.kie.builder.impl.ClasspathKieProject.fetchKModule(ClasspathKieProject.Java:109)
    at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.Java:190)
    ... 2 more

前もって感謝します!

7

私はついにこれを解決することができました。以下は、HTTPを介してKIEリポジトリからDroolsアーティファクトをロードし、ルールを実行する実際の例です。

package kieTest;

import Java.util.Scanner;

import org.drools.compiler.kproject.ReleaseIdImpl;
import org.kie.api.KieServices;
import org.kie.api.builder.KieScanner;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.StatelessKieSession;

public class MainKieTest {

    public static void main(String[] args) {

        // works even without -SNAPSHOT versions
        String url = "http://localhost:8080/kie-drools/maven2/de/test/Test/1.2.3/Test-1.2.3.jar";

        // make sure you use "LATEST" here!
        ReleaseIdImpl releaseId = new ReleaseIdImpl("de.test", "Test", "LATEST");

        KieServices ks = KieServices.Factory.get();

        ks.getResources().newUrlResource(url);

        KieContainer kieContainer = ks.newKieContainer(releaseId);

        // check every 5 seconds if there is a new version at the URL
        KieScanner kieScanner = ks.newKieScanner(kieContainer);
        kieScanner.start(5000L);
        // alternatively:
        // kieScanner.scanNow();

        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) {
        StatelessKieSession kSession = kieKontainer.newStatelessKieSession("testSession");
        kSession.setGlobal("out", System.out);
        kSession.execute("testRuleAgain");
    }
}

解決策を検索するとき、私は次のリンクが役に立ちました:

SOを最初の検索結果として取得するときに誰かがこれが役立つことを願っています;-)

10

上記のコードはmavenとkie-ciを使用しています。作成したURLResourceは使用されません。

これが実用的なサンプルです:

    String url = "http://localhost:8080/kie-drools-wb/maven2/groupId/artifactId/1.0/artifactId-1.0.jar";

    KieServices ks = KieServices.Factory.get();
    KieRepository kr = ks.getRepository();
    UrlResource urlResource = (UrlResource) ks.getResources()
            .newUrlResource(url);
    urlResource.setUsername("admin");
    urlResource.setPassword("password");
    urlResource.setBasicAuthentication("enabled");
    InputStream is = urlResource.getInputStream();
    KieModule kModule = kr.addKieModule(ks.getResources()
            .newInputStreamResource(is));

    KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());

    kContainer.newStatelessKieSession();

これをKieScannerで機能させるには、まだ少し調整する必要があることに注意してください。

7
jps

手順は次のとおりです。すべての手順は必須です

  • あなたのpomにkie-clie依存関係を追加します

    <dependency>
        <groupId>org.kie</groupId>
        <artifactId>kie-ci</artifactId>
        <version>6.2.0.Final</version>
    </dependency>
    
  • KIEワークベンチのMavenリポジトリをpom.xmlに追加します

    <repository>
        <id>guvnor-m2-repo</id>
        <name>Guvnor M2 Repo</name>
        <url>http://localhost:8080/drools/maven2wb/</url>
    </repository>
    
  • pom.xmlに依存関係を追加します

    <dependency>
        <groupId>groupId</groupId>
        <artifactId>artifactId</artifactId>
        <version>LATEST</version>
    </dependency>
    
  • リポジトリの資格情報をsettings.xmlに入力します

    <server>
        <id>guvnor-m2-repo</id>
        <username>admin</username>
        <password>@dmin</password>
    </server>
    
  • Javaコード

    KieServices ks = KieServices.Factory.get();
    ReleaseId releaseId = ks.newReleaseId("groupID", "artifactID", "LATEST");
    KieContainer kieContainer = ks.newKieContainer(releaseId);
    KieSession kieSession = kieContainer.newKieSession();
    kieSession.insert(object);
    kieSession.fireAllRules();
    
2
craftsmannadeem