From ec18163e3a8ee8ec05e90d0054f572abc641477e Mon Sep 17 00:00:00 2001 From: Luis Pabon Date: Mon, 5 Aug 2024 18:03:50 -0400 Subject: [PATCH 1/9] Set volatile flag on rules arraylists to satisfy double-lock standards --- .../ruleengine/transformation/TransformationRuleEngine.java | 2 +- .../etor/ruleengine/validation/ValidationRuleEngine.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java index ca361f005..ba408ae13 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java @@ -15,7 +15,7 @@ /** Implements the RuleEngine interface. It represents a rule engine for transformations. */ public class TransformationRuleEngine implements RuleEngine { private String ruleDefinitionsFileName; - final List rules = new ArrayList<>(); + volatile List rules = new ArrayList<>(); private static final TransformationRuleEngine INSTANCE = new TransformationRuleEngine(); diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java index 33b39ec4e..1376f235c 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java @@ -15,7 +15,7 @@ /** Implements the RuleEngine interface. It represents a rule engine for validations. */ public class ValidationRuleEngine implements RuleEngine { private String ruleDefinitionsFileName; - final List rules = new ArrayList<>(); + volatile List rules = new ArrayList<>(); private static final ValidationRuleEngine INSTANCE = new ValidationRuleEngine(); From 8eb5e339ab44eb3e28bbb69eed8591be3c53db83 Mon Sep 17 00:00:00 2001 From: Luis Pabon Date: Tue, 6 Aug 2024 11:03:17 -0400 Subject: [PATCH 2/9] Revert volatile flag and use synchronizedList instead --- .../TransformationRuleEngine.java | 30 ++++++++----------- .../validation/ValidationRuleEngine.java | 30 ++++++++----------- 2 files changed, 26 insertions(+), 34 deletions(-) diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java index ba408ae13..a1f0a726c 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java @@ -9,13 +9,14 @@ import java.io.FileNotFoundException; import java.io.InputStream; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import javax.inject.Inject; /** Implements the RuleEngine interface. It represents a rule engine for transformations. */ public class TransformationRuleEngine implements RuleEngine { private String ruleDefinitionsFileName; - volatile List rules = new ArrayList<>(); + final List rules = Collections.synchronizedList(new ArrayList<>()); private static final TransformationRuleEngine INSTANCE = new TransformationRuleEngine(); @@ -36,23 +37,18 @@ public void unloadRules() { @Override public void ensureRulesLoaded() throws RuleLoaderException { - // Double-checked locking - needed to protect from excessive sync locks - if (rules.isEmpty()) { - synchronized (this) { - if (rules.isEmpty()) { - InputStream resourceStream = - getClass() - .getClassLoader() - .getResourceAsStream(ruleDefinitionsFileName); - if (resourceStream == null) { - throw new RuleLoaderException( - "File not found: " + ruleDefinitionsFileName, - new FileNotFoundException()); - } - List parsedRules = - ruleLoader.loadRules(resourceStream, new TypeReference<>() {}); - this.rules.addAll(parsedRules); + synchronized (this) { + if (rules.isEmpty()) { + InputStream resourceStream = + getClass().getClassLoader().getResourceAsStream(ruleDefinitionsFileName); + if (resourceStream == null) { + throw new RuleLoaderException( + "File not found: " + ruleDefinitionsFileName, + new FileNotFoundException()); } + List parsedRules = + ruleLoader.loadRules(resourceStream, new TypeReference<>() {}); + this.rules.addAll(parsedRules); } } } diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java index 1376f235c..af1da33f1 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java @@ -9,13 +9,14 @@ import java.io.FileNotFoundException; import java.io.InputStream; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import javax.inject.Inject; /** Implements the RuleEngine interface. It represents a rule engine for validations. */ public class ValidationRuleEngine implements RuleEngine { private String ruleDefinitionsFileName; - volatile List rules = new ArrayList<>(); + final List rules = Collections.synchronizedList(new ArrayList<>()); private static final ValidationRuleEngine INSTANCE = new ValidationRuleEngine(); @@ -36,23 +37,18 @@ public void unloadRules() { @Override public void ensureRulesLoaded() throws RuleLoaderException { - // Double-checked locking - needed to protect from excessive sync locks - if (rules.isEmpty()) { - synchronized (this) { - if (rules.isEmpty()) { - InputStream resourceStream = - getClass() - .getClassLoader() - .getResourceAsStream(ruleDefinitionsFileName); - if (resourceStream == null) { - throw new RuleLoaderException( - "File not found: " + ruleDefinitionsFileName, - new FileNotFoundException()); - } - List parsedRules = - ruleLoader.loadRules(resourceStream, new TypeReference<>() {}); - this.rules.addAll(parsedRules); + synchronized (this) { + if (rules.isEmpty()) { + InputStream resourceStream = + getClass().getClassLoader().getResourceAsStream(ruleDefinitionsFileName); + if (resourceStream == null) { + throw new RuleLoaderException( + "File not found: " + ruleDefinitionsFileName, + new FileNotFoundException()); } + List parsedRules = + ruleLoader.loadRules(resourceStream, new TypeReference<>() {}); + this.rules.addAll(parsedRules); } } } From 4a267f955a66bb2b53ca773176de1ecc3cbb00a9 Mon Sep 17 00:00:00 2001 From: Luis Pabon Date: Tue, 6 Aug 2024 11:10:06 -0400 Subject: [PATCH 3/9] Change the sync block scopes to the rule arrays --- .../ruleengine/transformation/TransformationRuleEngine.java | 4 ++-- .../etor/ruleengine/validation/ValidationRuleEngine.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java index a1f0a726c..54a571e97 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java @@ -37,7 +37,7 @@ public void unloadRules() { @Override public void ensureRulesLoaded() throws RuleLoaderException { - synchronized (this) { + synchronized (rules) { if (rules.isEmpty()) { InputStream resourceStream = getClass().getClassLoader().getResourceAsStream(ruleDefinitionsFileName); @@ -48,7 +48,7 @@ public void ensureRulesLoaded() throws RuleLoaderException { } List parsedRules = ruleLoader.loadRules(resourceStream, new TypeReference<>() {}); - this.rules.addAll(parsedRules); + rules.addAll(parsedRules); } } } diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java index af1da33f1..2eb6354aa 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java @@ -37,7 +37,7 @@ public void unloadRules() { @Override public void ensureRulesLoaded() throws RuleLoaderException { - synchronized (this) { + synchronized (rules) { if (rules.isEmpty()) { InputStream resourceStream = getClass().getClassLoader().getResourceAsStream(ruleDefinitionsFileName); @@ -48,7 +48,7 @@ public void ensureRulesLoaded() throws RuleLoaderException { } List parsedRules = ruleLoader.loadRules(resourceStream, new TypeReference<>() {}); - this.rules.addAll(parsedRules); + rules.addAll(parsedRules); } } } From b5c799f0433ece8e14c1e1a2894a16dd4a090959 Mon Sep 17 00:00:00 2001 From: Luis Pabon Date: Tue, 6 Aug 2024 12:08:23 -0400 Subject: [PATCH 4/9] Added a volatile boolean to control the synchronization blocks --- .../TransformationRuleEngine.java | 29 +++++++++++-------- .../validation/ValidationRuleEngine.java | 29 +++++++++++-------- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java index 54a571e97..a00597d9b 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java @@ -17,7 +17,7 @@ public class TransformationRuleEngine implements RuleEngine { private String ruleDefinitionsFileName; final List rules = Collections.synchronizedList(new ArrayList<>()); - + volatile boolean rulesLoaded = false; private static final TransformationRuleEngine INSTANCE = new TransformationRuleEngine(); @Inject Logger logger; @@ -37,18 +37,23 @@ public void unloadRules() { @Override public void ensureRulesLoaded() throws RuleLoaderException { - synchronized (rules) { - if (rules.isEmpty()) { - InputStream resourceStream = - getClass().getClassLoader().getResourceAsStream(ruleDefinitionsFileName); - if (resourceStream == null) { - throw new RuleLoaderException( - "File not found: " + ruleDefinitionsFileName, - new FileNotFoundException()); + if (!rulesLoaded) { + synchronized (rules) { + if (rules.isEmpty()) { + InputStream resourceStream = + getClass() + .getClassLoader() + .getResourceAsStream(ruleDefinitionsFileName); + if (resourceStream == null) { + throw new RuleLoaderException( + "File not found: " + ruleDefinitionsFileName, + new FileNotFoundException()); + } + List parsedRules = + ruleLoader.loadRules(resourceStream, new TypeReference<>() {}); + rules.addAll(parsedRules); + rulesLoaded = true; } - List parsedRules = - ruleLoader.loadRules(resourceStream, new TypeReference<>() {}); - rules.addAll(parsedRules); } } } diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java index 2eb6354aa..675f966df 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java @@ -17,7 +17,7 @@ public class ValidationRuleEngine implements RuleEngine { private String ruleDefinitionsFileName; final List rules = Collections.synchronizedList(new ArrayList<>()); - + volatile boolean rulesLoaded = false; private static final ValidationRuleEngine INSTANCE = new ValidationRuleEngine(); @Inject Logger logger; @@ -37,18 +37,23 @@ public void unloadRules() { @Override public void ensureRulesLoaded() throws RuleLoaderException { - synchronized (rules) { - if (rules.isEmpty()) { - InputStream resourceStream = - getClass().getClassLoader().getResourceAsStream(ruleDefinitionsFileName); - if (resourceStream == null) { - throw new RuleLoaderException( - "File not found: " + ruleDefinitionsFileName, - new FileNotFoundException()); + if (!rulesLoaded) { + synchronized (rules) { + if (rules.isEmpty()) { + InputStream resourceStream = + getClass() + .getClassLoader() + .getResourceAsStream(ruleDefinitionsFileName); + if (resourceStream == null) { + throw new RuleLoaderException( + "File not found: " + ruleDefinitionsFileName, + new FileNotFoundException()); + } + List parsedRules = + ruleLoader.loadRules(resourceStream, new TypeReference<>() {}); + rules.addAll(parsedRules); + rulesLoaded = true; } - List parsedRules = - ruleLoader.loadRules(resourceStream, new TypeReference<>() {}); - rules.addAll(parsedRules); } } } From 725b7088f9cd9d98564de90da9f9800dd03c5e78 Mon Sep 17 00:00:00 2001 From: Luis Pabon Date: Tue, 6 Aug 2024 15:03:47 -0400 Subject: [PATCH 5/9] Update rulesLoaded flag when unloading rules and on loading exceptions --- .../ruleengine/transformation/TransformationRuleEngine.java | 4 +++- .../etor/ruleengine/validation/ValidationRuleEngine.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java index a00597d9b..f02ac1ef8 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java @@ -33,18 +33,21 @@ private TransformationRuleEngine() {} @Override public void unloadRules() { rules.clear(); + rulesLoaded = false; } @Override public void ensureRulesLoaded() throws RuleLoaderException { if (!rulesLoaded) { synchronized (rules) { + rulesLoaded = true; if (rules.isEmpty()) { InputStream resourceStream = getClass() .getClassLoader() .getResourceAsStream(ruleDefinitionsFileName); if (resourceStream == null) { + rulesLoaded = false; throw new RuleLoaderException( "File not found: " + ruleDefinitionsFileName, new FileNotFoundException()); @@ -52,7 +55,6 @@ public void ensureRulesLoaded() throws RuleLoaderException { List parsedRules = ruleLoader.loadRules(resourceStream, new TypeReference<>() {}); rules.addAll(parsedRules); - rulesLoaded = true; } } } diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java index 675f966df..b264891e1 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java @@ -33,18 +33,21 @@ private ValidationRuleEngine() {} @Override public void unloadRules() { rules.clear(); + rulesLoaded = false; } @Override public void ensureRulesLoaded() throws RuleLoaderException { if (!rulesLoaded) { synchronized (rules) { + rulesLoaded = true; if (rules.isEmpty()) { InputStream resourceStream = getClass() .getClassLoader() .getResourceAsStream(ruleDefinitionsFileName); if (resourceStream == null) { + rulesLoaded = false; throw new RuleLoaderException( "File not found: " + ruleDefinitionsFileName, new FileNotFoundException()); @@ -52,7 +55,6 @@ public void ensureRulesLoaded() throws RuleLoaderException { List parsedRules = ruleLoader.loadRules(resourceStream, new TypeReference<>() {}); rules.addAll(parsedRules); - rulesLoaded = true; } } } From 1bfec98b3a558e425b9c4f839e921aa46a884ba8 Mon Sep 17 00:00:00 2001 From: Luis Pabon Date: Wed, 7 Aug 2024 14:13:05 -0400 Subject: [PATCH 6/9] Revert the synchronizedList usage as we don't need it with the recent changes --- .../ruleengine/transformation/TransformationRuleEngine.java | 3 +-- .../etor/ruleengine/validation/ValidationRuleEngine.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java index f02ac1ef8..9fe923cf5 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java @@ -9,14 +9,13 @@ import java.io.FileNotFoundException; import java.io.InputStream; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import javax.inject.Inject; /** Implements the RuleEngine interface. It represents a rule engine for transformations. */ public class TransformationRuleEngine implements RuleEngine { private String ruleDefinitionsFileName; - final List rules = Collections.synchronizedList(new ArrayList<>()); + final List rules = new ArrayList<>(); volatile boolean rulesLoaded = false; private static final TransformationRuleEngine INSTANCE = new TransformationRuleEngine(); diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java index b264891e1..933b6b3e7 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java @@ -9,14 +9,13 @@ import java.io.FileNotFoundException; import java.io.InputStream; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import javax.inject.Inject; /** Implements the RuleEngine interface. It represents a rule engine for validations. */ public class ValidationRuleEngine implements RuleEngine { private String ruleDefinitionsFileName; - final List rules = Collections.synchronizedList(new ArrayList<>()); + final List rules = new ArrayList<>(); volatile boolean rulesLoaded = false; private static final ValidationRuleEngine INSTANCE = new ValidationRuleEngine(); From 7dc84e6b8cf3630e4cdeb9c6c0d086846929a3a6 Mon Sep 17 00:00:00 2001 From: Luis Pabon Date: Thu, 8 Aug 2024 11:49:48 -0400 Subject: [PATCH 7/9] Moved rulesLoaded flag to after the actual rule loading is done --- .../ruleengine/transformation/TransformationRuleEngine.java | 3 +-- .../etor/ruleengine/validation/ValidationRuleEngine.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java index 9fe923cf5..3fbc3d3fc 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java @@ -39,14 +39,12 @@ public void unloadRules() { public void ensureRulesLoaded() throws RuleLoaderException { if (!rulesLoaded) { synchronized (rules) { - rulesLoaded = true; if (rules.isEmpty()) { InputStream resourceStream = getClass() .getClassLoader() .getResourceAsStream(ruleDefinitionsFileName); if (resourceStream == null) { - rulesLoaded = false; throw new RuleLoaderException( "File not found: " + ruleDefinitionsFileName, new FileNotFoundException()); @@ -54,6 +52,7 @@ public void ensureRulesLoaded() throws RuleLoaderException { List parsedRules = ruleLoader.loadRules(resourceStream, new TypeReference<>() {}); rules.addAll(parsedRules); + rulesLoaded = true; } } } diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java index 933b6b3e7..f4e6163ef 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java @@ -39,14 +39,12 @@ public void unloadRules() { public void ensureRulesLoaded() throws RuleLoaderException { if (!rulesLoaded) { synchronized (rules) { - rulesLoaded = true; if (rules.isEmpty()) { InputStream resourceStream = getClass() .getClassLoader() .getResourceAsStream(ruleDefinitionsFileName); if (resourceStream == null) { - rulesLoaded = false; throw new RuleLoaderException( "File not found: " + ruleDefinitionsFileName, new FileNotFoundException()); @@ -54,6 +52,7 @@ public void ensureRulesLoaded() throws RuleLoaderException { List parsedRules = ruleLoader.loadRules(resourceStream, new TypeReference<>() {}); rules.addAll(parsedRules); + rulesLoaded = true; } } } From 9444a778a3ccfd365e0f0d52df3396eb7f55a340 Mon Sep 17 00:00:00 2001 From: Luis Pabon Date: Thu, 8 Aug 2024 13:48:26 -0400 Subject: [PATCH 8/9] Update etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java Co-authored-by: halprin --- .../ruleengine/transformation/TransformationRuleEngine.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java index 3fbc3d3fc..bc5998991 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/TransformationRuleEngine.java @@ -39,7 +39,7 @@ public void unloadRules() { public void ensureRulesLoaded() throws RuleLoaderException { if (!rulesLoaded) { synchronized (rules) { - if (rules.isEmpty()) { + if (!rulesLoaded) { InputStream resourceStream = getClass() .getClassLoader() From a71dcb7c4b402e4c572ef2ee7f3b1eb95dfeafbc Mon Sep 17 00:00:00 2001 From: Luis Pabon Date: Thu, 8 Aug 2024 13:48:44 -0400 Subject: [PATCH 9/9] Update etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java Co-authored-by: halprin --- .../etor/ruleengine/validation/ValidationRuleEngine.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java index f4e6163ef..209da7c72 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/validation/ValidationRuleEngine.java @@ -39,7 +39,7 @@ public void unloadRules() { public void ensureRulesLoaded() throws RuleLoaderException { if (!rulesLoaded) { synchronized (rules) { - if (rules.isEmpty()) { + if (!rulesLoaded) { InputStream resourceStream = getClass() .getClassLoader()