Drool 6.2 - Failed to run rule using loading kie project artifact jar in "non-maven java web project

1,241 views
Skip to first unread message

Kunal Ransing

unread,
Sep 25, 2015, 7:50:55 AM9/25/15
to Drools Usage
Hi,
We are using guvnor 5.5. We are using changeset.xml which point to resources(like http://localhost:9191/guvnor/org.drools.guvnor.Guvnor/package/com.test.transaction/LATEST) in java web project file(which only run rule). We are keeping pool of knowledge Agent so that no need to create instance for every call which take long time. When we update rule it update automatically since we added like kagent.monitorResourceChangeEvents(true);

Now same thing we need to do in Drool 6.2. which is totally different from Guvnor 5.5. 
We need to load kjar runtime from remote repository in client java web project.
I followed below step -
1. We downloaded kie-drools-wb-distribution-wars-6.2.0.Final-wildfly8.war(deployed as jboss as kie-drools-6.2.0 on wildfly). I created project  'test1' & successfully build & deployed.
2. In "Artifact Repository" I can see my project jar "test1-LATEST.jar" & even I can download it like -

   Pom.xml in test1-LATEST.jar given below- 
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.eno</groupId>
 <artifactId>test1</artifactId>
 <version>LATEST</version>
 <name>Test1</name>
 <dependencies>
   <dependency>
     <groupId>com.eno</groupId>
     <artifactId>pojo</artifactId>
     <version>09.09.15</version>
   </dependency>
 </dependencies>
 <build>
   <plugins>
     <plugin>
       <groupId>org.kie</groupId>
       <artifactId>kie-maven-plugin</artifactId>
       <version>6.2.0.Final</version>
       <extensions>true</extensions>
     </plugin>
   </plugins>
 </build>
</project>

3. Now I created simple "Client java web project(non maven project)" to use kjar. We set setting.xml & using below code but it failed.
    
    Code:
    ..............
KieServices ks = KieServices.Factory.get();
    KieRepository kr = ks.getRepository();
    System.out.println(kr.getDefaultReleaseId());
    UrlResource urlResource = (UrlResource) ks.getResources().newUrlResource(url);
    urlResource.setUsername("admin");
    urlResource.setPassword("Passw0rd");
    urlResource.setBasicAuthentication("enabled");
    InputStream is = urlResource.getInputStream();
    KieModule kModule = kr.addKieModule(ks.getResources().newInputStreamResource(is));
    System.out.println(kModule.getReleaseId());
    
    KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());
    KieScanner kieScanner = ks.newKieScanner(kContainer);
    kieScanner.start(60000L);
    KieBase kieBase = kContainer.getKieBase();
    KieSession kieSession= kieBase.newKieSession();

    Merchant merchant = new Merchant(1,true);
    kieSession.insert(merchant);
    kieSession.fireAllRules();
    kieSession.dispose();
    System.out.println(merchant.getStatus());
    ..............

    I used below jars in "java web project" :
    aether-api-1.0.0.v20140518.jar,aether-connector-basic-1.0.0.v20140518.jar
    aether-impl-1.0.0.v20140518.jar,aether-spi-1.0.0.v20140518.jar, aether-transport-file-1.0.0.v20140518.jar,
    aether-transport-http-1.0.0.v20140518.jar, aether-transport-wagon-1.0.0.v20140518.jar,
    aether-util-1.0.0.v20140518.jar, antlr-runtime-3.5.jar,commons-codec-1.4.jar, 
    drools-compiler-6.2.0.Final.jar,drools-core-6.2.0.Final.jar, kie-api-6.2.0.Final.jar,
    kie-ci-6.2.0.Final.jar, kie-internal-6.2.0.Final.jar, maven-aether-provider-3.2.2.jar,
    maven-settings-3.2.2.jar, maven-settings-builder-3.2.2.jar, mvel2-2.2.4.Final.jar,
    plexus-interpolation-1.19.jar, plexus-utils-3.0.17.jar, slf4j-api-1.7.12.jar,
    slf4j-simple-1.7.12.jar, wagon-http-2.0.jar, wagon-http-shared4-2.0.jar,wagon-provider-api-1.0.jar,
    xstream-1.4.7.jar

    settings.xml  - Added system property kie.maven.settings.custom=/home/krunal/devtool/drool6/settings.xml

         xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                         http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <server>  
     <id>kie-drools-6.2.0</id>
     <username>admin</username>
     <password>Passw0rd</password>
     <configuration>
       <wagonProvider>httpclient</wagonProvider>
       <httpConfiguration>
         <all>
           <usePreemptive>true</usePreemptive>
         </all>
       </httpConfiguration>
     </configuration>
   </server>
   <profiles>
       <profile>
           <id>profile-1</id>
           <activation>
               <activeByDefault>true</activeByDefault>
           </activation>
           <repositories>
               <repository>
                   <id>kie-drools-6.2.0</id>
                   <name>Drools workbench</name>
                   <url>http://localhost:8081/kie-drools-6.2.0/maven2</url>
               </repository>
           </repositories>
       </profile>
   </profiles>
</settings>


 ## We got following error when our "Client java web project"(non maven project) on wildfly:

16:40:22,330 INFO  [org.drools.compiler.kie.builder.impl.KieRepositoryImpl] (default task-67) KieModule was added: MemoryKieModule[releaseId=com.eno:test1:LATEST]
16:40:22,331 INFO  [stdout] (default task-67) com.eno:test1:LATEST
16:40:22,386 ERROR [stderr] (default task-67) java.lang.NullPointerException
16:40:22,386 ERROR [stderr] (default task-67) at org.kie.scanner.Aether.newRepositorySystemSession(Aether.java:100)
16:40:22,387 ERROR [stderr] (default task-67) at org.kie.scanner.Aether.<init>(Aether.java:66)
16:40:22,387 ERROR [stderr] (default task-67) at org.kie.scanner.Aether.<init>(Aether.java:47)
16:40:22,387 ERROR [stderr] (default task-67) at org.kie.scanner.Aether.getAether(Aether.java:57)
16:40:22,387 ERROR [stderr] (default task-67) at org.kie.scanner.MavenRepository.getMavenRepository(MavenRepository.java:73)
16:40:22,387 ERROR [stderr] (default task-67) at org.kie.scanner.ArtifactResolver.<init>(ArtifactResolver.java:36)
16:40:22,387 ERROR [stderr] (default task-67) at org.kie.scanner.KieRepositoryScannerImpl.getArtifactResolver(KieRepositoryScannerImpl.java:85)
16:40:22,387 ERROR [stderr] (default task-67) at org.kie.scanner.KieRepositoryScannerImpl.loadArtifact(KieRepositoryScannerImpl.java:95)
16:40:22,387 ERROR [stderr] (default task-67) at org.kie.scanner.KieRepositoryScannerImpl.loadArtifact(KieRepositoryScannerImpl.java:91)
16:40:22,387 ERROR [stderr] (default task-67) at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.loadKieModuleFromMavenRepo(KieRepositoryImpl.java:113)
16:40:22,387 ERROR [stderr] (default task-67) at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:99)
16:40:22,387 ERROR [stderr] (default task-67) at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:76)
16:40:22,387 ERROR [stderr] (default task-67) at org.drools.compiler.kie.builder.impl.KieServicesImpl.newKieContainer(KieServicesImpl.java:95)
16:40:22,387 ERROR [stderr] (default task-67) at com.eno.testweb.TestDrool6.doPost(TestDrool6.java:62)
16:40:22,387 ERROR [stderr] (default task-67) at com.eno.testweb.TestDrool6.doGet(TestDrool6.java:38)

 
 ## We got following error when our "Client java web project"(non maven project)  on glassfish 4:
[#|2015-09-25T17:11:18.214+0530|SEVERE|glassfish 4.1||_ThreadID=33;_ThreadName=Thread-9;_TimeMillis=1443181278214;_LevelValue=1000;|
  java.lang.NoSuchFieldError: UTF8_CHARSET
at org.drools.core.io.impl.UrlResource.grabLastMod(UrlResource.java:336)
at org.drools.core.io.impl.UrlResource.getInputStream(UrlResource.java:160)

So please tell me what I missed ?

Michael Anstis

unread,
Sep 25, 2015, 3:53:16 PM9/25/15
to drools...@googlegroups.com

Can you try with 6.3.0.Final (release to be officially announced on Monday)? We fixed some issues relating to the initialisation of Aether from settings files.

--
You received this message because you are subscribed to the Google Groups "Drools Usage" group.
To unsubscribe from this group and stop receiving emails from it, send an email to drools-usage...@googlegroups.com.
To post to this group, send email to drools...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/drools-usage/30c64ef3-c4ca-47da-bc29-882eff1cc574%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Kunal Ransing

unread,
Sep 26, 2015, 6:04:39 AM9/26/15
to Drools Usage
Hi,

Thank you for your reply. I will try with 6.3.Final.  
I have one more question. Do we have other(programmatic) way to provide repository information instead of system property setting like kie.maven.settings.custom=/home/krunal/devtool/drool6/settings.xml  ?

Kunal Ransing

unread,
Sep 28, 2015, 7:54:14 AM9/28/15
to Drools Usage
Hi,

I tried to create rule with 6.3 Final using my pojo jar like I did for 6.2. But for Guided Rule->Config->Add Item : Here not showing name of classes from pojo.jar which uploaded in Artificat Repository(in 6.2 it is working). So not able validate my rule.

Kunal Ransing

unread,
Sep 28, 2015, 8:15:14 AM9/28/15
to Drools Usage
Hi,

Please Ignore. Solved. Ref topic : "Drools 6.3.0.CR2 Workbench not listing imports of models of dependencies"

Kunal Ransing

unread,
Sep 29, 2015, 2:19:33 AM9/29/15
to Drools Usage
Hi,

I tried with 6.3.0 Final. Since mine is simple java project, I added all drool 6.3 distribution jars. 
When try to load jar & run rule got following error:
11:12:33,954 INFO  [stdout] (default task-95) KieRepository Default ReleaseId:org.default:artifact:1.0.0-SNAPSHOT
11:12:33,955 INFO  [org.guvnor.m2repo.backend.server.M2Servlet] (default task-96) GET request received for /com/eno/Test1/LATEST/Test1-LATEST.jar
11:12:33,957 INFO  [org.guvnor.m2repo.backend.server.M2Servlet] (default task-97) GET request received for /com/eno/Test1/LATEST/Test1-LATEST.jar
11:12:33,957 INFO  [org.drools.compiler.kie.builder.impl.KieRepositoryImpl] (default task-95) Adding KieModule from resource: null
11:12:33,961 INFO  [org.drools.compiler.kie.builder.impl.KieRepositoryImpl] (default task-95) KieModule was added: MemoryKieModule[releaseId=com.eno:Test1:LATEST]
11:12:33,961 INFO  [stdout] (default task-95) KieModule ReleaseId:com.eno:Test1:LATEST
11:12:33,962 WARN  [org.kie.scanner.MavenRepository] (default task-95) Unable to resolve artifact: com.eno:Test1:LATEST
11:12:33,963 WARN  [org.kie.scanner.MavenRepository] (default task-95) Unable to resolve artifact: com.eno:Test1:pom:LATEST
11:12:33,963 ERROR [stderr] (default task-95) java.lang.RuntimeException: Cannot find KieModule: com.eno:Test1:LATEST
11:12:33,963 ERROR [stderr] (default task-95) at org.drools.compiler.kie.builder.impl.KieServicesImpl.newKieContainer(KieServicesImpl.java:117)
11:12:33,963 ERROR [stderr] (default task-95) at org.drools.compiler.kie.builder.impl.KieServicesImpl.newKieContainer(KieServicesImpl.java:111)
11:12:33,963 ERROR [stderr] (default task-95) at com.eno.testweb.TestDrool6.doPost(TestDrool6.java:59)
11:12:33,963 ERROR [stderr] (default task-95) at com.eno.testweb.TestDrool6.doGet(TestDrool6.java:38)
11:12:33,963 ERROR [stderr] (default task-95) at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
11:12:33,964 ERROR [stderr] (default task-95) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
11:12:33,964 ERROR [stderr] (default task-95) at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
11:12:33,964 ERROR [stderr] (default task-95) at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61)
11:12:33,964 ERROR [stderr] (default task-95) at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
11:12:33,964 ERROR [stderr] (default task-95) at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
11:12:33,964 ERROR [stderr] (default task-95) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
11:12:33,964 ERROR [stderr] (default task-95) at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
11:12:33,964 ERROR [stderr] (default task-95) at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56)
11:12:33,964 ERROR [stderr] (default task-95) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
11:12:33,964 ERROR [stderr] (default task-95) at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45)
11:12:33,964 ERROR [stderr] (default task-95) at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63)
11:12:33,964 ERROR [stderr] (default task-95) at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)
11:12:33,965 ERROR [stderr] (default task-95) at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70)
11:12:33,965 ERROR [stderr] (default task-95) at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)
11:12:33,965 ERROR [stderr] (default task-95) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
11:12:33,965 ERROR [stderr] (default task-95) at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
11:12:33,965 ERROR [stderr] (default task-95) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
11:12:33,965 ERROR [stderr] (default task-95) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
11:12:33,965 ERROR [stderr] (default task-95) at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261)
11:12:33,965 ERROR [stderr] (default task-95) at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247)
11:12:33,965 ERROR [stderr] (default task-95) at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76)
11:12:33,965 ERROR [stderr] (default task-95) at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166)
11:12:33,965 ERROR [stderr] (default task-95) at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197)
11:12:33,965 ERROR [stderr] (default task-95) at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759)
11:12:33,965 ERROR [stderr] (default task-95) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
11:12:33,966 ERROR [stderr] (default task-95) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
11:12:33,966 ERROR [stderr] (default task-95) at java.lang.Thread.run(Thread.java:745)


Please check attached below files
- kie-project jar file. Test1-LATEST.jar
- settings.xml

Code:
            KieServices ks = KieServices.Factory.get();
   KieRepository kr = ks.getRepository();
   System.out.println("KieRepository Default ReleaseId:"+kr.getDefaultReleaseId());
   UrlResource urlResource = (UrlResource) ks.getResources().newUrlResource(url);
   urlResource.setUsername("applicationuser");
   urlResource.setPassword("applicationpassword");
   urlResource.setBasicAuthentication("enabled");
   InputStream is = urlResource.getInputStream();
   KieModule kModule = kr.addKieModule(ks.getResources().newInputStreamResource(is));
   System.out.println("KieModule ReleaseId:"+kModule.getReleaseId());
                    KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());

Please suggest what I missed ?
Test1-LATEST.jar
settings.xml

Kunal Ransing

unread,
Sep 29, 2015, 11:40:29 PM9/29/15
to Drools Usage
Hi,
Any update? Anyone solved problem of Accessing remote package built by Drools Workbench on different server ?

Kunal Ransing

unread,
Oct 3, 2015, 9:31:46 AM10/3/15
to Drools Usage
Hi,
I solved it. Problem is in setting.xml. Actually I used <server>xxx</server>. Correct way is <servers><server>xxx</server></servers>. Also removed code of programmatically download the .jar. Below correct code:
   KieServices ks = KieServices.Factory.get();
   //Set settings.xml using below OR keep setting.xml at /home/.m2/settings.xml
   System.setProperty("kie.maven.settings.custom", "/home/krunal/devtool/drool6/settings.xml");
   ReleaseIdImpl r = new ReleaseIdImpl("com.eno:Test1:LATEST");
   KieContainer kContainer = ks.newKieContainer(r);
   KieScanner kieScanner = ks.newKieScanner(kContainer);
   kieScanner.start(5000L);

Now I tried to do programmatically download the .jar & create kiecontainer without maven settings.xml like stackoverflow.com/questions/21186570/… , it gives me above error java.lang.RuntimeException: Cannot find KieModule: com.eno:Test1:LATEST. I used below code. Any idea ?
    //Not working below way...giving error java.lang.RuntimeException: Cannot find KieModule: com.eno:Test1:LATEST
   KieServices ks = KieServices.Factory.get();
   KieRepository kr = ks.getRepository();
   System.out.println(kr.getDefaultReleaseId());
   UrlResource urlResource = (UrlResource) ks.getResources().newUrlResource(url);
   urlResource.setUsername("admin");
   urlResource.setPassword("Passw0rd");
   urlResource.setBasicAuthentication("enabled");
   InputStream is = urlResource.getInputStream();
   KieModule kModule = kr.addKieModule(ks.getResources().newInputStreamResource(is));
   System.out.println(kModule.getReleaseId());
   KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());

Michael Anstis

unread,
Oct 3, 2015, 9:43:32 AM10/3/15
to drools...@googlegroups.com

What is the server definition?

Does the server require authentication  (it will if it's the workbench maven repository)

--
You received this message because you are subscribed to the Google Groups "Drools Usage" group.
To unsubscribe from this group and stop receiving emails from it, send an email to drools-usage...@googlegroups.com.
To post to this group, send email to drools...@googlegroups.com.

Kunal Ransing

unread,
Oct 3, 2015, 10:18:55 AM10/3/15
to Drools Usage
Hi,

Yes. It required authentication. Below settings.xml (using it when i am creating kiecontainer from remote repository & its working)

          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                          http://maven.apache.org/xsd/settings-1.0.0.xsd">

      <servers>
          <server>
     <id>uf-playground</id>
     <username>admin</username>
     <password>password</password>
     <configuration>
       <wagonProvider>httpclient</wagonProvider>
       <httpConfiguration>
         <all>
           <usePreemptive>true</usePreemptive>
         </all>
       </httpConfiguration>
     </configuration>
     </server>
    </servers>
    <profiles>
        <profile>
            <id>profile-1</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <repositories>
                <repository>
                    <id>uf-playground</id>
                    <name>Drools workbench</name>
                    <url>http://localhost:8081/kie-drools-6.3/maven2</url>
                </repository>
            </repositories>
        </profile>
    </profiles>
</settings>

Kunal Ransing

unread,
Oct 3, 2015, 10:26:01 AM10/3/15
to Drools Usage
Hi,

Now I tested download of jar programatically & update using scanner. I removed settings.xml. Its working.
When update drool from workbench & deploy, on server its showing rule update like
19:37:28,002 INFO  [org.drools.compiler.kie.builder.impl.KieRepositoryImpl] (default task-84) KieModule was added: ZipKieModule[releaseId=com.eno:Test1:LATEST,file=/root/.m2/repository/com/eno/Test1/LATEST/Test1-LATEST.jar] 
But I don't understand that I am not loading from maven repository (since I want to load remote project jar using URL & also kiecontainer will update automatically when I update rule & deploy it), still I can see ZipKieModule[releaseId=com.eno:Test1:LATEST,file=/root/.m2/repository/com/eno/Test1/LATEST/Test1-LATEST.jar]
Reply all
Reply to author
Forward
0 new messages