[jboss-jira] [JBoss JIRA] (DROOLS-820) During the compilation of a KieModule with dependencies the pom is parsed multiple times

Mario Fusco (JIRA) issues at jboss.org
Wed Jun 17 04:31:02 EDT 2015


     [ https://issues.jboss.org/browse/DROOLS-820?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mario Fusco updated DROOLS-820:
-------------------------------
    Priority: Critical  (was: Major)


> During the compilation of a KieModule with dependencies the pom is parsed multiple times
> ----------------------------------------------------------------------------------------
>
>                 Key: DROOLS-820
>                 URL: https://issues.jboss.org/browse/DROOLS-820
>             Project: Drools
>          Issue Type: Enhancement
>            Reporter: Mario Fusco
>            Assignee: Mario Fusco
>            Priority: Critical
>
> When a KieModule has dependencies we have a big inefficiency because its pom is parsed multiple times. In particular the parsing happens:
> 1. When the KieBuilder creates the pom model:
> {code}
>   java.lang.Thread.State: RUNNABLE
> 	  at org.kie.scanner.embedder.MavenProjectLoader.parseMavenPom(MavenProjectLoader.java:39)
> 	  at org.kie.scanner.embedder.MavenProjectLoader.parseMavenPom(MavenProjectLoader.java:35)
> 	  at org.kie.scanner.MavenPomModelGenerator.parse(MavenPomModelGenerator.java:19)
> 	  at org.drools.compiler.kproject.xml.PomModel$Parser.parse(PomModel.java:64)
> 	  at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildPomModel(KieBuilderImpl.java:407)
> 	  at org.drools.compiler.kie.builder.impl.KieBuilderImpl.init(KieBuilderImpl.java:116)
> 	  at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:149)
> 	  at org.kie.scanner.AbstractKieCiTest.createKieJarWithDependencies(AbstractKieCiTest.java:47)
> 	  at org.kie.scanner.KieRepositoryScannerTest.testKScannerWithDependencies(KieRepositoryScannerTest.java:104)
> {code}
> 2. In a for-loop once for each of the direct dependencies (this is particularly bad)
> {code}
>   java.lang.Thread.State: RUNNABLE
> 	  at org.kie.scanner.embedder.MavenProjectLoader.parseMavenPom(MavenProjectLoader.java:39)
> 	  at org.kie.scanner.embedder.MavenProjectLoader.parseMavenPom(MavenProjectLoader.java:35)
> 	  at org.kie.scanner.ArtifactResolver.getResolverFor(ArtifactResolver.java:112)
> 	  at org.kie.scanner.KieRepositoryScannerImpl.loadArtifact(KieRepositoryScannerImpl.java:95)
> 	  - locked <0x10b6> (a org.kie.scanner.KieRepositoryScannerImpl)
> 	  at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.loadKieModuleFromMavenRepo(KieRepositoryImpl.java:113)
> 	  at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:99)
> 	  at org.drools.compiler.kie.builder.impl.KieBuilderImpl.init(KieBuilderImpl.java:130) <-- IN A FOR-LOOP !!!
> 	  at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:149)
> 	  at org.kie.scanner.AbstractKieCiTest.createKieJarWithDependencies(AbstractKieCiTest.java:47)
> 	  at org.kie.scanner.KieRepositoryScannerTest.testKScannerWithDependencies(KieRepositoryScannerTest.java:104)
> {code}
> 3. When creating the ClassLoader for the KieProject
> {code}
>   java.lang.Thread.State: RUNNABLE
> 	  at org.kie.scanner.embedder.MavenProjectLoader.parseMavenPom(MavenProjectLoader.java:21)
> 	  at org.kie.scanner.embedder.MavenProjectLoader.loadMavenProject(MavenProjectLoader.java:67)
> 	  - locked <0x647> (a java.lang.Class)
> 	  at org.kie.scanner.Aether.<init>(Aether.java:46)
> 	  at org.kie.scanner.Aether.getAether(Aether.java:56)
> 	  - locked <0x15d8> (a java.lang.Class)
> 	  at org.kie.scanner.MavenRepository.getMavenRepository(MavenRepository.java:73)
> 	  - locked <0x15d7> (a java.lang.Class)
> 	  at org.kie.scanner.ArtifactResolver.getPomFileForGAV(ArtifactResolver.java:118)
> 	  at org.kie.scanner.ArtifactResolver.getResolverFor(ArtifactResolver.java:84)
> 	  at org.kie.scanner.MavenClassLoaderResolver.getClassLoader(MavenClassLoaderResolver.java:55)
> 	  at org.drools.compiler.kie.builder.impl.KieModuleKieProject.<init>(KieModuleKieProject.java:53)
> 	  at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:171)
> 	  at org.kie.scanner.AbstractKieCiTest.createKieJarWithDependencies(AbstractKieCiTest.java:47)
> {code}
> The main reason of this inefficiency is caused by the fact that the product of this pom parsing process are maven/aether classes that cannot be referenced in drools-compiler and then are recreated every time the compiler invokes kie-ci.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


More information about the jboss-jira mailing list