This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 3a1e5cc678 ISIS-3066: wait for validation to finish before MM disposal
3a1e5cc678 is described below
commit 3a1e5cc678d569735190a60fb42c4d24849f856c
Author: Andi Huber <[email protected]>
AuthorDate: Thu Jun 2 09:08:08 2022 +0200
ISIS-3066: wait for validation to finish before MM disposal
---
.../metamodel/specloader/SpecificationLoaderDefault.java | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
index 57c4aafee1..10194f040d 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
@@ -86,6 +86,7 @@ import
org.apache.isis.core.metamodel.valuetypes.ValueSemanticsResolverDefault;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
+import lombok.SneakyThrows;
import lombok.val;
import lombok.extern.log4j.Log4j2;
@@ -334,6 +335,7 @@ public class SpecificationLoaderDefault implements
SpecificationLoader {
@Override
public void disposeMetaModel() {
+ waitForValidationToFinish();
logicalTypeResolver.clear();
cache.clear();
validationResult.clear();
@@ -341,6 +343,19 @@ public class SpecificationLoaderDefault implements
SpecificationLoader {
log.info("Metamodel disposed.");
}
+ /**
+ * [ISIS-3066] wait for validation (if any) to finish (max 5s)
+ */
+ @SneakyThrows
+ private void waitForValidationToFinish() {
+ int maxRetry = 50;
+ while(!validationQueue.isEmpty()
+ && maxRetry<0) {
+ Thread.sleep(100);
+ --maxRetry;
+ }
+ }
+
@PreDestroy
public void shutdown() {
log.debug("shutting down {}", this);