This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit bb1e5ac48a6ede94021ed13e8b54a9ed9c8394c8
Author: Alex Heneveld <[email protected]>
AuthorDate: Thu Aug 11 14:33:33 2022 +0100

    add created and destroying lifecycle hooks
---
 .../brooklyn/core/entity/AbstractEntity.java       | 29 +++++++++++++++++++++-
 .../mgmt/internal/EntityManagementSupport.java     |  9 ++++++-
 2 files changed, 36 insertions(+), 2 deletions(-)

diff --git 
a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java 
b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
index c047ee6ecb..30a96f1ec2 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
@@ -1767,7 +1767,19 @@ public abstract class AbstractEntity extends 
AbstractBrooklynObject implements E
             if (displayNameAutoGenerated) 
displayName.set(getAutogeneratedDefaultDisplayName());
         }
     }
-    
+
+    /**
+     * Invoked by {@link EntityManagementSupport} when this entity is first 
created and almost fully managed,
+     * visible to other entities through the management context, for the very 
first time.
+     * It will be followed by a call to {@link #onManagementStarted()},
+     * but will not be called on subsequent rebindings.
+     *
+     * This is called by {@link 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager#createEntity(Map, 
Class)}
+     * just after its call to {@link 
org.apache.brooklyn.core.objs.proxy.InternalEntityFactory#createEntity(EntitySpec,
 String)}
+     * and immediately before the call to {@link #onManagementStarted()}.
+     */
+    public void onManagementCreated() {}
+
     /**
      * Invoked by {@link EntityManagementSupport} when this entity is fully 
managed and visible to other entities
      * through the management context.
@@ -1790,6 +1802,21 @@ public abstract class AbstractEntity extends 
AbstractBrooklynObject implements E
     @Deprecated
     public void onManagementNoLongerMaster() {}
 
+    /**
+     * Invoked by {@link EntityManagementSupport} when this entity is being 
unmanaged.
+     * This may be because this entity is being removed, or because management 
is stopping.
+     * If this entity is being removed, there will be a subsequent call to 
{@link #onManagementDestroying()}
+     */
+    public void onManagementStopping() {
+    }
+
+    /**
+     * Invoked by {@link EntityManagementSupport} when this entity is being 
permanently removed from management.
+     * This call is synchronous and still has access to submit and block on 
tasks, so can be used for cleanup.
+     */
+    public void onManagementDestroying() {
+    }
+
     /**
      * Invoked by {@link EntityManagementSupport} when this entity is fully 
unmanaged.
      * <p>
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/EntityManagementSupport.java
 
b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/EntityManagementSupport.java
index 4ffa12699a..7e71a9cc57 100644
--- 
a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/EntityManagementSupport.java
+++ 
b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/EntityManagementSupport.java
@@ -273,6 +273,7 @@ public class EntityManagementSupport {
             
             if (!isReadOnly()) {
                 entity.onManagementBecomingMaster();
+                if (info.getMode().isCreating()) entity.onManagementCreated();
                 entity.onManagementStarted();
             }
             
@@ -340,8 +341,14 @@ public class EntityManagementSupport {
                 
nonDeploymentManagementContext.setMode(NonDeploymentManagementContextMode.MANAGEMENT_STOPPING);
             }
         }
-        
+
+        if (!wasDryRun && !isReadOnly()) {
+            entity.onManagementStopping();
+            if (info.getMode().isDestroying()) entity.onManagementDestroying();
+        }
+
         if (wasDryRun || (!isReadOnly() && info.getMode().isDestroying())) {
+
             // ensure adjuncts get a destroy callback
             // note they don't get any alert if the entity is being locally 
unmanaged to run somewhere else.
             // framework should introduce a call for that ideally, but in 
interim if needed they

Reply via email to