This is an automated email from the ASF dual-hosted git repository.
mariofusco pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/main by this push:
new 011e17a70e Cache compiled dtables during the building of a KieProject
(#6097)
011e17a70e is described below
commit 011e17a70e74988e4c75a83e208faf912ec147ac
Author: Mario Fusco <[email protected]>
AuthorDate: Tue Sep 24 11:45:14 2024 +0200
Cache compiled dtables during the building of a KieProject (#6097)
* Cache compiled dtables during the building of a KieProject
* wip
* wip
---
.../compiler/kie/builder/impl/KieBuilderImpl.java | 6 ++++
.../decisiontable/DecisionTableProviderImpl.java | 40 ++++++++++++++++------
.../drl/extensions/DecisionTableFactory.java | 6 ++++
.../drl/extensions/DecisionTableProvider.java | 8 ++---
4 files changed, 45 insertions(+), 15 deletions(-)
diff --git
a/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/KieBuilderImpl.java
b/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/KieBuilderImpl.java
index ec1cb65533..61e1796506 100644
---
a/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/KieBuilderImpl.java
+++
b/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/KieBuilderImpl.java
@@ -298,6 +298,12 @@ public class KieBuilderImpl
kieRepository.addKieModule( kDep );
}
}
+
+ clearBuilderCache();
+ }
+
+ private static void clearBuilderCache() {
+ DecisionTableFactory.clearCompilerCache();
}
private void addKBasesFilesToTrg() {
diff --git
a/drools-decisiontables/src/main/java/org/drools/decisiontable/DecisionTableProviderImpl.java
b/drools-decisiontables/src/main/java/org/drools/decisiontable/DecisionTableProviderImpl.java
index a809b8ff8e..a843964a7f 100644
---
a/drools-decisiontables/src/main/java/org/drools/decisiontable/DecisionTableProviderImpl.java
+++
b/drools-decisiontables/src/main/java/org/drools/decisiontable/DecisionTableProviderImpl.java
@@ -27,6 +27,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import org.drools.decisiontable.parser.xls.PropertiesSheetListener;
import org.drools.drl.extensions.DecisionTableProvider;
@@ -42,7 +43,9 @@ public class DecisionTableProviderImpl
implements
DecisionTableProvider {
- private static final transient Logger logger = LoggerFactory.getLogger(
DecisionTableProviderImpl.class );
+ private static final Logger logger = LoggerFactory.getLogger(
DecisionTableProviderImpl.class );
+
+ private Map<String, String> compiledDtablesCache = new
ConcurrentHashMap<>();
@Override
public String loadFromResource(Resource resource,
@@ -50,8 +53,6 @@ public class DecisionTableProviderImpl
try {
return compileResource( resource, configuration );
- } catch (IOException e) {
- throw new UncheckedIOException( e );
} catch (Exception e) {
throw new DecisionTableParseException(resource, e);
}
@@ -78,29 +79,46 @@ public class DecisionTableProviderImpl
return drls;
}
- private String compileResource(Resource resource,
- DecisionTableConfiguration configuration)
throws IOException {
+ private String compileResource(Resource resource,
DecisionTableConfiguration configuration) {
+ if (resource.getSourcePath() == null) {
+ return internalCompileResource(resource, configuration);
+ }
+ String resourceKey = resource.getSourcePath() + "?trimCell=" +
configuration.isTrimCell() + "&worksheetName=" +
configuration.getWorksheetName();
+ return compiledDtablesCache.computeIfAbsent(resourceKey, path ->
internalCompileResource(resource, configuration));
+ }
+
+ private String internalCompileResource(Resource resource,
DecisionTableConfiguration configuration) throws UncheckedIOException {
SpreadsheetCompiler compiler = new
SpreadsheetCompiler(configuration.isTrimCell());
switch ( configuration.getInputType() ) {
case XLS :
case XLSX :
if ( StringUtils.isEmpty( configuration.getWorksheetName() ) )
{
- return compiler.compile( resource,
- InputType.XLS );
+ return compiler.compile( resource, InputType.XLS );
} else {
- return compiler.compile( resource.getInputStream(),
- configuration.getWorksheetName()
);
+ try {
+ return compiler.compile( resource.getInputStream(),
configuration.getWorksheetName() );
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
}
case CSV : {
- return compiler.compile( resource.getInputStream(),
- InputType.CSV );
+ try {
+ return compiler.compile( resource.getInputStream(),
InputType.CSV );
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
}
}
return null;
}
+ @Override
+ public void clearCompilerCache() {
+ compiledDtablesCache.clear();
+ }
+
@Override
public Map<String, List<String[]>> loadPropertiesFromFile(File file,
DecisionTableConfiguration configuration) {
switch (configuration.getInputType()) {
diff --git
a/drools-drl/drools-drl-extensions/src/main/java/org/drools/drl/extensions/DecisionTableFactory.java
b/drools-drl/drools-drl-extensions/src/main/java/org/drools/drl/extensions/DecisionTableFactory.java
index caef7c8ed2..ab46e27355 100644
---
a/drools-drl/drools-drl-extensions/src/main/java/org/drools/drl/extensions/DecisionTableFactory.java
+++
b/drools-drl/drools-drl-extensions/src/main/java/org/drools/drl/extensions/DecisionTableFactory.java
@@ -42,6 +42,12 @@ public class DecisionTableFactory {
return getDecisionTableProvider().loadFromInputStreamWithTemplates(
resource, configuration );
}
+ public static void clearCompilerCache() {
+ if (provider != null) {
+ provider.clearCompilerCache();
+ }
+ }
+
public static synchronized void
setDecisionTableProvider(DecisionTableProvider provider) {
DecisionTableFactory.provider = provider;
}
diff --git
a/drools-drl/drools-drl-extensions/src/main/java/org/drools/drl/extensions/DecisionTableProvider.java
b/drools-drl/drools-drl-extensions/src/main/java/org/drools/drl/extensions/DecisionTableProvider.java
index 7b2fbdc055..c11a1f9a78 100644
---
a/drools-drl/drools-drl-extensions/src/main/java/org/drools/drl/extensions/DecisionTableProvider.java
+++
b/drools-drl/drools-drl-extensions/src/main/java/org/drools/drl/extensions/DecisionTableProvider.java
@@ -29,13 +29,13 @@ import org.kie.internal.builder.DecisionTableConfiguration;
public interface DecisionTableProvider extends KieService {
- String loadFromResource(Resource resource,
- DecisionTableConfiguration configuration);
+ String loadFromResource(Resource resource, DecisionTableConfiguration
configuration);
- List<String> loadFromInputStreamWithTemplates(Resource resource,
- DecisionTableConfiguration
configuration);
+ List<String> loadFromInputStreamWithTemplates(Resource resource,
DecisionTableConfiguration configuration);
Map<String,List<String[]>> loadPropertiesFromFile(File file,
DecisionTableConfiguration configuration);
Map<String,List<String[]>> loadPropertiesFromInputStream(InputStream
inputStream, DecisionTableConfiguration configuration);
+
+ void clearCompilerCache();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]