[jboss-jira] [JBoss JIRA] (DROOLS-4669) Scanner is not using container ClassLoader
Pavel Tavoda (Jira)
issues at jboss.org
Sat Oct 26 05:07:00 EDT 2019
[ https://issues.jboss.org/browse/DROOLS-4669?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13804778#comment-13804778 ]
Pavel Tavoda commented on DROOLS-4669:
--------------------------------------
I hope it's minimal project. Copy src/main/resources/encounter.jar to your home folder or change path in DroolsServiceImpl.java line 22.
Start under Jetty (I'm using IDEA) and make request to:
http://localhost:8080/drools-sample/rest/drools
Than it crash. If you switch line 53 to 52 in DroolsServiceImpl.java it will work.
I guess it have something with jetty but you can't use spring integration because it using 'default' behavior of using wrong classloader.
> Scanner is not using container ClassLoader
> ------------------------------------------
>
> Key: DROOLS-4669
> URL: https://issues.jboss.org/browse/DROOLS-4669
> Project: Drools
> Issue Type: Bug
> Components: core engine
> Affects Versions: 7.28.0.Final
> Environment: Java 11, Java 8, Linux Debian
> Reporter: Pavel Tavoda
> Assignee: Mario Fusco
> Priority: Major
>
> I had issue with standard Spring project. My configuration ended with following exception:
> {code:java}
> Caused by: java.lang.RuntimeException: The Eclipse JDT Core jar is not in the classpath
> at org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.setCompiler(JavaDialectConfiguration.java:117)
> {code}
> Because of this I have to setup KieSession this way:
> {code:java}
> KieServices kieServices = KieServices.Factory.get();
> ReleaseId kieRelease = kieServices.newReleaseId("sk.f4s", "encounter-rule", "1.0.0-SNAPSHOT");
> KieContainer kieContainer = kieServices.newKieContainer(kieRelease, this.getClass().getClassLoader());
> kieSession = kieContainer.newStatelessKieSession();
> {code}
> After this everything works fine. However I want to reload my kBase with scanner. I add following two lines:
> {code:java}
> kieScanner = kieServices.newKieScanner(kieContainer);
> kieScanner.start(1000l);
> {code}
> After this following exception is raised:
> {code}
> Exception in thread "Timer-0" java.lang.RuntimeException: Unable to load dialect 'org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration:java:org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration'
> at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.addDialect(KnowledgeBuilderConfigurationImpl.java:394)
> at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.buildDialectConfigurationMap(KnowledgeBuilderConfigurationImpl.java:380)
> at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.init(KnowledgeBuilderConfigurationImpl.java:235)
> at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.init(KnowledgeBuilderConfigurationImpl.java:187)
> at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.<init>(KnowledgeBuilderConfigurationImpl.java:155)
> at org.drools.compiler.kie.builder.impl.AbstractKieProject.getBuilderConfiguration(AbstractKieProject.java:302)
> at org.drools.compiler.kie.builder.impl.AbstractKieProject.createKnowledgeBuilder(AbstractKieProject.java:288)
> at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:213)
> at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:75)
> at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:271)
> at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieModule(KieBuilderImpl.java:264)
> at org.drools.compiler.kie.builder.impl.InternalKieModule.build(InternalKieModule.java:120)
> at org.kie.scanner.KieRepositoryScannerImpl.updateKieModule(KieRepositoryScannerImpl.java:200)
> at org.kie.scanner.KieRepositoryScannerImpl.internalUpdate(KieRepositoryScannerImpl.java:185)
> at org.kie.scanner.KieRepositoryScannerImpl.internalUpdate(KieRepositoryScannerImpl.java:55)
> at org.drools.compiler.kie.builder.impl.AbstractKieScanner.scanNow(AbstractKieScanner.java:147)
> at org.drools.compiler.kie.builder.impl.AbstractKieScanner$ScanTask.run(AbstractKieScanner.java:127)
> at java.util.TimerThread.mainLoop(Timer.java:555)
> at java.util.TimerThread.run(Timer.java:505)
> Caused by: java.lang.RuntimeException: The Eclipse JDT Core jar is not in the classpath
> at org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.setCompiler(JavaDialectConfiguration.java:117)
> at org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.init(JavaDialectConfiguration.java:78)
> at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.addDialect(KnowledgeBuilderConfigurationImpl.java:390)
> ... 18 more
> {code}
> I guess reason is that scanner is not using ClassLoader from KieContainer. Of course it will be better to fix reason why 'The Eclipse JDT Core jar is not in the classpath' is raised anyway because I'm using just standard Spring Web project with two Spring contexts (application and Web) what is very standard approach. Compiler IS awailable on classpath only Drools classloader doesn't see it.
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
More information about the jboss-jira
mailing list