summaryrefslogtreecommitdiffstats
path: root/component
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2020-12-07 13:37:24 +0100
committerJon Marius Venstad <venstad@gmail.com>2020-12-07 13:37:24 +0100
commitbdb102917700d9f698423b5a1d62ead8a06f5b5a (patch)
tree1daacf13716d072b1a5578ae03fb35ae2e61a81f /component
parentc7548568b93ac5552667ca34a754bf6b36b5033e (diff)
Always deconstruct in reverse creation order, including Provider objects
Diffstat (limited to 'component')
-rw-r--r--component/abi-spec.json16
-rw-r--r--component/src/main/java/com/yahoo/component/AbstractComponent.java3
-rw-r--r--component/src/main/java/com/yahoo/component/Deconstructable.java13
3 files changed, 30 insertions, 2 deletions
diff --git a/component/abi-spec.json b/component/abi-spec.json
index 5665075f1f2..2dfa3e0d71d 100644
--- a/component/abi-spec.json
+++ b/component/abi-spec.json
@@ -2,7 +2,8 @@
"com.yahoo.component.AbstractComponent": {
"superClass": "java.lang.Object",
"interfaces": [
- "com.yahoo.component.Component"
+ "com.yahoo.component.Component",
+ "com.yahoo.component.Deconstructable"
],
"attributes": [
"public"
@@ -105,6 +106,19 @@
],
"fields": []
},
+ "com.yahoo.component.Deconstructable": {
+ "superClass": "java.lang.Object",
+ "interfaces": [],
+ "attributes": [
+ "public",
+ "interface",
+ "abstract"
+ ],
+ "methods": [
+ "public abstract void deconstruct()"
+ ],
+ "fields": []
+ },
"com.yahoo.component.Version": {
"superClass": "java.lang.Object",
"interfaces": [
diff --git a/component/src/main/java/com/yahoo/component/AbstractComponent.java b/component/src/main/java/com/yahoo/component/AbstractComponent.java
index fcaa1e62d56..18a19f3e238 100644
--- a/component/src/main/java/com/yahoo/component/AbstractComponent.java
+++ b/component/src/main/java/com/yahoo/component/AbstractComponent.java
@@ -11,7 +11,7 @@ import java.lang.reflect.Method;
*
* @author bratseth
*/
-public class AbstractComponent implements Component {
+public class AbstractComponent implements Component, Deconstructable {
private static final MethodCache deconstructMethods = new MethodCache("deconstruct");
@@ -129,6 +129,7 @@ public class AbstractComponent implements Component {
* <p>
* This default implementation does nothing.
*/
+ @Override
public void deconstruct() { }
/**
diff --git a/component/src/main/java/com/yahoo/component/Deconstructable.java b/component/src/main/java/com/yahoo/component/Deconstructable.java
new file mode 100644
index 00000000000..4da39cd3420
--- /dev/null
+++ b/component/src/main/java/com/yahoo/component/Deconstructable.java
@@ -0,0 +1,13 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.component;
+
+/**
+ * A component in the component graph that should be deconstructed, to release resources.
+ *
+ * @author jonmv
+ */
+public interface Deconstructable {
+
+ void deconstruct();
+
+}