You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2014/08/01 22:12:56 UTC
[1/8] git commit: Creating BrooklynObject super-type
Repository: incubator-brooklyn
Updated Branches:
refs/heads/master d67444a3e -> 8b5d48ac2
Creating BrooklynObject super-type
- a super type for Entity, Location, Policy and Enricher
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/0194580e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/0194580e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/0194580e
Branch: refs/heads/master
Commit: 0194580ea36d0a00ab56fa7bbf9ade6b718dfef2
Parents: 5ca049e
Author: Aled Sage <al...@gmail.com>
Authored: Wed Jul 2 09:34:37 2014 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Jul 14 23:45:19 2014 +0100
----------------------------------------------------------------------
.../java/brooklyn/basic/BrooklynObject.java | 31 +++++++++++
api/src/main/java/brooklyn/entity/Entity.java | 10 ++--
.../rebind/PersistenceExceptionHandler.java | 4 +-
.../entity/rebind/RebindExceptionHandler.java | 6 +--
.../main/java/brooklyn/location/Location.java | 5 +-
.../java/brooklyn/policy/EntityAdjunct.java | 11 +---
.../brooklyn/basic/AbstractBrooklynObject.java | 33 ++++++++++++
.../brooklyn/basic/BrooklynObjectInternal.java | 24 +++++++++
.../brooklyn/entity/basic/AbstractEntity.java | 57 +++++++++-----------
.../brooklyn/entity/basic/EntityInternal.java | 3 +-
.../rebind/PersistenceExceptionHandlerImpl.java | 4 +-
.../rebind/RebindExceptionHandlerImpl.java | 6 +--
.../location/basic/AbstractLocation.java | 45 +++++++---------
.../location/basic/LocationInternal.java | 3 +-
.../policy/basic/AbstractEntityAdjunct.java | 13 ++---
.../rebind/RecordingRebindExceptionHandler.java | 10 ++--
16 files changed, 162 insertions(+), 103 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/api/src/main/java/brooklyn/basic/BrooklynObject.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/basic/BrooklynObject.java b/api/src/main/java/brooklyn/basic/BrooklynObject.java
new file mode 100644
index 0000000..9e22f96
--- /dev/null
+++ b/api/src/main/java/brooklyn/basic/BrooklynObject.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package brooklyn.basic;
+
+import brooklyn.entity.trait.Identifiable;
+
+/**
+ * Super-type of entity, location, policy and enricher.
+ */
+public interface BrooklynObject extends Identifiable {
+ /**
+ * A display name; recommended to be a concise single-line description.
+ */
+ String getDisplayName();
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/api/src/main/java/brooklyn/entity/Entity.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/Entity.java b/api/src/main/java/brooklyn/entity/Entity.java
index 14e7853..c792067 100644
--- a/api/src/main/java/brooklyn/entity/Entity.java
+++ b/api/src/main/java/brooklyn/entity/Entity.java
@@ -25,12 +25,10 @@ import java.util.Set;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
-import com.google.common.collect.ImmutableMap;
-
+import brooklyn.basic.BrooklynObject;
import brooklyn.config.ConfigKey;
import brooklyn.config.ConfigKey.HasConfigKey;
import brooklyn.entity.proxying.EntitySpec;
-import brooklyn.entity.trait.Identifiable;
import brooklyn.event.AttributeSensor;
import brooklyn.location.Location;
import brooklyn.management.Task;
@@ -40,6 +38,8 @@ import brooklyn.policy.Policy;
import brooklyn.policy.PolicySpec;
import brooklyn.util.guava.Maybe;
+import com.google.common.collect.ImmutableMap;
+
/**
* The basic interface for a Brooklyn entity.
* <p>
@@ -53,7 +53,7 @@ import brooklyn.util.guava.Maybe;
*
* @see brooklyn.entity.basic.AbstractEntity
*/
-public interface Entity extends Identifiable {
+public interface Entity extends BrooklynObject {
/**
* The unique identifier for this entity.
*/
@@ -71,7 +71,7 @@ public interface Entity extends Identifiable {
String getDisplayName();
/**
- * A URL pointing to an image which can be used to represent this icon.
+ * A URL pointing to an image which can be used to represent this entity.
*/
@Nullable String getIconUrl();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/api/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandler.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandler.java b/api/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandler.java
index 024cbb1..120512d 100644
--- a/api/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandler.java
+++ b/api/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandler.java
@@ -18,7 +18,7 @@
*/
package brooklyn.entity.rebind;
-import brooklyn.entity.trait.Identifiable;
+import brooklyn.basic.BrooklynObject;
import brooklyn.mementos.Memento;
import com.google.common.annotations.Beta;
@@ -33,7 +33,7 @@ public interface PersistenceExceptionHandler {
void stop();
- void onGenerateMementoFailed(BrooklynObjectType type, Identifiable instance, Exception e);
+ void onGenerateMementoFailed(BrooklynObjectType type, BrooklynObject instance, Exception e);
void onPersistMementoFailed(Memento memento, Exception e);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/api/src/main/java/brooklyn/entity/rebind/RebindExceptionHandler.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/rebind/RebindExceptionHandler.java b/api/src/main/java/brooklyn/entity/rebind/RebindExceptionHandler.java
index 4e5aa60..1c99044 100644
--- a/api/src/main/java/brooklyn/entity/rebind/RebindExceptionHandler.java
+++ b/api/src/main/java/brooklyn/entity/rebind/RebindExceptionHandler.java
@@ -18,9 +18,9 @@
*/
package brooklyn.entity.rebind;
+import brooklyn.basic.BrooklynObject;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.EntityLocal;
-import brooklyn.entity.trait.Identifiable;
import brooklyn.location.Location;
import brooklyn.policy.Enricher;
import brooklyn.policy.Policy;
@@ -61,13 +61,13 @@ public interface RebindExceptionHandler {
void onNotFound(BrooklynObjectType type, String id);
- void onRebindFailed(BrooklynObjectType type, Identifiable instance, Exception e);
+ void onRebindFailed(BrooklynObjectType type, BrooklynObject instance, Exception e);
void onAddPolicyFailed(EntityLocal entity, Policy policy, Exception e);
void onAddEnricherFailed(EntityLocal entity, Enricher enricher, Exception e);
- void onManageFailed(BrooklynObjectType type, Identifiable instance, Exception e);
+ void onManageFailed(BrooklynObjectType type, BrooklynObject instance, Exception e);
void onDone();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/api/src/main/java/brooklyn/location/Location.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/location/Location.java b/api/src/main/java/brooklyn/location/Location.java
index 6b5f9dc..fe9bf51 100644
--- a/api/src/main/java/brooklyn/location/Location.java
+++ b/api/src/main/java/brooklyn/location/Location.java
@@ -22,9 +22,9 @@ import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
+import brooklyn.basic.BrooklynObject;
import brooklyn.config.ConfigKey;
import brooklyn.config.ConfigKey.HasConfigKey;
-import brooklyn.entity.trait.Identifiable;
/**
* A location that an entity can be in. Examples of locations include a single machine
@@ -34,7 +34,7 @@ import brooklyn.entity.trait.Identifiable;
*
* Locations may not be {@link Serializable} in subsequent releases!
*/
-public interface Location extends Serializable, Identifiable {
+public interface Location extends Serializable, BrooklynObject {
/**
* A unique id for this location.
@@ -48,6 +48,7 @@ public interface Location extends Serializable, Identifiable {
* @return the name assigned to the location.
* @since 0.6 (previously getName())
*/
+ @Override
String getDisplayName();
/**
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/api/src/main/java/brooklyn/policy/EntityAdjunct.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/policy/EntityAdjunct.java b/api/src/main/java/brooklyn/policy/EntityAdjunct.java
index d0d0d37..fa05a2a 100644
--- a/api/src/main/java/brooklyn/policy/EntityAdjunct.java
+++ b/api/src/main/java/brooklyn/policy/EntityAdjunct.java
@@ -18,13 +18,13 @@
*/
package brooklyn.policy;
-import brooklyn.entity.trait.Identifiable;
+import brooklyn.basic.BrooklynObject;
/**
* EntityAdjuncts are supplementary logic that can be attached to Entities, providing sensor enrichment
* or enabling policy
*/
-public interface EntityAdjunct extends Identifiable {
+public interface EntityAdjunct extends BrooklynObject {
/**
* A unique id for this adjunct
*/
@@ -32,13 +32,6 @@ public interface EntityAdjunct extends Identifiable {
String getId();
/**
- * Get the name assigned to this adjunct
- *
- * @return the name assigned to the adjunct
- */
- String getDisplayName();
-
- /**
* @deprecated since 0.7; use {@link #getDisplayName()}
*/
@Deprecated
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/core/src/main/java/brooklyn/basic/AbstractBrooklynObject.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/basic/AbstractBrooklynObject.java b/core/src/main/java/brooklyn/basic/AbstractBrooklynObject.java
new file mode 100644
index 0000000..b64db51
--- /dev/null
+++ b/core/src/main/java/brooklyn/basic/AbstractBrooklynObject.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package brooklyn.basic;
+
+import brooklyn.util.flags.SetFromFlag;
+import brooklyn.util.text.Identifiers;
+
+public abstract class AbstractBrooklynObject implements BrooklynObjectInternal {
+
+ @SetFromFlag(value="id")
+ private String id = Identifiers.makeRandomId(8);
+
+ @Override
+ public String getId() {
+ return id;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/core/src/main/java/brooklyn/basic/BrooklynObjectInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/basic/BrooklynObjectInternal.java b/core/src/main/java/brooklyn/basic/BrooklynObjectInternal.java
new file mode 100644
index 0000000..76033dc
--- /dev/null
+++ b/core/src/main/java/brooklyn/basic/BrooklynObjectInternal.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package brooklyn.basic;
+
+import brooklyn.entity.rebind.Rebindable;
+
+public interface BrooklynObjectInternal extends BrooklynObject, Rebindable {
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
index 081e0a6..43debba 100644
--- a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
+++ b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
@@ -29,6 +29,7 @@ import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import brooklyn.basic.AbstractBrooklynObject;
import brooklyn.config.ConfigKey;
import brooklyn.config.ConfigKey.HasConfigKey;
import brooklyn.enricher.basic.AbstractEnricher;
@@ -77,10 +78,8 @@ import brooklyn.util.collections.MutableMap;
import brooklyn.util.collections.SetFromLiveMap;
import brooklyn.util.config.ConfigBag;
import brooklyn.util.flags.FlagUtils;
-import brooklyn.util.flags.SetFromFlag;
import brooklyn.util.guava.Maybe;
import brooklyn.util.task.DeferredSupplier;
-import brooklyn.util.text.Identifiers;
import brooklyn.util.text.Strings;
import com.google.common.annotations.Beta;
@@ -125,7 +124,7 @@ import com.google.common.collect.Sets;
* The legacy (pre 0.5) mechanism for creating entities is for others to call the constructor directly.
* This is now deprecated.
*/
-public abstract class AbstractEntity implements EntityLocal, EntityInternal {
+public abstract class AbstractEntity extends AbstractBrooklynObject implements EntityLocal, EntityInternal {
private static final Logger LOG = LoggerFactory.getLogger(AbstractEntity.class);
@@ -153,9 +152,6 @@ public abstract class AbstractEntity implements EntityLocal, EntityInternal {
public static final BasicNotificationSensor<Entity> CHILD_REMOVED = new BasicNotificationSensor<Entity>(Entity.class,
"entity.children.removed", "Child dynamically removed from entity");
- @SetFromFlag(value="id")
- private String id = Identifiers.makeRandomId(8);
-
private boolean displayNameAutoGenerated = true;
private Entity selfProxy;
@@ -281,13 +277,13 @@ public abstract class AbstractEntity implements EntityLocal, EntityInternal {
@Override
public int hashCode() {
- return id.hashCode();
+ return getId().hashCode();
}
@Override
public boolean equals(Object o) {
return (o == this || o == selfProxy) ||
- (o instanceof Entity && Objects.equal(id, ((Entity)o).getId()));
+ (o instanceof Entity && Objects.equal(getId(), ((Entity)o).getId()));
}
protected boolean isLegacyConstruction() {
@@ -298,11 +294,6 @@ public abstract class AbstractEntity implements EntityLocal, EntityInternal {
return RebindManagerImpl.RebindTracker.isRebinding();
}
- @Override
- public String getId() {
- return id;
- }
-
public void setProxy(Entity proxy) {
if (selfProxy != null) throw new IllegalStateException("Proxy is already set; cannot reset proxy for "+toString());
selfProxy = checkNotNull(proxy, "proxy");
@@ -364,7 +355,7 @@ public abstract class AbstractEntity implements EntityLocal, EntityInternal {
displayName.set((String) flags.remove("name"));
displayNameAutoGenerated = false;
} else if (isLegacyConstruction()) {
- displayName.set(getClass().getSimpleName()+":"+Strings.maxlen(id, 4));
+ displayName.set(getClass().getSimpleName()+":"+Strings.maxlen(getId(), 4));
displayNameAutoGenerated = true;
}
@@ -420,7 +411,7 @@ public abstract class AbstractEntity implements EntityLocal, EntityInternal {
public void setManagementContext(ManagementContextInternal managementContext) {
getManagementSupport().setManagementContext(managementContext);
entityType.setName(getEntityTypeName());
- if (displayNameAutoGenerated) displayName.set(getEntityType().getSimpleName()+":"+Strings.maxlen(id, 4));
+ if (displayNameAutoGenerated) displayName.set(getEntityType().getSimpleName()+":"+Strings.maxlen(getId(), 4));
Entity oldParent = parent.get();
Set<Group> oldGroups = groups;
@@ -432,13 +423,13 @@ public abstract class AbstractEntity implements EntityLocal, EntityInternal {
String oldDisplayName = displayName.get();
String oldIconUrl = iconUrl.get();
- parent = managementContext.getStorage().getReference(id+"-parent");
- groups = SetFromLiveMap.create(managementContext.getStorage().<Group,Boolean>getMap(id+"-groups"));
- children = SetFromLiveMap.create(managementContext.getStorage().<Entity,Boolean>getMap(id+"-children"));
- locations = managementContext.getStorage().getNonConcurrentList(id+"-locations");
- creationTimeUtc = managementContext.getStorage().getReference(id+"-creationTime");
- displayName = managementContext.getStorage().getReference(id+"-displayName");
- iconUrl = managementContext.getStorage().getReference(id+"-iconUrl");
+ parent = managementContext.getStorage().getReference(getId()+"-parent");
+ groups = SetFromLiveMap.create(managementContext.getStorage().<Group,Boolean>getMap(getId()+"-groups"));
+ children = SetFromLiveMap.create(managementContext.getStorage().<Entity,Boolean>getMap(getId()+"-children"));
+ locations = managementContext.getStorage().getNonConcurrentList(getId()+"-locations");
+ creationTimeUtc = managementContext.getStorage().getReference(getId()+"-creationTime");
+ displayName = managementContext.getStorage().getReference(getId()+"-displayName");
+ iconUrl = managementContext.getStorage().getReference(getId()+"-iconUrl");
// Only override stored defaults if we have actual values. We might be in setManagementContext
// because we are reconstituting an existing entity in a new brooklyn management-node (in which
@@ -458,13 +449,13 @@ public abstract class AbstractEntity implements EntityLocal, EntityInternal {
}
if (iconUrl.isNull()) iconUrl.set(oldIconUrl);
- configsInternal = new EntityConfigMap(this, managementContext.getStorage().<ConfigKey<?>, Object>getMap(id+"-config"));
+ configsInternal = new EntityConfigMap(this, managementContext.getStorage().<ConfigKey<?>, Object>getMap(getId()+"-config"));
if (oldConfig.getLocalConfig().size() > 0) {
configsInternal.setLocalConfig(oldConfig.getLocalConfig());
}
refreshInheritedConfig();
- attributesInternal = new AttributeMap(this, managementContext.getStorage().<Collection<String>, Object>getMap(id+"-attributes"));
+ attributesInternal = new AttributeMap(this, managementContext.getStorage().<Collection<String>, Object>getMap(getId()+"-attributes"));
if (oldAttribs.asRawMap().size() > 0) {
for (Map.Entry<Collection<String>,Object> entry : oldAttribs.asRawMap().entrySet()) {
attributesInternal.update(entry.getKey(), entry.getValue());
@@ -1217,7 +1208,7 @@ public abstract class AbstractEntity implements EntityLocal, EntityInternal {
public void onManagementStarting() {
if (isLegacyConstruction()) {
entityType.setName(getEntityTypeName());
- if (displayNameAutoGenerated) displayName.set(getEntityType().getSimpleName()+":"+Strings.maxlen(id, 4));
+ if (displayNameAutoGenerated) displayName.set(getEntityType().getSimpleName()+":"+Strings.maxlen(getId(), 4));
}
}
@@ -1249,14 +1240,14 @@ public abstract class AbstractEntity implements EntityLocal, EntityInternal {
public void onManagementStopped() {
if (getManagementContext().isRunning()) {
BrooklynStorage storage = ((ManagementContextInternal)getManagementContext()).getStorage();
- storage.remove(id+"-parent");
- storage.remove(id+"-groups");
- storage.remove(id+"-children");
- storage.remove(id+"-locations");
- storage.remove(id+"-creationTime");
- storage.remove(id+"-displayName");
- storage.remove(id+"-config");
- storage.remove(id+"-attributes");
+ storage.remove(getId()+"-parent");
+ storage.remove(getId()+"-groups");
+ storage.remove(getId()+"-children");
+ storage.remove(getId()+"-locations");
+ storage.remove(getId()+"-creationTime");
+ storage.remove(getId()+"-displayName");
+ storage.remove(getId()+"-config");
+ storage.remove(getId()+"-attributes");
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/core/src/main/java/brooklyn/entity/basic/EntityInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/EntityInternal.java b/core/src/main/java/brooklyn/entity/basic/EntityInternal.java
index 665ce10..7fef8c5 100644
--- a/core/src/main/java/brooklyn/entity/basic/EntityInternal.java
+++ b/core/src/main/java/brooklyn/entity/basic/EntityInternal.java
@@ -21,6 +21,7 @@ package brooklyn.entity.basic;
import java.util.Collection;
import java.util.Map;
+import brooklyn.basic.BrooklynObjectInternal;
import brooklyn.config.ConfigKey;
import brooklyn.entity.Effector;
import brooklyn.entity.rebind.RebindSupport;
@@ -41,7 +42,7 @@ import com.google.common.annotations.Beta;
* for the brooklyn framework only).
*/
@Beta
-public interface EntityInternal extends EntityLocal, Rebindable {
+public interface EntityInternal extends BrooklynObjectInternal, EntityLocal, Rebindable {
void addLocations(Collection<? extends Location> locations);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/core/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandlerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandlerImpl.java b/core/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandlerImpl.java
index 92f6619..799da62 100644
--- a/core/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandlerImpl.java
+++ b/core/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandlerImpl.java
@@ -24,7 +24,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.entity.trait.Identifiable;
+import brooklyn.basic.BrooklynObject;
import brooklyn.mementos.Memento;
import brooklyn.util.exceptions.Exceptions;
@@ -59,7 +59,7 @@ public class PersistenceExceptionHandlerImpl implements PersistenceExceptionHand
}
@Override
- public void onGenerateMementoFailed(BrooklynObjectType type, Identifiable instance, Exception e) {
+ public void onGenerateMementoFailed(BrooklynObjectType type, BrooklynObject instance, Exception e) {
String errmsg = "generate memento for "+type+" "+instance.getClass().getName()+"("+instance.getId()+")";
onErrorImpl(errmsg, e, prevFailedMementoGenerators.add(instance.getId()));
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java b/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java
index 53b0c5f..a13aa80 100644
--- a/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java
+++ b/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java
@@ -27,10 +27,10 @@ import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import brooklyn.basic.BrooklynObject;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.EntityLocal;
import brooklyn.entity.rebind.RebindManager.RebindFailureMode;
-import brooklyn.entity.trait.Identifiable;
import brooklyn.location.Location;
import brooklyn.policy.Enricher;
import brooklyn.policy.Policy;
@@ -188,7 +188,7 @@ public class RebindExceptionHandlerImpl implements RebindExceptionHandler {
}
@Override
- public void onRebindFailed(BrooklynObjectType type, Identifiable instance, Exception e) {
+ public void onRebindFailed(BrooklynObjectType type, BrooklynObject instance, Exception e) {
Exceptions.propagateIfFatal(e);
String errmsg = "problem rebinding "+type+" "+instance.getId()+" ("+instance+")";
@@ -255,7 +255,7 @@ public class RebindExceptionHandlerImpl implements RebindExceptionHandler {
}
@Override
- public void onManageFailed(BrooklynObjectType type, Identifiable instance, Exception e) {
+ public void onManageFailed(BrooklynObjectType type, BrooklynObject instance, Exception e) {
Exceptions.propagateIfFatal(e);
String errmsg = "problem managing "+type+" "+instance.getId()+" ("+instance+")";
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/AbstractLocation.java b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
index ebb5909..ce54536 100644
--- a/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
@@ -32,6 +32,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import brooklyn.basic.AbstractBrooklynObject;
import brooklyn.config.ConfigKey;
import brooklyn.config.ConfigKey.HasConfigKey;
import brooklyn.entity.basic.EntityDynamicType;
@@ -55,10 +56,8 @@ import brooklyn.mementos.LocationMemento;
import brooklyn.util.collections.SetFromLiveMap;
import brooklyn.util.config.ConfigBag;
import brooklyn.util.flags.FlagUtils;
-import brooklyn.util.flags.SetFromFlag;
import brooklyn.util.flags.TypeCoercions;
import brooklyn.util.stream.Streams;
-import brooklyn.util.text.Identifiers;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
@@ -77,7 +76,7 @@ import com.google.common.collect.Sets;
*
* Override {@link #configure(Map)} to add special initialization logic.
*/
-public abstract class AbstractLocation implements LocationInternal, HasHostGeoInfo, Configurable {
+public abstract class AbstractLocation extends AbstractBrooklynObject implements LocationInternal, HasHostGeoInfo, Configurable {
/** @deprecated since 0.7.0 shouldn't be public */
@Deprecated
@@ -87,9 +86,6 @@ public abstract class AbstractLocation implements LocationInternal, HasHostGeoIn
private final AtomicBoolean configured = new AtomicBoolean(false);
- @SetFromFlag(value="id")
- private String id = Identifiers.makeRandomId(8);
-
private Reference<Long> creationTimeUtc = new BasicReference<Long>(System.currentTimeMillis());
// _not_ set from flag; configured explicitly in configure, because we also need to update the parent's list of children
@@ -181,7 +177,7 @@ public abstract class AbstractLocation implements LocationInternal, HasHostGeoIn
public void setManagementContext(ManagementContextInternal managementContext) {
this.managementContext = managementContext;
- if (displayNameAutoGenerated && id != null) name.set(getClass().getSimpleName()+":"+id.substring(0, Math.min(id.length(),4)));
+ if (displayNameAutoGenerated && getId() != null) name.set(getClass().getSimpleName()+":"+getId().substring(0, Math.min(getId().length(),4)));
Location oldParent = parent.get();
Set<Location> oldChildren = children;
@@ -190,11 +186,11 @@ public abstract class AbstractLocation implements LocationInternal, HasHostGeoIn
String oldDisplayName = name.get();
HostGeoInfo oldHostGeoInfo = hostGeoInfo.get();
- parent = managementContext.getStorage().getReference(id+"-parent");
- children = SetFromLiveMap.create(managementContext.getStorage().<Location,Boolean>getMap(id+"-children"));
- creationTimeUtc = managementContext.getStorage().getReference(id+"-creationTime");
- hostGeoInfo = managementContext.getStorage().getReference(id+"-hostGeoInfo");
- name = managementContext.getStorage().getReference(id+"-displayName");
+ parent = managementContext.getStorage().getReference(getId()+"-parent");
+ children = SetFromLiveMap.create(managementContext.getStorage().<Location,Boolean>getMap(getId()+"-children"));
+ creationTimeUtc = managementContext.getStorage().getReference(getId()+"-creationTime");
+ hostGeoInfo = managementContext.getStorage().getReference(getId()+"-hostGeoInfo");
+ name = managementContext.getStorage().getReference(getId()+"-displayName");
// Only override stored defaults if we have actual values. We might be in setManagementContext
// because we are reconstituting an existing entity in a new brooklyn management-node (in which
@@ -212,7 +208,7 @@ public abstract class AbstractLocation implements LocationInternal, HasHostGeoIn
displayNameAutoGenerated = false;
}
- configBag = ConfigBag.newLiveInstance(managementContext.getStorage().<String,Object>getMap(id+"-config"));
+ configBag = ConfigBag.newLiveInstance(managementContext.getStorage().<String,Object>getMap(getId()+"-config"));
if (oldConfig.size() > 0) {
configBag.putAll(oldConfig);
}
@@ -264,7 +260,7 @@ public abstract class AbstractLocation implements LocationInternal, HasHostGeoIn
name.set((String) removeIfPossible(properties, "name"));
displayNameAutoGenerated = false;
} else if (isLegacyConstruction()) {
- name.set(getClass().getSimpleName()+":"+id.substring(0, Math.min(id.length(),4)));
+ name.set(getClass().getSimpleName()+":"+getId().substring(0, Math.min(getId().length(),4)));
displayNameAutoGenerated = true;
}
@@ -328,7 +324,7 @@ public abstract class AbstractLocation implements LocationInternal, HasHostGeoIn
}
public void onManagementStarted() {
- if (displayNameAutoGenerated) name.set(getClass().getSimpleName()+":"+id.substring(0, Math.min(id.length(),4)));
+ if (displayNameAutoGenerated) name.set(getClass().getSimpleName()+":"+getId().substring(0, Math.min(getId().length(),4)));
this.managed = true;
}
@@ -336,12 +332,12 @@ public abstract class AbstractLocation implements LocationInternal, HasHostGeoIn
this.managed = false;
if (managementContext.isRunning()) {
BrooklynStorage storage = ((ManagementContextInternal)managementContext).getStorage();
- storage.remove(id+"-parent");
- storage.remove(id+"-children");
- storage.remove(id+"-creationTime");
- storage.remove(id+"-hostGeoInfo");
- storage.remove(id+"-displayName");
- storage.remove(id+"-config");
+ storage.remove(getId()+"-parent");
+ storage.remove(getId()+"-children");
+ storage.remove(getId()+"-creationTime");
+ storage.remove(getId()+"-hostGeoInfo");
+ storage.remove(getId()+"-displayName");
+ storage.remove(getId()+"-config");
}
}
@@ -350,11 +346,6 @@ public abstract class AbstractLocation implements LocationInternal, HasHostGeoIn
}
@Override
- public String getId() {
- return id;
- }
-
- @Override
public String getDisplayName() {
return name.get();
}
@@ -559,7 +550,7 @@ public abstract class AbstractLocation implements LocationInternal, HasHostGeoIn
/** override this, adding to the returned value, to supply additional fields to include in the toString */
protected ToStringHelper string() {
- return Objects.toStringHelper(getClass()).add("id", id).add("name", name);
+ return Objects.toStringHelper(getClass()).add("id", getId()).add("name", name);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/core/src/main/java/brooklyn/location/basic/LocationInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/LocationInternal.java b/core/src/main/java/brooklyn/location/basic/LocationInternal.java
index 4450822..8c8f38c 100644
--- a/core/src/main/java/brooklyn/location/basic/LocationInternal.java
+++ b/core/src/main/java/brooklyn/location/basic/LocationInternal.java
@@ -20,6 +20,7 @@ package brooklyn.location.basic;
import java.util.Map;
+import brooklyn.basic.BrooklynObjectInternal;
import brooklyn.config.ConfigKey;
import brooklyn.entity.basic.ConfigKeys;
import brooklyn.entity.rebind.RebindSupport;
@@ -34,7 +35,7 @@ import com.google.common.annotations.Beta;
/**
* Information about locations private to Brooklyn.
*/
-public interface LocationInternal extends Location, Rebindable {
+public interface LocationInternal extends BrooklynObjectInternal, Location {
@Beta
public static final ConfigKey<String> ORIGINAL_SPEC = ConfigKeys.newStringConfigKey("spec.original", "The original spec used to instantiate a location");
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
index b6dd15f..7774825 100644
--- a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
+++ b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
@@ -31,6 +31,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import brooklyn.basic.AbstractBrooklynObject;
+import brooklyn.basic.BrooklynObjectInternal;
import brooklyn.config.ConfigKey;
import brooklyn.config.ConfigMap;
import brooklyn.entity.Entity;
@@ -53,7 +55,6 @@ import brooklyn.util.config.ConfigBag;
import brooklyn.util.flags.FlagUtils;
import brooklyn.util.flags.SetFromFlag;
import brooklyn.util.flags.TypeCoercions;
-import brooklyn.util.text.Identifiers;
import com.google.common.annotations.Beta;
import com.google.common.base.Objects;
@@ -64,7 +65,7 @@ import com.google.common.collect.Maps;
/**
* Common functionality for policies and enrichers
*/
-public abstract class AbstractEntityAdjunct implements EntityAdjunct, Configurable {
+public abstract class AbstractEntityAdjunct extends AbstractBrooklynObject implements BrooklynObjectInternal, EntityAdjunct, Configurable {
private static final Logger log = LoggerFactory.getLogger(AbstractEntityAdjunct.class);
private volatile ManagementContext managementContext;
@@ -88,9 +89,6 @@ public abstract class AbstractEntityAdjunct implements EntityAdjunct, Configurab
protected final AdjunctType adjunctType = new AdjunctType(this);
@SetFromFlag
- protected String id = Identifiers.makeRandomId(8);
-
- @SetFromFlag
protected String name;
protected transient EntityLocal entity;
@@ -292,11 +290,6 @@ public abstract class AbstractEntityAdjunct implements EntityAdjunct, Configurab
@Deprecated
public void setName(String name) { setDisplayName(name); }
- @Override
- public String getId() { return id; }
-
- public void setId(String id) { this.id = id; }
-
public void setEntity(EntityLocal entity) {
if (destroyed.get()) throw new IllegalStateException("Cannot set entity on a destroyed entity adjunct");
this.entity = entity;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0194580e/core/src/test/java/brooklyn/entity/rebind/RecordingRebindExceptionHandler.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RecordingRebindExceptionHandler.java b/core/src/test/java/brooklyn/entity/rebind/RecordingRebindExceptionHandler.java
index f9dbe78..2cec642 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RecordingRebindExceptionHandler.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RecordingRebindExceptionHandler.java
@@ -21,8 +21,8 @@ package brooklyn.entity.rebind;
import java.util.List;
import java.util.Map;
+import brooklyn.basic.BrooklynObject;
import brooklyn.entity.Entity;
-import brooklyn.entity.trait.Identifiable;
import brooklyn.location.Location;
import com.google.common.collect.Lists;
@@ -32,8 +32,8 @@ public class RecordingRebindExceptionHandler extends RebindExceptionHandlerImpl
protected final List<Exception> loadMementoFailures = Lists.newArrayList();
protected final Map<String, Exception> createFailures = Maps.newLinkedHashMap();
- protected final Map<Identifiable, Exception> rebindFailures = Maps.newLinkedHashMap();
- protected final Map<Identifiable, Exception> manageFailures = Maps.newLinkedHashMap();
+ protected final Map<BrooklynObject, Exception> rebindFailures = Maps.newLinkedHashMap();
+ protected final Map<BrooklynObject, Exception> manageFailures = Maps.newLinkedHashMap();
protected final Map<String, Exception> notFoundFailures = Maps.newLinkedHashMap();
protected Exception failed;
@@ -70,13 +70,13 @@ public class RecordingRebindExceptionHandler extends RebindExceptionHandlerImpl
}
@Override
- public void onRebindFailed(BrooklynObjectType type, Identifiable instance, Exception e) {
+ public void onRebindFailed(BrooklynObjectType type, BrooklynObject instance, Exception e) {
rebindFailures.put(instance, new IllegalStateException("problem rebinding "+type+" "+instance.getId()+" ("+instance+")", e));
super.onRebindFailed(type, instance, e);
}
@Override
- public void onManageFailed(BrooklynObjectType type, Identifiable instance, Exception e) {
+ public void onManageFailed(BrooklynObjectType type, BrooklynObject instance, Exception e) {
manageFailures.put(instance, new IllegalStateException("problem managing "+type+" "+instance.getId()+" ("+instance+")", e));
super.onManageFailed(type, instance, e);
}
[5/8] git commit: Remove duplication in rebind code
Posted by he...@apache.org.
Remove duplication in rebind code
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/cbb6e40c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/cbb6e40c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/cbb6e40c
Branch: refs/heads/master
Commit: cbb6e40c55fa7d2e1382fecbfff0d70ff7b4f79f
Parents: e07155a
Author: Aled Sage <al...@gmail.com>
Authored: Mon Jul 14 15:55:27 2014 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Jul 14 23:45:19 2014 +0100
----------------------------------------------------------------------
.../entity/rebind/BrooklynObjectType.java | 30 +++
.../rebind/PersistenceExceptionHandler.java | 13 +-
.../entity/rebind/RebindExceptionHandler.java | 43 +---
.../brooklyn/entity/basic/EntityFunctions.java | 7 +-
.../rebind/PeriodicDeltaChangeListener.java | 8 +-
.../rebind/PersistenceExceptionHandlerImpl.java | 29 +--
.../rebind/RebindExceptionHandlerImpl.java | 244 ++++---------------
.../entity/rebind/RebindManagerImpl.java | 36 ++-
.../entity/rebind/dto/BrooklynMementoImpl.java | 20 +-
.../BrooklynMementoPersisterToFile.java | 1 +
.../BrooklynMementoPersisterToMultiFile.java | 20 +-
.../BrooklynMementoPersisterToObjectStore.java | 97 +++-----
.../entity/rebind/RebindFailuresTest.java | 17 +-
.../rebind/RecordingRebindExceptionHandler.java | 113 ++-------
14 files changed, 210 insertions(+), 468 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cbb6e40c/api/src/main/java/brooklyn/entity/rebind/BrooklynObjectType.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/rebind/BrooklynObjectType.java b/api/src/main/java/brooklyn/entity/rebind/BrooklynObjectType.java
new file mode 100644
index 0000000..a027867
--- /dev/null
+++ b/api/src/main/java/brooklyn/entity/rebind/BrooklynObjectType.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package brooklyn.entity.rebind;
+
+import com.google.common.annotations.Beta;
+
+@Beta
+public enum BrooklynObjectType {
+ ENTITY,
+ LOCATION,
+ POLICY,
+ ENRICHER,
+ UNKNOWN;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cbb6e40c/api/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandler.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandler.java b/api/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandler.java
index 657d2b0..024cbb1 100644
--- a/api/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandler.java
+++ b/api/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandler.java
@@ -18,11 +18,8 @@
*/
package brooklyn.entity.rebind;
-import brooklyn.entity.Entity;
-import brooklyn.location.Location;
+import brooklyn.entity.trait.Identifiable;
import brooklyn.mementos.Memento;
-import brooklyn.policy.Enricher;
-import brooklyn.policy.Policy;
import com.google.common.annotations.Beta;
@@ -36,14 +33,8 @@ public interface PersistenceExceptionHandler {
void stop();
- void onGenerateLocationMementoFailed(Location location, Exception e);
-
- void onGenerateEntityMementoFailed(Entity entity, Exception e);
-
- void onGeneratePolicyMementoFailed(Policy policy, Exception e);
+ void onGenerateMementoFailed(BrooklynObjectType type, Identifiable instance, Exception e);
- void onGenerateEnricherMementoFailed(Enricher enricher, Exception e);
-
void onPersistMementoFailed(Memento memento, Exception e);
void onDeleteMementoFailed(String id, Exception e);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cbb6e40c/api/src/main/java/brooklyn/entity/rebind/RebindExceptionHandler.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/rebind/RebindExceptionHandler.java b/api/src/main/java/brooklyn/entity/rebind/RebindExceptionHandler.java
index 7330bbf..4e5aa60 100644
--- a/api/src/main/java/brooklyn/entity/rebind/RebindExceptionHandler.java
+++ b/api/src/main/java/brooklyn/entity/rebind/RebindExceptionHandler.java
@@ -20,6 +20,7 @@ package brooklyn.entity.rebind;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.EntityLocal;
+import brooklyn.entity.trait.Identifiable;
import brooklyn.location.Location;
import brooklyn.policy.Enricher;
import brooklyn.policy.Policy;
@@ -34,15 +35,7 @@ import com.google.common.annotations.Beta;
@Beta
public interface RebindExceptionHandler {
- void onLoadBrooklynMementoFailed(String msg, Exception e);
-
- void onLoadLocationMementoFailed(String msg, Exception e);
-
- void onLoadEntityMementoFailed(String msg, Exception e);
-
- void onLoadPolicyMementoFailed(String msg, Exception e);
-
- void onLoadEnricherMementoFailed(String msg, Exception e);
+ void onLoadMementoFailed(BrooklynObjectType type, String msg, Exception e);
/**
* @return the entity to use in place of the missing one, or null (if hasn't thrown an exception)
@@ -64,41 +57,17 @@ public interface RebindExceptionHandler {
*/
Enricher onDanglingEnricherRef(String id);
- void onCreateLocationFailed(String locId, String locType, Exception e);
-
- void onCreateEntityFailed(String entityId, String entityType, Exception e);
-
- void onCreatePolicyFailed(String id, String type, Exception e);
-
- void onCreateEnricherFailed(String id, String type, Exception e);
-
- void onLocationNotFound(String id);
-
- void onEntityNotFound(String id);
-
- void onPolicyNotFound(String id);
-
- void onPolicyNotFound(String id, String context);
-
- void onEnricherNotFound(String id);
+ void onCreateFailed(BrooklynObjectType type, String id, String instanceType, Exception e);
- void onEnricherNotFound(String id, String context);
+ void onNotFound(BrooklynObjectType type, String id);
- void onRebindEntityFailed(Entity entity, Exception e);
-
- void onRebindLocationFailed(Location location, Exception e);
-
- void onRebindPolicyFailed(Policy policy, Exception e);
-
- void onRebindEnricherFailed(Enricher enricher, Exception e);
+ void onRebindFailed(BrooklynObjectType type, Identifiable instance, Exception e);
void onAddPolicyFailed(EntityLocal entity, Policy policy, Exception e);
void onAddEnricherFailed(EntityLocal entity, Enricher enricher, Exception e);
- void onManageLocationFailed(Location location, Exception e);
-
- void onManageEntityFailed(Entity entity, Exception e);
+ void onManageFailed(BrooklynObjectType type, Identifiable instance, Exception e);
void onDone();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cbb6e40c/core/src/main/java/brooklyn/entity/basic/EntityFunctions.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/EntityFunctions.java b/core/src/main/java/brooklyn/entity/basic/EntityFunctions.java
index 4226a54..af9454c 100644
--- a/core/src/main/java/brooklyn/entity/basic/EntityFunctions.java
+++ b/core/src/main/java/brooklyn/entity/basic/EntityFunctions.java
@@ -26,6 +26,7 @@ import java.util.Map;
import brooklyn.config.ConfigKey;
import brooklyn.entity.Application;
import brooklyn.entity.Entity;
+import brooklyn.entity.trait.Identifiable;
import brooklyn.event.AttributeSensor;
import brooklyn.management.ManagementContext;
import brooklyn.util.flags.TypeCoercions;
@@ -59,9 +60,9 @@ public class EntityFunctions {
};
}
- public static Function<Entity, String> id() {
- return new Function<Entity, String>() {
- @Override public String apply(Entity input) {
+ public static Function<Identifiable, String> id() {
+ return new Function<Identifiable, String>() {
+ @Override public String apply(Identifiable input) {
return (input == null) ? null : input.getId();
}
};
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cbb6e40c/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java b/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java
index 6507dc7..955ba2e 100644
--- a/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java
+++ b/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java
@@ -225,28 +225,28 @@ public class PeriodicDeltaChangeListener implements ChangeListener {
try {
persisterDelta.locations.add(((LocationInternal)location).getRebindSupport().getMemento());
} catch (Exception e) {
- exceptionHandler.onGenerateLocationMementoFailed(location, e);
+ exceptionHandler.onGenerateMementoFailed(BrooklynObjectType.LOCATION, location, e);
}
}
for (Entity entity : prevDeltaCollector.entities) {
try {
persisterDelta.entities.add(((EntityInternal)entity).getRebindSupport().getMemento());
} catch (Exception e) {
- exceptionHandler.onGenerateEntityMementoFailed(entity, e);
+ exceptionHandler.onGenerateMementoFailed(BrooklynObjectType.ENTITY, entity, e);
}
}
for (Policy policy : prevDeltaCollector.policies) {
try {
persisterDelta.policies.add(policy.getRebindSupport().getMemento());
} catch (Exception e) {
- exceptionHandler.onGeneratePolicyMementoFailed(policy, e);
+ exceptionHandler.onGenerateMementoFailed(BrooklynObjectType.POLICY, policy, e);
}
}
for (Enricher enricher : prevDeltaCollector.enrichers) {
try {
persisterDelta.enrichers.add(enricher.getRebindSupport().getMemento());
} catch (Exception e) {
- exceptionHandler.onGenerateEnricherMementoFailed(enricher, e);
+ exceptionHandler.onGenerateMementoFailed(BrooklynObjectType.ENRICHER, enricher, e);
}
}
persisterDelta.removedLocationIds = prevDeltaCollector.removedLocationIds;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cbb6e40c/core/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandlerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandlerImpl.java b/core/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandlerImpl.java
index c8038a2..92f6619 100644
--- a/core/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandlerImpl.java
+++ b/core/src/main/java/brooklyn/entity/rebind/PersistenceExceptionHandlerImpl.java
@@ -24,11 +24,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.entity.Entity;
-import brooklyn.location.Location;
+import brooklyn.entity.trait.Identifiable;
import brooklyn.mementos.Memento;
-import brooklyn.policy.Enricher;
-import brooklyn.policy.Policy;
import brooklyn.util.exceptions.Exceptions;
import com.google.common.collect.Sets;
@@ -62,27 +59,9 @@ public class PersistenceExceptionHandlerImpl implements PersistenceExceptionHand
}
@Override
- public void onGenerateEntityMementoFailed(Entity entity, Exception e) {
- String errmsg = "generate memento for entity "+entity.getEntityType().getSimpleName()+"("+entity.getId()+")";
- onErrorImpl(errmsg, e, prevFailedMementoGenerators.add(entity.getId()));
- }
-
- @Override
- public void onGenerateLocationMementoFailed(Location location, Exception e) {
- String errmsg = "generate memento for location "+location.getClass().getSimpleName()+"("+location.getId()+")";
- onErrorImpl(errmsg, e, prevFailedMementoGenerators.add(location.getId()));
- }
-
- @Override
- public void onGeneratePolicyMementoFailed(Policy policy, Exception e) {
- String errmsg = "generate memento for policy "+policy.getClass().getSimpleName()+"("+policy.getId()+")";
- onErrorImpl(errmsg, e, prevFailedMementoGenerators.add(policy.getId()));
- }
-
- @Override
- public void onGenerateEnricherMementoFailed(Enricher enricher, Exception e) {
- String errmsg = "generate memento for enricher "+enricher.getClass().getSimpleName()+"("+enricher.getId()+")";
- onErrorImpl(errmsg, e, prevFailedMementoGenerators.add(enricher.getId()));
+ public void onGenerateMementoFailed(BrooklynObjectType type, Identifiable instance, Exception e) {
+ String errmsg = "generate memento for "+type+" "+instance.getClass().getName()+"("+instance.getId()+")";
+ onErrorImpl(errmsg, e, prevFailedMementoGenerators.add(instance.getId()));
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cbb6e40c/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java b/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java
index 4a1a5b2..53b0c5f 100644
--- a/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java
+++ b/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java
@@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.EntityLocal;
import brooklyn.entity.rebind.RebindManager.RebindFailureMode;
+import brooklyn.entity.trait.Identifiable;
import brooklyn.location.Location;
import brooklyn.policy.Enricher;
import brooklyn.policy.Policy;
@@ -52,10 +53,7 @@ public class RebindExceptionHandlerImpl implements RebindExceptionHandler {
protected final Set<String> missingLocations = Sets.newConcurrentHashSet();
protected final Set<String> missingPolicies = Sets.newConcurrentHashSet();
protected final Set<String> missingEnrichers = Sets.newConcurrentHashSet();
- protected final Set<String> creationFailedEntities = Sets.newConcurrentHashSet();
- protected final Set<String> creationFailedLocations = Sets.newConcurrentHashSet();
- protected final Set<String> creationFailedPolicies = Sets.newConcurrentHashSet();
- protected final Set<String> creationFailedEnrichers = Sets.newConcurrentHashSet();
+ protected final Set<String> creationFailedIds = Sets.newConcurrentHashSet();
protected final Set<Exception> addPolicyFailures = Sets.newConcurrentHashSet();
protected final Set<Exception> loadPolicyFailures = Sets.newConcurrentHashSet();
protected final List<Exception> exceptions = Collections.synchronizedList(Lists.<Exception>newArrayList());
@@ -99,64 +97,31 @@ public class RebindExceptionHandlerImpl implements RebindExceptionHandler {
}
@Override
- public void onLoadBrooklynMementoFailed(String msg, Exception e) {
- onLoadMementoFailure(msg, e);
- }
-
- @Override
- public void onLoadLocationMementoFailed(String msg, Exception e) {
- onLoadMementoFailure(msg, e);
- }
-
- @Override
- public void onLoadEntityMementoFailed(String msg, Exception e) {
- onLoadMementoFailure(msg, e);
- }
-
- @Override
- public void onLoadPolicyMementoFailed(String msg, Exception e) {
- Exceptions.propagateIfFatal(e);
- String errmsg = "problem loading memento: "+msg;
-
- switch (loadPolicyFailureMode) {
- case FAIL_FAST:
- throw new IllegalStateException("Rebind: aborting due to "+errmsg, e);
- case FAIL_AT_END:
- loadPolicyFailures.add(new IllegalStateException(errmsg, e));
- break;
- case CONTINUE:
- LOG.warn(errmsg+"; continuing", e);
- break;
- default:
- throw new IllegalStateException("Unexpected state '"+loadPolicyFailureMode+"' for loadPolicyFailureMode");
- }
- }
-
- @Override
- public void onLoadEnricherMementoFailed(String msg, Exception e) {
+ public void onLoadMementoFailed(BrooklynObjectType type, String msg, Exception e) {
Exceptions.propagateIfFatal(e);
String errmsg = "problem loading memento: "+msg;
- switch (loadPolicyFailureMode) {
- case FAIL_FAST:
- throw new IllegalStateException("Rebind: aborting due to "+errmsg, e);
- case FAIL_AT_END:
- loadPolicyFailures.add(new IllegalStateException(errmsg, e));
- break;
- case CONTINUE:
- LOG.warn(errmsg+"; continuing", e);
- break;
- default:
- throw new IllegalStateException("Unexpected state '"+loadPolicyFailureMode+"' for loadPolicyFailureMode");
+ switch (type) {
+ case POLICY:
+ case ENRICHER:
+ switch (loadPolicyFailureMode) {
+ case FAIL_FAST:
+ throw new IllegalStateException("Rebind: aborting due to "+errmsg, e);
+ case FAIL_AT_END:
+ loadPolicyFailures.add(new IllegalStateException(errmsg, e));
+ break;
+ case CONTINUE:
+ LOG.warn(errmsg+"; continuing", e);
+ break;
+ default:
+ throw new IllegalStateException("Unexpected state '"+loadPolicyFailureMode+"' for loadPolicyFailureMode");
+ }
+ break;
+ default:
+ exceptions.add(new IllegalStateException(errmsg, e));
+ onErrorImpl(errmsg, e);
}
}
-
- protected void onLoadMementoFailure(String msg, Exception e) {
- Exceptions.propagateIfFatal(e);
- String errmsg = "problem loading memento: "+msg;
- exceptions.add(new IllegalStateException(errmsg, e));
- onErrorImpl(errmsg, e);
- }
@Override
public Entity onDanglingEntityRef(String id) {
@@ -203,151 +168,51 @@ public class RebindExceptionHandlerImpl implements RebindExceptionHandler {
}
@Override
- public void onCreateLocationFailed(String id, String type, Exception e) {
- Exceptions.propagateIfFatal(e);
- String errmsg = "problem creating location "+id+" of type "+type;
- creationFailedLocations.add(id);
- exceptions.add(new IllegalStateException(errmsg, e));
- onErrorImpl(errmsg, e);
- }
-
- @Override
- public void onCreateEntityFailed(String id, String type, Exception e) {
- Exceptions.propagateIfFatal(e);
- String errmsg = "problem creating entity "+id+" of type "+type;
- creationFailedEntities.add(id);
- exceptions.add(new IllegalStateException(errmsg, e));
- onErrorImpl(errmsg, e);
- }
-
-
- @Override
- public void onCreatePolicyFailed(String id, String type, Exception e) {
+ public void onCreateFailed(BrooklynObjectType type, String id, String instanceType, Exception e) {
Exceptions.propagateIfFatal(e);
- String errmsg = "problem creating policy "+id+" of type "+type;
- creationFailedPolicies.add(id);
+ String errmsg = "problem creating "+type+" "+id+" of type "+instanceType;
+ creationFailedIds.add(id);
exceptions.add(new IllegalStateException(errmsg, e));
onErrorImpl(errmsg, e);
}
-
- @Override
- public void onCreateEnricherFailed(String id, String type, Exception e) {
- Exceptions.propagateIfFatal(e);
- String errmsg = "problem creating policy "+id+" of type "+type;
- creationFailedEnrichers.add(id);
- exceptions.add(new IllegalStateException(errmsg, e));
- onErrorImpl(errmsg, e);
- }
-
- @Override
- public void onLocationNotFound(String id) {
- if (creationFailedLocations.contains(id)) {
- // already know about this; ignore
- } else {
- String errmsg = "location '"+id+"' not found";
- exceptions.add(new IllegalStateException(errmsg));
- onErrorImpl(errmsg);
- }
- }
-
- @Override
- public void onEntityNotFound(String id) {
- if (creationFailedEntities.contains(id)) {
- // already know about this; ignore
- } else {
- String errmsg = "entity '"+id+"' not found";
- exceptions.add(new IllegalStateException(errmsg));
- onErrorImpl(errmsg);
- }
- }
@Override
- public void onPolicyNotFound(String id) {
- onPolicyNotFound(id, null);
- }
-
- @Override
- public void onPolicyNotFound(String id, String context) {
- if (creationFailedPolicies.contains(id)) {
+ public void onNotFound(BrooklynObjectType type, String id) {
+ if (creationFailedIds.contains(id)) {
// already know about this; ignore
} else {
- String errmsg = "policy '"+id+"' not found" + (context == null ? "" : "("+context+")");
+ String errmsg = type+" '"+id+"' not found";
exceptions.add(new IllegalStateException(errmsg));
onErrorImpl(errmsg);
}
}
-
- @Override
- public void onEnricherNotFound(String id) {
- onEnricherNotFound(id, null);
- }
@Override
- public void onEnricherNotFound(String id, String context) {
- if (creationFailedEnrichers.contains(id)) {
- // already know about this; ignore
- } else {
- String errmsg = "enricher '"+id+"' not found" + (context == null ? "" : "("+context+")");
- exceptions.add(new IllegalStateException(errmsg));
- onErrorImpl(errmsg);
- }
- }
-
- @Override
- public void onRebindLocationFailed(Location location, Exception e) {
- Exceptions.propagateIfFatal(e);
- String errmsg = "problem rebinding location "+location.getId()+" ("+location+")";
-
- exceptions.add(new IllegalStateException(errmsg, e));
- onErrorImpl(errmsg, e);
- }
-
- @Override
- public void onRebindEntityFailed(Entity entity, Exception e) {
- Exceptions.propagateIfFatal(e);
- String errmsg = "problem rebinding entity "+entity.getId()+" ("+entity+")";
-
- exceptions.add(new IllegalStateException(errmsg, e));
- onErrorImpl(errmsg, e);
- }
-
- @Override
- public void onRebindPolicyFailed(Policy policy, Exception e) {
+ public void onRebindFailed(BrooklynObjectType type, Identifiable instance, Exception e) {
Exceptions.propagateIfFatal(e);
- String errmsg = "problem rebinding plicy "+policy.getId()+" ("+policy+")";
+ String errmsg = "problem rebinding "+type+" "+instance.getId()+" ("+instance+")";
- switch (addPolicyFailureMode) {
- case FAIL_FAST:
- throw new IllegalStateException("Rebind: aborting due to "+errmsg, e);
- case FAIL_AT_END:
- addPolicyFailures.add(new IllegalStateException(errmsg, e));
- break;
- case CONTINUE:
- LOG.warn(errmsg+"; continuing", e);
- creationFailedPolicies.add(policy.getId());
+ switch (type) {
+ case ENRICHER:
+ case POLICY:
+ switch (addPolicyFailureMode) {
+ case FAIL_FAST:
+ throw new IllegalStateException("Rebind: aborting due to "+errmsg, e);
+ case FAIL_AT_END:
+ addPolicyFailures.add(new IllegalStateException(errmsg, e));
+ break;
+ case CONTINUE:
+ LOG.warn(errmsg+"; continuing", e);
+ creationFailedIds.add(instance.getId());
+ break;
+ default:
+ throw new IllegalStateException("Unexpected state '"+addPolicyFailureMode+"' for addPolicyFailureMode");
+ }
break;
default:
- throw new IllegalStateException("Unexpected state '"+addPolicyFailureMode+"' for addPolicyFailureMode");
- }
- }
-
- @Override
- public void onRebindEnricherFailed(Enricher enricher, Exception e) {
- Exceptions.propagateIfFatal(e);
- String errmsg = "problem rebinding enricher "+enricher.getId()+" ("+enricher+")";
-
- switch (addPolicyFailureMode) {
- case FAIL_FAST:
- throw new IllegalStateException("Rebind: aborting due to "+errmsg, e);
- case FAIL_AT_END:
- addPolicyFailures.add(new IllegalStateException(errmsg, e));
+ exceptions.add(new IllegalStateException(errmsg, e));
+ onErrorImpl(errmsg, e);
break;
- case CONTINUE:
- LOG.warn(errmsg+"; continuing", e);
- creationFailedEnrichers.add(enricher.getId());
- break;
- default:
- throw new IllegalStateException("Unexpected state '"+addPolicyFailureMode+"' for addPolicyFailureMode");
}
}
@@ -390,23 +255,14 @@ public class RebindExceptionHandlerImpl implements RebindExceptionHandler {
}
@Override
- public void onManageLocationFailed(Location location, Exception e) {
+ public void onManageFailed(BrooklynObjectType type, Identifiable instance, Exception e) {
Exceptions.propagateIfFatal(e);
- String errmsg = "problem managing location "+location.getId()+" ("+location+")";
+ String errmsg = "problem managing "+type+" "+instance.getId()+" ("+instance+")";
exceptions.add(new IllegalStateException(errmsg, e));
onErrorImpl(errmsg, e);
}
- @Override
- public void onManageEntityFailed(Entity entity, Exception e) {
- Exceptions.propagateIfFatal(e);
- String errmsg = "problem managing entity "+entity.getId()+" ("+entity+")";
-
- exceptions.add(new IllegalStateException(errmsg, e));
- onErrorImpl(errmsg, e);
- }
-
protected void onErrorImpl(String errmsg) {
onErrorImpl(errmsg, null);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cbb6e40c/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
index 34a529e..2bd121c 100644
--- a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
+++ b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
@@ -23,7 +23,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
import java.io.IOException;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@@ -40,7 +39,6 @@ import brooklyn.entity.basic.AbstractEntity;
import brooklyn.entity.basic.ConfigKeys;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.basic.EntityInternal;
-import brooklyn.entity.proxying.EntitySpec;
import brooklyn.entity.proxying.InternalEntityFactory;
import brooklyn.entity.proxying.InternalFactory;
import brooklyn.entity.proxying.InternalLocationFactory;
@@ -316,7 +314,7 @@ public class RebindManagerImpl implements RebindManager {
locations.put(locId, location);
rebindContext.registerLocation(locId, location);
} catch (Exception e) {
- exceptionHandler.onCreateLocationFailed(locId, locType, e);
+ exceptionHandler.onCreateFailed(BrooklynObjectType.LOCATION, locId, locType, e);
}
}
@@ -332,7 +330,7 @@ public class RebindManagerImpl implements RebindManager {
entities.put(entityId, entity);
rebindContext.registerEntity(entityId, entity);
} catch (Exception e) {
- exceptionHandler.onCreateEntityFailed(entityId, entityType, e);
+ exceptionHandler.onCreateFailed(BrooklynObjectType.ENTITY, entityId, entityType, e);
}
}
@@ -349,7 +347,7 @@ public class RebindManagerImpl implements RebindManager {
policies.put(policyMemento.getId(), policy);
rebindContext.registerPolicy(policyMemento.getId(), policy);
} catch (Exception e) {
- exceptionHandler.onCreatePolicyFailed(policyMemento.getId(), policyMemento.getType(), e);
+ exceptionHandler.onCreateFailed(BrooklynObjectType.POLICY, policyMemento.getId(), policyMemento.getType(), e);
}
}
} else {
@@ -367,7 +365,7 @@ public class RebindManagerImpl implements RebindManager {
enrichers.put(enricherMemento.getId(), enricher);
rebindContext.registerEnricher(enricherMemento.getId(), enricher);
} catch (Exception e) {
- exceptionHandler.onCreateEnricherFailed(enricherMemento.getId(), enricherMemento.getType(), e);
+ exceptionHandler.onCreateFailed(BrooklynObjectType.ENRICHER, enricherMemento.getId(), enricherMemento.getType(), e);
}
}
} else {
@@ -385,12 +383,12 @@ public class RebindManagerImpl implements RebindManager {
if (LOG.isDebugEnabled()) LOG.debug("RebindManager reconstructing location {}", locMemento);
if (location == null) {
// usually because of creation-failure, when not using fail-fast
- exceptionHandler.onLocationNotFound(locMemento.getId());
+ exceptionHandler.onNotFound(BrooklynObjectType.LOCATION, locMemento.getId());
} else {
try {
((LocationInternal)location).getRebindSupport().reconstruct(rebindContext, locMemento);
} catch (Exception e) {
- exceptionHandler.onRebindLocationFailed(location, e);
+ exceptionHandler.onRebindFailed(BrooklynObjectType.LOCATION, location, e);
}
}
}
@@ -404,12 +402,12 @@ public class RebindManagerImpl implements RebindManager {
if (policy == null) {
// usually because of creation-failure, when not using fail-fast
- exceptionHandler.onPolicyNotFound(policyMemento.getId());
+ exceptionHandler.onNotFound(BrooklynObjectType.POLICY, policyMemento.getId());
} else {
try {
policy.getRebindSupport().reconstruct(rebindContext, policyMemento);
} catch (Exception e) {
- exceptionHandler.onRebindPolicyFailed(policy, e);
+ exceptionHandler.onRebindFailed(BrooklynObjectType.POLICY, policy, e);
rebindContext.unregisterPolicy(policy);
}
}
@@ -425,12 +423,12 @@ public class RebindManagerImpl implements RebindManager {
if (enricher == null) {
// usually because of creation-failure, when not using fail-fast
- exceptionHandler.onEnricherNotFound(enricherMemento.getId());
+ exceptionHandler.onNotFound(BrooklynObjectType.ENRICHER, enricherMemento.getId());
} else {
try {
enricher.getRebindSupport().reconstruct(rebindContext, enricherMemento);
} catch (Exception e) {
- exceptionHandler.onRebindEnricherFailed(enricher, e);
+ exceptionHandler.onRebindFailed(BrooklynObjectType.ENRICHER, enricher, e);
rebindContext.unregisterEnricher(enricher);
}
}
@@ -446,13 +444,13 @@ public class RebindManagerImpl implements RebindManager {
if (entity == null) {
// usually because of creation-failure, when not using fail-fast
- exceptionHandler.onEntityNotFound(entityMemento.getId());
+ exceptionHandler.onNotFound(BrooklynObjectType.ENTITY, entityMemento.getId());
} else {
try {
entityMemento.injectTypeClass(entity.getClass());
((EntityInternal)entity).getRebindSupport().reconstruct(rebindContext, entityMemento);
} catch (Exception e) {
- exceptionHandler.onRebindEntityFailed(entity, e);
+ exceptionHandler.onRebindFailed(BrooklynObjectType.ENTITY, entity, e);
}
}
}
@@ -469,14 +467,14 @@ public class RebindManagerImpl implements RebindManager {
if (entity == null) {
// usually because of creation-failure, when not using fail-fast
- exceptionHandler.onEntityNotFound(entityMemento.getId());
+ exceptionHandler.onNotFound(BrooklynObjectType.ENTITY, entityMemento.getId());
} else {
try {
entityMemento.injectTypeClass(entity.getClass());
((EntityInternal)entity).getRebindSupport().addPolicies(rebindContext, entityMemento);
((EntityInternal)entity).getRebindSupport().addEnrichers(rebindContext, entityMemento);
} catch (Exception e) {
- exceptionHandler.onRebindEntityFailed(entity, e);
+ exceptionHandler.onRebindFailed(BrooklynObjectType.ENTITY, entity, e);
}
}
}
@@ -493,7 +491,7 @@ public class RebindManagerImpl implements RebindManager {
try {
managementContext.getLocationManager().manage(location);
} catch (Exception e) {
- exceptionHandler.onManageLocationFailed(location, e);
+ exceptionHandler.onManageFailed(BrooklynObjectType.LOCATION, location, e);
}
}
}
@@ -505,12 +503,12 @@ public class RebindManagerImpl implements RebindManager {
Entity entity = rebindContext.getEntity(appId);
if (entity == null) {
// usually because of creation-failure, when not using fail-fast
- exceptionHandler.onEntityNotFound(appId);
+ exceptionHandler.onNotFound(BrooklynObjectType.ENTITY, appId);
} else {
try {
Entities.startManagement((Application)entity, managementContext);
} catch (Exception e) {
- exceptionHandler.onManageEntityFailed(entity, e);
+ exceptionHandler.onManageFailed(BrooklynObjectType.ENTITY, entity, e);
}
apps.add((Application)entity);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cbb6e40c/core/src/main/java/brooklyn/entity/rebind/dto/BrooklynMementoImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/dto/BrooklynMementoImpl.java b/core/src/main/java/brooklyn/entity/rebind/dto/BrooklynMementoImpl.java
index 87e18a0..732b7ce 100644
--- a/core/src/main/java/brooklyn/entity/rebind/dto/BrooklynMementoImpl.java
+++ b/core/src/main/java/brooklyn/entity/rebind/dto/BrooklynMementoImpl.java
@@ -29,6 +29,7 @@ import brooklyn.mementos.BrooklynMemento;
import brooklyn.mementos.EnricherMemento;
import brooklyn.mementos.EntityMemento;
import brooklyn.mementos.LocationMemento;
+import brooklyn.mementos.Memento;
import brooklyn.mementos.PolicyMemento;
import com.google.common.collect.ImmutableList;
@@ -64,6 +65,19 @@ public class BrooklynMementoImpl implements BrooklynMemento, Serializable {
public Builder topLevelLocationIds(List<String> vals) {
topLevelLocationIds.addAll(vals); return this;
}
+ public void memento(Memento memento) {
+ if (memento instanceof EntityMemento) {
+ entity((EntityMemento)memento);
+ } else if (memento instanceof LocationMemento) {
+ location((LocationMemento)memento);
+ } else if (memento instanceof PolicyMemento) {
+ policy((PolicyMemento)memento);
+ } else if (memento instanceof EnricherMemento) {
+ enricher((EnricherMemento)memento);
+ } else {
+ throw new IllegalStateException("Unexpected memento type :"+memento);
+ }
+ }
public Builder entities(Map<String, EntityMemento> vals) {
entities.putAll(vals); return this;
}
@@ -77,7 +91,11 @@ public class BrooklynMementoImpl implements BrooklynMemento, Serializable {
enrichers.put(val.getId(), val); return this;
}
public Builder entity(EntityMemento val) {
- entities.put(val.getId(), val); return this;
+ entities.put(val.getId(), val);
+ if (val.isTopLevelApp()) {
+ applicationId(val.getId());
+ }
+ return this;
}
public Builder location(LocationMemento val) {
locations.put(val.getId(), val); return this;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cbb6e40c/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToFile.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToFile.java b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToFile.java
index 5761215..68dd6eb 100644
--- a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToFile.java
+++ b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToFile.java
@@ -42,6 +42,7 @@ import com.google.common.io.Files;
* @deprecated since 0.7.0 use BrooklynMementoPersisterToMultiFile instead; the single-file version
* has not been tested recently or kept up-to-date.
*/
+@Deprecated
public class BrooklynMementoPersisterToFile extends AbstractBrooklynMementoPersister {
// FIXME This is no longer used (instead we use ToMultiFile).
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cbb6e40c/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToMultiFile.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToMultiFile.java b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToMultiFile.java
index 935d52d..e587964 100644
--- a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToMultiFile.java
+++ b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToMultiFile.java
@@ -32,6 +32,7 @@ import java.util.concurrent.TimeoutException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import brooklyn.entity.rebind.BrooklynObjectType;
import brooklyn.entity.rebind.PersistenceExceptionHandler;
import brooklyn.entity.rebind.RebindExceptionHandler;
import brooklyn.entity.rebind.dto.BrooklynMementoImpl;
@@ -60,6 +61,7 @@ import com.google.common.util.concurrent.MoreExecutors;
* it has a multi-file filesystem backend for equivalent functionality, but is pluggable
* to support other storage backends
*/
+@Deprecated
public class BrooklynMementoPersisterToMultiFile implements BrooklynMementoPersister {
private static final Logger LOG = LoggerFactory.getLogger(BrooklynMementoPersisterToMultiFile.class);
@@ -158,7 +160,7 @@ public class BrooklynMementoPersisterToMultiFile implements BrooklynMementoPersi
enricherFiles = enrichersDir.listFiles(fileFilter);
} catch (Exception e) {
Exceptions.propagateIfFatal(e);
- exceptionHandler.onLoadBrooklynMementoFailed("Failed to list files", e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.UNKNOWN, "Failed to list files", e);
throw new IllegalStateException("Failed to list memento files in "+dir, e);
}
@@ -175,7 +177,7 @@ public class BrooklynMementoPersisterToMultiFile implements BrooklynMementoPersi
String type = (String) XmlUtil.xpath(contents, "/entity/type");
builder.entity(id, type);
} catch (Exception e) {
- exceptionHandler.onLoadEntityMementoFailed("File "+file, e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.ENTITY, "File "+file, e);
}
}
for (File file : locationFiles) {
@@ -185,7 +187,7 @@ public class BrooklynMementoPersisterToMultiFile implements BrooklynMementoPersi
String type = (String) XmlUtil.xpath(contents, "/location/type");
builder.location(id, type);
} catch (Exception e) {
- exceptionHandler.onLoadLocationMementoFailed("File "+file, e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.LOCATION, "File "+file, e);
}
}
for (File file : policyFiles) {
@@ -195,7 +197,7 @@ public class BrooklynMementoPersisterToMultiFile implements BrooklynMementoPersi
String type = (String) XmlUtil.xpath(contents, "/policy/type");
builder.policy(id, type);
} catch (Exception e) {
- exceptionHandler.onLoadPolicyMementoFailed("File "+file, e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.POLICY, "File "+file, e);
}
}
for (File file : enricherFiles) {
@@ -205,7 +207,7 @@ public class BrooklynMementoPersisterToMultiFile implements BrooklynMementoPersi
String type = (String) XmlUtil.xpath(contents, "/enricher/type");
builder.enricher(id, type);
} catch (Exception e) {
- exceptionHandler.onLoadEnricherMementoFailed("File "+file, e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.ENRICHER, "File "+file, e);
}
}
@@ -241,7 +243,7 @@ public class BrooklynMementoPersisterToMultiFile implements BrooklynMementoPersi
enricherFiles = enrichersDir.listFiles(fileFilter);
} catch (Exception e) {
Exceptions.propagateIfFatal(e);
- exceptionHandler.onLoadBrooklynMementoFailed("Failed to list files", e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.UNKNOWN, "Failed to list files", e);
throw new IllegalStateException("Failed to list memento files in "+dir, e);
}
@@ -264,7 +266,7 @@ public class BrooklynMementoPersisterToMultiFile implements BrooklynMementoPersi
}
}
} catch (Exception e) {
- exceptionHandler.onLoadEntityMementoFailed("File "+file, e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.ENTITY, "File "+file, e);
}
}
for (File file : locationFiles) {
@@ -276,7 +278,7 @@ public class BrooklynMementoPersisterToMultiFile implements BrooklynMementoPersi
builder.location(memento);
}
} catch (Exception e) {
- exceptionHandler.onLoadLocationMementoFailed("File "+file, e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.LOCATION, "File "+file, e);
}
}
for (File file : policyFiles) {
@@ -288,7 +290,7 @@ public class BrooklynMementoPersisterToMultiFile implements BrooklynMementoPersi
builder.policy(memento);
}
} catch (Exception e) {
- exceptionHandler.onLoadPolicyMementoFailed("File "+file, e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.POLICY, "File "+file, e);
}
}
for (File file : enricherFiles) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cbb6e40c/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
index 749ae8f..838f252 100644
--- a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
+++ b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
@@ -38,6 +38,7 @@ import org.slf4j.LoggerFactory;
import brooklyn.config.BrooklynProperties;
import brooklyn.config.ConfigKey;
import brooklyn.entity.basic.ConfigKeys;
+import brooklyn.entity.rebind.BrooklynObjectType;
import brooklyn.entity.rebind.PeriodicDeltaChangeListener;
import brooklyn.entity.rebind.PersistenceExceptionHandler;
import brooklyn.entity.rebind.PersisterDeltaImpl;
@@ -179,7 +180,7 @@ public class BrooklynMementoPersisterToObjectStore implements BrooklynMementoPer
enricherSubPathList = objectStore.listContentsWithSubPath("enrichers");
} catch (Exception e) {
Exceptions.propagateIfFatal(e);
- exceptionHandler.onLoadBrooklynMementoFailed("Failed to list files", e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.UNKNOWN, "Failed to list files", e);
throw new IllegalStateException("Failed to list memento files in "+objectStore, e);
}
@@ -203,7 +204,7 @@ public class BrooklynMementoPersisterToObjectStore implements BrooklynMementoPer
builder.entity(id, type);
} catch (Exception e) {
Exceptions.propagateIfFatal(e);
- exceptionHandler.onLoadEntityMementoFailed("Memento "+subPath, e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.ENTITY, "Memento "+subPath, e);
}
}}));
}
@@ -217,7 +218,7 @@ public class BrooklynMementoPersisterToObjectStore implements BrooklynMementoPer
builder.location(id, type);
} catch (Exception e) {
Exceptions.propagateIfFatal(e);
- exceptionHandler.onLoadLocationMementoFailed("Memento "+subPath, e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.LOCATION, "Memento "+subPath, e);
}
}}));
}
@@ -231,7 +232,7 @@ public class BrooklynMementoPersisterToObjectStore implements BrooklynMementoPer
builder.policy(id, type);
} catch (Exception e) {
Exceptions.propagateIfFatal(e);
- exceptionHandler.onLoadPolicyMementoFailed("Memento "+subPath, e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.POLICY, "Memento "+subPath, e);
}
}}));
}
@@ -245,7 +246,7 @@ public class BrooklynMementoPersisterToObjectStore implements BrooklynMementoPer
builder.enricher(id, type);
} catch (Exception e) {
Exceptions.propagateIfFatal(e);
- exceptionHandler.onLoadEnricherMementoFailed("Memento "+subPath, e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.ENRICHER, "Memento "+subPath, e);
}
}}));
}
@@ -313,7 +314,7 @@ public class BrooklynMementoPersisterToObjectStore implements BrooklynMementoPer
enricherSubPathList = objectStore.listContentsWithSubPath("enrichers");
} catch (Exception e) {
Exceptions.propagateIfFatal(e);
- exceptionHandler.onLoadBrooklynMementoFailed("Failed to list files", e);
+ exceptionHandler.onLoadMementoFailed(BrooklynObjectType.UNKNOWN, "Failed to list files", e);
throw new IllegalStateException("Failed to list memento files in "+objectStore+": "+e, e);
}
@@ -325,72 +326,40 @@ public class BrooklynMementoPersisterToObjectStore implements BrooklynMementoPer
serializer.setLookupContext(lookupContext);
List<ListenableFuture<?>> futures = Lists.newArrayList();
-
+
+ class MementoLoader implements Runnable {
+ private final String subPath;
+ private final BrooklynObjectType type;
+ public MementoLoader(String subPath, BrooklynObjectType type) {
+ this.subPath = subPath;
+ this.type = type;
+ }
+ public void run() {
+ try {
+ Memento memento = (Memento) serializer.fromString(read(subPath));
+ if (memento == null) {
+ LOG.warn("No "+type.toString().toLowerCase()+"-memento deserialized from " + subPath + "; ignoring and continuing");
+ } else {
+ builder.memento(memento);
+ }
+ } catch (Exception e) {
+ exceptionHandler.onLoadMementoFailed(type, "Memento "+subPath, e);
+ }
+ }
+ }
+
try {
for (final String subPath : entitySubPathList) {
- futures.add(executor.submit(new Runnable() {
- public void run() {
- try {
- EntityMemento memento = (EntityMemento) serializer.fromString(read(subPath));
- if (memento == null) {
- LOG.warn("No entity-memento deserialized from " + subPath + "; ignoring and continuing");
- } else {
- builder.entity(memento);
- if (memento.isTopLevelApp()) {
- builder.applicationId(memento.getId());
- }
- }
- } catch (Exception e) {
- exceptionHandler.onLoadEntityMementoFailed("Memento "+subPath, e);
- }
- }}));
+ futures.add(executor.submit(new MementoLoader(subPath, BrooklynObjectType.ENTITY)));
}
for (final String subPath : locationSubPathList) {
- futures.add(executor.submit(new Runnable() {
- public void run() {
- try {
- LocationMemento memento = (LocationMemento) serializer.fromString(read(subPath));
- if (memento == null) {
- LOG.warn("No location-memento deserialized from " + subPath + "; ignoring and continuing");
- } else {
- builder.location(memento);
- }
- } catch (Exception e) {
- exceptionHandler.onLoadLocationMementoFailed("Memento "+subPath, e);
- }
- }}));
+ futures.add(executor.submit(new MementoLoader(subPath, BrooklynObjectType.LOCATION)));
}
for (final String subPath : policySubPathList) {
- futures.add(executor.submit(new Runnable() {
- public void run() {
- try {
- StoreObjectAccessor objectAccessor = objectStore.newAccessor(subPath);
- PolicyMemento memento = (PolicyMemento) serializer.fromString(objectAccessor.get());
- if (memento == null) {
- LOG.warn("No policy-memento deserialized from " + subPath + "; ignoring and continuing");
- } else {
- builder.policy(memento);
- }
- } catch (Exception e) {
- exceptionHandler.onLoadPolicyMementoFailed("Memento "+subPath, e);
- }
- }}));
+ futures.add(executor.submit(new MementoLoader(subPath, BrooklynObjectType.POLICY)));
}
for (final String subPath : enricherSubPathList) {
- futures.add(executor.submit(new Runnable() {
- public void run() {
- try {
- StoreObjectAccessor objectAccessor = objectStore.newAccessor(subPath);
- EnricherMemento memento = (EnricherMemento) serializer.fromString(objectAccessor.get());
- if (memento == null) {
- LOG.warn("No enricher-memento deserialized from " + subPath + "; ignoring and continuing");
- } else {
- builder.enricher(memento);
- }
- } catch (Exception e) {
- exceptionHandler.onLoadEnricherMementoFailed("Memento "+subPath, e);
- }
- }}));
+ futures.add(executor.submit(new MementoLoader(subPath, BrooklynObjectType.ENRICHER)));
}
try {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cbb6e40c/core/src/test/java/brooklyn/entity/rebind/RebindFailuresTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindFailuresTest.java b/core/src/test/java/brooklyn/entity/rebind/RebindFailuresTest.java
index 4ab5f00..1fe4007 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindFailuresTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindFailuresTest.java
@@ -40,6 +40,7 @@ import brooklyn.entity.proxying.EntitySpec;
import brooklyn.entity.rebind.RebindEntityTest.MyEntity;
import brooklyn.entity.rebind.RebindEntityTest.MyEntityImpl;
import brooklyn.entity.rebind.RebindManager.RebindFailureMode;
+import brooklyn.entity.trait.Identifiable;
import brooklyn.event.AttributeSensor;
import brooklyn.management.EntityManager;
import brooklyn.management.internal.LocalManagementContext;
@@ -101,10 +102,10 @@ public class RebindFailuresTest extends RebindTestFixtureWithApp {
}
// exception handler should have been told about failure
- assertEquals(toEntityIds(exceptionHandler.rebindEntityFailures.keySet()), ImmutableSet.of(origFailingE.getId()));
+ assertEquals(toIds(exceptionHandler.rebindFailures.keySet()), ImmutableSet.of(origFailingE.getId()));
// Expect that on failure will have continued with rebind, and then report all problems
- assertEquals(toEntityIds(newEntityManager.getEntities()), ImmutableSet.of(origApp.getId(), origFailingE.getId()));
+ assertEquals(toIds(newEntityManager.getEntities()), ImmutableSet.of(origApp.getId(), origFailingE.getId()));
}
@Test
@@ -127,10 +128,10 @@ public class RebindFailuresTest extends RebindTestFixtureWithApp {
}
// exception handler should have been told about failure
- assertEquals(toEntityIds(exceptionHandler.rebindEntityFailures.keySet()), ImmutableSet.of(origFailingE.getId()));
+ assertEquals(toIds(exceptionHandler.rebindFailures.keySet()), ImmutableSet.of(origFailingE.getId()));
// entities will not have been managed
- assertEquals(toEntityIds(newEntityManager.getEntities()), ImmutableSet.of());
+ assertEquals(toIds(newEntityManager.getEntities()), ImmutableSet.of());
}
@Test
@@ -148,10 +149,10 @@ public class RebindFailuresTest extends RebindTestFixtureWithApp {
newApp = rebind(newManagementContext, exceptionHandler);
// exception handler should have been told about failure
- assertEquals(toEntityIds(exceptionHandler.rebindEntityFailures.keySet()), ImmutableSet.of(origFailingE.getId()));
+ assertEquals(toIds(exceptionHandler.rebindFailures.keySet()), ImmutableSet.of(origFailingE.getId()));
// TODO How should brooklyn indicate that this entity's rebind failed? What can we assert?
- assertEquals(toEntityIds(newEntityManager.getEntities()), ImmutableSet.of(origApp.getId(), origFailingE.getId()));
+ assertEquals(toIds(newEntityManager.getEntities()), ImmutableSet.of(origApp.getId(), origFailingE.getId()));
}
@Test
@@ -203,8 +204,8 @@ public class RebindFailuresTest extends RebindTestFixtureWithApp {
assertFalse(newEnricher.isPresent(), "enricher="+newEnricher);
}
- private Set<String> toEntityIds(Iterable<? extends Entity> entities) {
- return ImmutableSet.copyOf(Iterables.transform(entities, EntityFunctions.id()));
+ private Set<String> toIds(Iterable<? extends Identifiable> instances) {
+ return ImmutableSet.copyOf(Iterables.transform(instances, EntityFunctions.id()));
}
public static class MyPolicyFailingImpl extends AbstractPolicy {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cbb6e40c/core/src/test/java/brooklyn/entity/rebind/RecordingRebindExceptionHandler.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RecordingRebindExceptionHandler.java b/core/src/test/java/brooklyn/entity/rebind/RecordingRebindExceptionHandler.java
index 378c39d..f9dbe78 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RecordingRebindExceptionHandler.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RecordingRebindExceptionHandler.java
@@ -22,8 +22,8 @@ import java.util.List;
import java.util.Map;
import brooklyn.entity.Entity;
+import brooklyn.entity.trait.Identifiable;
import brooklyn.location.Location;
-import brooklyn.policy.Policy;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -31,17 +31,10 @@ import com.google.common.collect.Maps;
public class RecordingRebindExceptionHandler extends RebindExceptionHandlerImpl {
protected final List<Exception> loadMementoFailures = Lists.newArrayList();
- protected final Map<String, Exception> createLocationFailures = Maps.newLinkedHashMap();
- protected final Map<String, Exception> createEntityFailures = Maps.newLinkedHashMap();
- protected final Map<String, Exception> createPolicyFailures = Maps.newLinkedHashMap();
- protected final Map<Location, Exception> rebindLocationFailures = Maps.newLinkedHashMap();
- protected final Map<Entity, Exception> rebindEntityFailures = Maps.newLinkedHashMap();
- protected final Map<Policy, Exception> rebindPolicyFailures = Maps.newLinkedHashMap();
- protected final Map<Location, Exception> manageLocationFailures = Maps.newLinkedHashMap();
- protected final Map<Entity, Exception> manageEntityFailures = Maps.newLinkedHashMap();
- protected final Map<String, Exception> locationNotFoundFailures = Maps.newLinkedHashMap();
- protected final Map<String, Exception> entityNotFoundFailures = Maps.newLinkedHashMap();
- protected final Map<String, Exception> policyNotFoundFailures = Maps.newLinkedHashMap();
+ protected final Map<String, Exception> createFailures = Maps.newLinkedHashMap();
+ protected final Map<Identifiable, Exception> rebindFailures = Maps.newLinkedHashMap();
+ protected final Map<Identifiable, Exception> manageFailures = Maps.newLinkedHashMap();
+ protected final Map<String, Exception> notFoundFailures = Maps.newLinkedHashMap();
protected Exception failed;
public RecordingRebindExceptionHandler(RebindManager.RebindFailureMode danglingRefFailureMode, RebindManager.RebindFailureMode rebindFailureMode) {
@@ -49,33 +42,9 @@ public class RecordingRebindExceptionHandler extends RebindExceptionHandlerImpl
}
@Override
- public void onLoadBrooklynMementoFailed(String msg, Exception e) {
- loadMementoFailures.add(new IllegalStateException("problem loading mementos: "+msg, e));
- super.onLoadBrooklynMementoFailed(msg, e);
- }
-
- @Override
- public void onLoadLocationMementoFailed(String msg, Exception e) {
- loadMementoFailures.add(new IllegalStateException("problem loading mementos: "+msg, e));
- super.onLoadLocationMementoFailed(msg, e);
- }
-
- @Override
- public void onLoadEntityMementoFailed(String msg, Exception e) {
- loadMementoFailures.add(new IllegalStateException("problem loading mementos: "+msg, e));
- super.onLoadEntityMementoFailed(msg, e);
- }
-
- @Override
- public void onLoadPolicyMementoFailed(String msg, Exception e) {
- loadMementoFailures.add(new IllegalStateException("problem loading mementos: "+msg, e));
- super.onLoadPolicyMementoFailed(msg, e);
- }
-
- @Override
- public void onLoadEnricherMementoFailed(String msg, Exception e) {
- loadMementoFailures.add(new IllegalStateException("problem loading mementos: "+msg, e));
- super.onLoadPolicyMementoFailed(msg, e);
+ public void onLoadMementoFailed(BrooklynObjectType type, String msg, Exception e) {
+ loadMementoFailures.add(new IllegalStateException("problem loading "+type+" memento: "+msg, e));
+ super.onLoadMementoFailed(type, msg, e);
}
@Override
@@ -89,72 +58,30 @@ public class RecordingRebindExceptionHandler extends RebindExceptionHandlerImpl
}
@Override
- public void onCreateLocationFailed(String id, String type, Exception e) {
- createLocationFailures.put(id, new IllegalStateException("problem creating location "+id+" of type "+type, e));
- super.onCreateLocationFailed(id, type, e);
- }
-
- @Override
- public void onCreateEntityFailed(String id, String type, Exception e) {
- createEntityFailures.put(id, new IllegalStateException("problem creating entity "+id+" of type "+type, e));
- super.onCreateEntityFailed(id, type, e);
+ public void onCreateFailed(BrooklynObjectType type, String id, String instanceType, Exception e) {
+ createFailures.put(id, new IllegalStateException("problem creating location "+id+" of type "+instanceType, e));
+ super.onCreateFailed(type, id, instanceType, e);
}
@Override
- public void onCreatePolicyFailed(String id, String type, Exception e) {
- createPolicyFailures.put(id, new IllegalStateException("problem creating policy "+id+" of type "+type, e));
- super.onCreatePolicyFailed(id, type, e);
- }
-
- @Override
- public void onLocationNotFound(String id) {
- locationNotFoundFailures.put(id, new IllegalStateException("location '"+id+"' not found"));
- super.onLocationNotFound(id);
- }
-
- @Override
- public void onEntityNotFound(String id) {
- entityNotFoundFailures.put(id, new IllegalStateException("entity '"+id+"' not found"));
- super.onEntityNotFound(id);
+ public void onNotFound(BrooklynObjectType type, String id) {
+ notFoundFailures.put(id, new IllegalStateException(type+" '"+id+"' not found"));
+ super.onNotFound(type, id);
}
@Override
- public void onPolicyNotFound(String id) {
- locationNotFoundFailures.put(id, new IllegalStateException("policy'"+id+"' not found"));
- super.onPolicyNotFound(id);
- }
-
- @Override
- public void onRebindLocationFailed(Location location, Exception e) {
- rebindLocationFailures.put(location, new IllegalStateException("problem rebinding location "+location.getId()+" ("+location+")", e));
- super.onRebindLocationFailed(location, e);
- }
-
- @Override
- public void onRebindEntityFailed(Entity entity, Exception e) {
- rebindEntityFailures.put(entity, new IllegalStateException("problem rebinding entity "+entity.getId()+" ("+entity+")", e));
- super.onRebindEntityFailed(entity, e);
- }
-
- @Override
- public void onRebindPolicyFailed(Policy policy, Exception e) {
- rebindPolicyFailures.put(policy, new IllegalStateException("problem rebinding plicy "+policy.getId()+" ("+policy+")", e));
- super.onRebindPolicyFailed(policy, e);
+ public void onRebindFailed(BrooklynObjectType type, Identifiable instance, Exception e) {
+ rebindFailures.put(instance, new IllegalStateException("problem rebinding "+type+" "+instance.getId()+" ("+instance+")", e));
+ super.onRebindFailed(type, instance, e);
}
@Override
- public void onManageLocationFailed(Location location, Exception e) {
- manageLocationFailures.put(location, new IllegalStateException("problem managing location "+location.getId()+" ("+location+")", e));
- super.onManageLocationFailed(location, e);
+ public void onManageFailed(BrooklynObjectType type, Identifiable instance, Exception e) {
+ manageFailures.put(instance, new IllegalStateException("problem managing "+type+" "+instance.getId()+" ("+instance+")", e));
+ super.onManageFailed(type, instance, e);
}
@Override
- public void onManageEntityFailed(Entity entity, Exception e) {
- manageEntityFailures.put(entity, new IllegalStateException("problem managing entity "+entity.getId()+" ("+entity+")", e));
- super.onManageEntityFailed(entity, e);
- }
-
- @Override
public void onDone() {
super.onDone();
}
[8/8] git commit: rat should ignore .repository (which is used by
jenkins-mvn for instance)
Posted by he...@apache.org.
rat should ignore .repository (which is used by jenkins-mvn for instance)
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/8b5d48ac
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/8b5d48ac
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/8b5d48ac
Branch: refs/heads/master
Commit: 8b5d48ac225029d794de745b51b068937bb53055
Parents: 491eb60
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Aug 1 16:08:55 2014 -0400
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Aug 1 16:12:17 2014 -0400
----------------------------------------------------------------------
pom.xml | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8b5d48ac/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index ec3b713..75c8581 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1033,6 +1033,7 @@
<!-- see https://issues.apache.org/jira/browse/RAT-107 -->
<exclude>**/.git/**</exclude>
<exclude>**/.gitignore</exclude>
+ <exclude>**/.repository/**</exclude>
<exclude>**/.idea/**</exclude>
<exclude>**/*.iml</exclude>
<exclude>**/.classpath/**</exclude>
[6/8] git commit: Remove duplication from InternalEntityFactory etc
Posted by he...@apache.org.
Remove duplication from InternalEntityFactory etc
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/519bc9a8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/519bc9a8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/519bc9a8
Branch: refs/heads/master
Commit: 519bc9a8de5443f48472bfff597c41d543c95dd6
Parents: c0bd46d
Author: Aled Sage <al...@gmail.com>
Authored: Wed Jul 2 09:34:08 2014 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Jul 14 23:45:19 2014 +0100
----------------------------------------------------------------------
.../brooklyn/entity/basic/AbstractEntity.java | 4 +-
.../entity/proxying/InternalEntityFactory.java | 89 ++----------
.../entity/proxying/InternalFactory.java | 137 +++++++++++++++++++
.../proxying/InternalLocationFactory.java | 85 +++---------
.../entity/proxying/InternalPolicyFactory.java | 119 ++++------------
.../location/basic/AbstractLocation.java | 4 +-
.../policy/basic/AbstractEntityAdjunct.java | 4 +-
7 files changed, 193 insertions(+), 249 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/519bc9a8/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
index 0f291bf..081e0a6 100644
--- a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
+++ b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
@@ -38,7 +38,7 @@ import brooklyn.entity.Entity;
import brooklyn.entity.EntityType;
import brooklyn.entity.Group;
import brooklyn.entity.proxying.EntitySpec;
-import brooklyn.entity.proxying.InternalEntityFactory;
+import brooklyn.entity.proxying.InternalFactory;
import brooklyn.entity.rebind.BasicEntityRebindSupport;
import brooklyn.entity.rebind.RebindManagerImpl;
import brooklyn.entity.rebind.RebindSupport;
@@ -268,7 +268,7 @@ public abstract class AbstractEntity implements EntityLocal, EntityInternal {
// TODO Don't let `this` reference escape during construction
entityType = new EntityDynamicType(this);
- _legacyConstruction = !InternalEntityFactory.FactoryConstructionTracker.isConstructing();
+ _legacyConstruction = !InternalFactory.FactoryConstructionTracker.isConstructing();
if (_legacyConstruction) {
LOG.warn("Deprecated use of old-style entity construction for "+getClass().getName()+"; instead use EntityManager().createEntity(spec)");
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/519bc9a8/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java b/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
index df73423..e572ce9 100644
--- a/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
+++ b/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
@@ -49,7 +49,6 @@ import brooklyn.util.javalang.AggregateClassLoader;
import brooklyn.util.javalang.Reflections;
import brooklyn.util.task.Tasks;
-import com.google.common.base.Optional;
import com.google.common.collect.ImmutableMap;
/**
@@ -60,67 +59,29 @@ import com.google.common.collect.ImmutableMap;
*
* @author aled
*/
-public class InternalEntityFactory {
+public class InternalEntityFactory extends InternalFactory {
private static final Logger log = LoggerFactory.getLogger(InternalEntityFactory.class);
- private final ManagementContextInternal managementContext;
private final EntityTypeRegistry entityTypeRegistry;
private final InternalPolicyFactory policyFactory;
/**
- * For tracking if AbstractEntity constructor has been called by framework, or in legacy way (i.e. directly).
- *
- * To be deleted once we delete support for constructing entities directly (and expecting configure() to be
- * called inside the constructor, etc).
- *
- * @author aled
- */
- public static class FactoryConstructionTracker {
- private static ThreadLocal<Boolean> constructing = new ThreadLocal<Boolean>();
-
- public static boolean isConstructing() {
- return (constructing.get() == Boolean.TRUE);
- }
-
- static void reset() {
- constructing.set(Boolean.FALSE);
- }
-
- static void setConstructing() {
- constructing.set(Boolean.TRUE);
- }
- }
-
- /**
* Returns true if this is a "new-style" entity (i.e. where not expected to call the constructor to instantiate it).
* That means it is an entity with a no-arg constructor.
* @param managementContext
* @param clazz
*/
public static boolean isNewStyleEntity(ManagementContext managementContext, Class<?> clazz) {
- try {
- return isNewStyleEntity(clazz);
- } catch (IllegalArgumentException e) {
- return false;
- }
+ return InternalFactory.isNewStyle(managementContext, clazz);
}
public static boolean isNewStyleEntity(Class<?> clazz) {
- if (!Entity.class.isAssignableFrom(clazz)) {
- throw new IllegalArgumentException("Class "+clazz+" is not an entity");
- }
-
- try {
- clazz.getConstructor(new Class[0]);
- return true;
- } catch (NoSuchMethodException e) {
- return false;
- }
+ return InternalFactory.isNewStyle(clazz);
}
public InternalEntityFactory(ManagementContextInternal managementContext, EntityTypeRegistry entityTypeRegistry, InternalPolicyFactory policyFactory) {
- this.managementContext = checkNotNull(managementContext, "managementContext");
+ super(managementContext);
this.entityTypeRegistry = checkNotNull(entityTypeRegistry, "entityTypeRegistry");
this.policyFactory = checkNotNull(policyFactory, "policyFactory");
}
@@ -322,52 +283,22 @@ public class InternalEntityFactory {
* Constructs an entity (if new-style, calls no-arg constructor; if old-style, uses spec to pass in config).
*/
public <T extends Entity> T constructEntity(Class<? extends T> clazz, EntitySpec<T> spec) {
- try {
- FactoryConstructionTracker.setConstructing();
- try {
- if (isNewStyleEntity(clazz)) {
- return clazz.newInstance();
- } else {
- return constructOldStyle(clazz, MutableMap.copyOf(spec.getFlags()));
- }
- } finally {
- FactoryConstructionTracker.reset();
- }
- } catch (Exception e) {
- throw Exceptions.propagate(e);
- }
- }
+ return super.construct(clazz, spec.getFlags());
+ }
/**
* Constructs a new-style entity (fails if no no-arg constructor).
*/
public <T extends Entity> T constructEntity(Class<T> clazz) {
- try {
- FactoryConstructionTracker.setConstructing();
- try {
- if (isNewStyleEntity(clazz)) {
- return clazz.newInstance();
- } else {
- throw new IllegalStateException("Entity class "+clazz+" must have a no-arg constructor");
- }
- } finally {
- FactoryConstructionTracker.reset();
- }
- } catch (Exception e) {
- throw Exceptions.propagate(e);
- }
+ return super.constructNewStyle(clazz);
}
- private <T extends Entity> T constructOldStyle(Class<? extends T> clazz, Map<String,?> flags) throws InstantiationException, IllegalAccessException, InvocationTargetException {
+ @Override
+ protected <T> T constructOldStyle(Class<T> clazz, Map<String,?> flags) throws InstantiationException, IllegalAccessException, InvocationTargetException {
if (flags.containsKey("parent") || flags.containsKey("owner")) {
throw new IllegalArgumentException("Spec's flags must not contain parent or owner; use spec.parent() instead for "+clazz);
}
- Optional<? extends T> v = Reflections.invokeConstructorWithArgs(clazz, new Object[] {MutableMap.copyOf(flags)}, true);
- if (v.isPresent()) {
- return v.get();
- } else {
- throw new IllegalStateException("No valid constructor defined for "+clazz+" (expected no-arg or single java.util.Map argument)");
- }
+ return super.constructOldStyle(clazz, flags);
}
private <T extends Entity> Class<? extends T> getImplementedBy(EntitySpec<T> spec) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/519bc9a8/core/src/main/java/brooklyn/entity/proxying/InternalFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/proxying/InternalFactory.java b/core/src/main/java/brooklyn/entity/proxying/InternalFactory.java
new file mode 100644
index 0000000..e024872
--- /dev/null
+++ b/core/src/main/java/brooklyn/entity/proxying/InternalFactory.java
@@ -0,0 +1,137 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package brooklyn.entity.proxying;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+
+import brooklyn.management.ManagementContext;
+import brooklyn.management.internal.ManagementContextInternal;
+import brooklyn.util.collections.MutableMap;
+import brooklyn.util.exceptions.Exceptions;
+import brooklyn.util.javalang.Reflections;
+
+import com.google.common.base.Optional;
+
+/**
+ */
+public class InternalFactory {
+
+ protected final ManagementContextInternal managementContext;
+
+ /**
+ * For tracking if constructor has been called by framework, or in legacy way (i.e. directly).
+ *
+ * To be deleted once we delete support for constructing directly (and expecting configure() to be
+ * called inside the constructor, etc).
+ *
+ * @author aled
+ */
+ public static class FactoryConstructionTracker {
+ private static ThreadLocal<Boolean> constructing = new ThreadLocal<Boolean>();
+
+ public static boolean isConstructing() {
+ return (constructing.get() == Boolean.TRUE);
+ }
+
+ static void reset() {
+ constructing.set(Boolean.FALSE);
+ }
+
+ static void setConstructing() {
+ constructing.set(Boolean.TRUE);
+ }
+ }
+
+ /**
+ * Returns true if this is a "new-style" policy (i.e. where not expected to call the constructor to instantiate it).
+ *
+ * @param managementContext
+ * @param clazz
+ */
+ public static boolean isNewStyle(ManagementContext managementContext, Class<?> clazz) {
+ try {
+ return isNewStyle(clazz);
+ } catch (IllegalArgumentException e) {
+ return false;
+ }
+ }
+
+ public static boolean isNewStyle(Class<?> clazz) {
+ try {
+ clazz.getConstructor(new Class[0]);
+ return true;
+ } catch (NoSuchMethodException e) {
+ return false;
+ }
+ }
+
+ public InternalFactory(ManagementContextInternal managementContext) {
+ this.managementContext = checkNotNull(managementContext, "managementContext");
+ }
+
+ protected <T> T construct(Class<? extends T> clazz, Map<String, ?> constructorFlags) {
+ try {
+ if (isNewStyle(clazz)) {
+ return constructNewStyle(clazz);
+ } else {
+ return constructOldStyle(clazz, MutableMap.copyOf(constructorFlags));
+ }
+ } catch (Exception e) {
+ throw Exceptions.propagate(e);
+ }
+ }
+
+ /**
+ * Constructs a new instance (fails if no no-arg constructor).
+ */
+ protected <T> T constructNewStyle(Class<T> clazz) {
+ if (!isNewStyle(clazz)) {
+ throw new IllegalStateException("Class "+clazz+" must have a no-arg constructor");
+ }
+
+ try {
+ FactoryConstructionTracker.setConstructing();
+ try {
+ return clazz.newInstance();
+ } finally {
+ FactoryConstructionTracker.reset();
+ }
+ } catch (Exception e) {
+ throw Exceptions.propagate(e);
+ }
+ }
+
+ protected <T> T constructOldStyle(Class<T> clazz, Map<String,?> flags) throws InstantiationException, IllegalAccessException, InvocationTargetException {
+ FactoryConstructionTracker.setConstructing();
+ Optional<T> v;
+ try {
+ v = Reflections.invokeConstructorWithArgs(clazz, new Object[] {MutableMap.copyOf(flags)}, true);
+ } finally {
+ FactoryConstructionTracker.reset();
+ }
+ if (v.isPresent()) {
+ return v.get();
+ } else {
+ throw new IllegalStateException("No valid constructor defined for "+clazz+" (expected no-arg or single java.util.Map argument)");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/519bc9a8/core/src/main/java/brooklyn/entity/proxying/InternalLocationFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/proxying/InternalLocationFactory.java b/core/src/main/java/brooklyn/entity/proxying/InternalLocationFactory.java
index 61715e7..ffcfac2 100644
--- a/core/src/main/java/brooklyn/entity/proxying/InternalLocationFactory.java
+++ b/core/src/main/java/brooklyn/entity/proxying/InternalLocationFactory.java
@@ -18,8 +18,6 @@
*/
package brooklyn.entity.proxying;
-import static com.google.common.base.Preconditions.checkNotNull;
-
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import java.util.Map.Entry;
@@ -32,13 +30,10 @@ import brooklyn.location.basic.LocationInternal;
import brooklyn.management.ManagementContext;
import brooklyn.management.internal.LocalLocationManager;
import brooklyn.management.internal.ManagementContextInternal;
-import brooklyn.util.collections.MutableMap;
import brooklyn.util.config.ConfigBag;
import brooklyn.util.exceptions.Exceptions;
import brooklyn.util.flags.FlagUtils;
-import brooklyn.util.javalang.Reflections;
-import com.google.common.base.Optional;
import com.google.common.collect.ImmutableMap;
/**
@@ -49,33 +44,7 @@ import com.google.common.collect.ImmutableMap;
*
* @author aled
*/
-public class InternalLocationFactory {
-
- private final ManagementContextInternal managementContext;
-
- /**
- * For tracking if AbstractLocation constructor has been called by framework, or in legacy way (i.e. directly).
- *
- * To be deleted once we delete support for constructing locations directly (and expecting configure() to be
- * called inside the constructor, etc).
- *
- * @author aled
- */
- public static class FactoryConstructionTracker {
- private static ThreadLocal<Boolean> constructing = new ThreadLocal<Boolean>();
-
- public static boolean isConstructing() {
- return (constructing.get() == Boolean.TRUE);
- }
-
- static void reset() {
- constructing.set(Boolean.FALSE);
- }
-
- static void setConstructing() {
- constructing.set(Boolean.TRUE);
- }
- }
+public class InternalLocationFactory extends InternalFactory {
/**
* Returns true if this is a "new-style" location (i.e. where not expected to call the constructor to instantiate it).
@@ -96,16 +65,11 @@ public class InternalLocationFactory {
throw new IllegalArgumentException("Class "+clazz+" is not an location");
}
- try {
- clazz.getConstructor(new Class[0]);
- return true;
- } catch (NoSuchMethodException e) {
- return false;
- }
+ return InternalFactory.isNewStyle(clazz);
}
public InternalLocationFactory(ManagementContextInternal managementContext) {
- this.managementContext = checkNotNull(managementContext, "managementContext");
+ super(managementContext);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@@ -123,12 +87,7 @@ public class InternalLocationFactory {
try {
Class<? extends T> clazz = spec.getType();
- T loc;
- if (isNewStyleLocation(clazz)) {
- loc = constructLocation(clazz);
- } else {
- loc = constructOldStyle(clazz, MutableMap.copyOf(spec.getFlags()));
- }
+ T loc = constructLocation(clazz, spec);
if (spec.getId() != null) {
FlagUtils.setFieldsFromFlags(ImmutableMap.of("id", spec.getId()), loc);
@@ -163,34 +122,24 @@ public class InternalLocationFactory {
}
/**
- * Constructs a new-style location (fails if no no-arg constructor).
+ * Constructs an entity (if new-style, calls no-arg constructor; if old-style, uses spec to pass in config).
+ */
+ public <T extends Location> T constructLocation(Class<? extends T> clazz, LocationSpec<T> spec) {
+ return super.construct(clazz, spec.getFlags());
+ }
+
+ /**
+ * Constructs a new-style entity (fails if no no-arg constructor).
*/
public <T extends Location> T constructLocation(Class<T> clazz) {
- try {
- FactoryConstructionTracker.setConstructing();
- try {
- if (isNewStyleLocation(clazz)) {
- return clazz.newInstance();
- } else {
- throw new IllegalStateException("Location class "+clazz+" must have a no-arg constructor");
- }
- } finally {
- FactoryConstructionTracker.reset();
- }
- } catch (Exception e) {
- throw Exceptions.propagate(e);
- }
+ return super.constructNewStyle(clazz);
}
- private <T extends Location> T constructOldStyle(Class<? extends T> clazz, Map<String,?> flags) throws InstantiationException, IllegalAccessException, InvocationTargetException {
- if (flags.containsKey("parentLocation")) {
+ @Override
+ protected <T> T constructOldStyle(Class<T> clazz, Map<String,?> flags) throws InstantiationException, IllegalAccessException, InvocationTargetException {
+ if (flags.containsKey("parent") || flags.containsKey("owner")) {
throw new IllegalArgumentException("Spec's flags must not contain parent or owner; use spec.parent() instead for "+clazz);
}
- Optional<? extends T> v = Reflections.invokeConstructorWithArgs(clazz, new Object[] {MutableMap.copyOf(flags)}, true);
- if (v.isPresent()) {
- return v.get();
- } else {
- throw new IllegalStateException("No valid constructor defined for "+clazz+" (expected no-arg or single java.util.Map argument)");
- }
+ return super.constructOldStyle(clazz, flags);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/519bc9a8/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java b/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
index 378d161..5480823 100644
--- a/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
+++ b/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
@@ -18,9 +18,6 @@
*/
package brooklyn.entity.proxying;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import brooklyn.config.ConfigKey;
@@ -35,9 +32,6 @@ import brooklyn.policy.basic.AbstractPolicy;
import brooklyn.util.collections.MutableMap;
import brooklyn.util.config.ConfigBag;
import brooklyn.util.exceptions.Exceptions;
-import brooklyn.util.javalang.Reflections;
-
-import com.google.common.base.Optional;
/**
* Creates policies of required types.
@@ -50,33 +44,7 @@ import com.google.common.base.Optional;
*
* @author aled
*/
-public class InternalPolicyFactory {
-
- private final ManagementContextInternal managementContext;
-
- /**
- * For tracking if AbstractPolicy constructor has been called by framework, or in legacy way (i.e. directly).
- *
- * To be deleted once we delete support for constructing policies directly (and expecting configure() to be
- * called inside the constructor, etc).
- *
- * @author aled
- */
- public static class FactoryConstructionTracker {
- private static ThreadLocal<Boolean> constructing = new ThreadLocal<Boolean>();
-
- public static boolean isConstructing() {
- return (constructing.get() == Boolean.TRUE);
- }
-
- static void reset() {
- constructing.set(Boolean.FALSE);
- }
-
- static void setConstructing() {
- constructing.set(Boolean.TRUE);
- }
- }
+public class InternalPolicyFactory extends InternalFactory {
/**
* Returns true if this is a "new-style" policy (i.e. where not expected to call the constructor to instantiate it).
@@ -96,13 +64,8 @@ public class InternalPolicyFactory {
if (!Policy.class.isAssignableFrom(clazz)) {
throw new IllegalArgumentException("Class "+clazz+" is not a policy");
}
-
- try {
- clazz.getConstructor(new Class[0]);
- return true;
- } catch (NoSuchMethodException e) {
- return false;
- }
+
+ return InternalFactory.isNewStyle(clazz);
}
public static boolean isNewStyleEnricher(Class<?> clazz) {
@@ -110,16 +73,11 @@ public class InternalPolicyFactory {
throw new IllegalArgumentException("Class "+clazz+" is not an enricher");
}
- try {
- clazz.getConstructor(new Class[0]);
- return true;
- } catch (NoSuchMethodException e) {
- return false;
- }
+ return InternalFactory.isNewStyle(clazz);
}
public InternalPolicyFactory(ManagementContextInternal managementContext) {
- this.managementContext = checkNotNull(managementContext, "managementContext");
+ super(managementContext);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@@ -131,12 +89,7 @@ public class InternalPolicyFactory {
try {
Class<? extends T> clazz = spec.getType();
- T pol;
- if (isNewStylePolicy(clazz)) {
- pol = constructPolicy(clazz);
- } else {
- pol = constructOldStyle(clazz, MutableMap.copyOf(spec.getFlags()));
- }
+ T pol = constructPolicy(clazz, spec);
if (spec.getDisplayName()!=null)
((AbstractPolicy)pol).setName(spec.getDisplayName());
@@ -171,12 +124,7 @@ public class InternalPolicyFactory {
try {
Class<? extends T> clazz = spec.getType();
- T enricher;
- if (isNewStyleEnricher(clazz)) {
- enricher = constructEnricher(clazz);
- } else {
- enricher = constructOldStyle(clazz, MutableMap.copyOf(spec.getFlags()));
- }
+ T enricher = constructEnricher(clazz, spec);
if (spec.getDisplayName()!=null)
((AbstractEnricher)enricher).setName(spec.getDisplayName());
@@ -203,51 +151,30 @@ public class InternalPolicyFactory {
}
/**
+ * Constructs a policy (if new-style, calls no-arg constructor; if old-style, uses spec to pass in config).
+ */
+ public <T extends Policy> T constructPolicy(Class<? extends T> clazz, PolicySpec<T> spec) {
+ return super.construct(clazz, spec.getFlags());
+ }
+
+ /**
+ * Constructs an enricher (if new-style, calls no-arg constructor; if old-style, uses spec to pass in config).
+ */
+ public <T extends Enricher> T constructEnricher(Class<? extends T> clazz, EnricherSpec<T> spec) {
+ return super.construct(clazz, spec.getFlags());
+ }
+
+ /**
* Constructs a new-style policy (fails if no no-arg constructor).
*/
public <T extends Policy> T constructPolicy(Class<T> clazz) {
- try {
- FactoryConstructionTracker.setConstructing();
- try {
- if (isNewStylePolicy(clazz)) {
- return clazz.newInstance();
- } else {
- throw new IllegalStateException("Policy class "+clazz+" must have a no-arg constructor");
- }
- } finally {
- FactoryConstructionTracker.reset();
- }
- } catch (Exception e) {
- throw Exceptions.propagate(e);
- }
+ return super.constructNewStyle(clazz);
}
/**
* Constructs a new-style enricher (fails if no no-arg constructor).
*/
public <T extends Enricher> T constructEnricher(Class<T> clazz) {
- try {
- FactoryConstructionTracker.setConstructing();
- try {
- if (isNewStyleEnricher(clazz)) {
- return clazz.newInstance();
- } else {
- throw new IllegalStateException("Enricher class "+clazz+" must have a no-arg constructor");
- }
- } finally {
- FactoryConstructionTracker.reset();
- }
- } catch (Exception e) {
- throw Exceptions.propagate(e);
- }
- }
-
- private <T> T constructOldStyle(Class<T> clazz, Map<String,?> flags) throws InstantiationException, IllegalAccessException, InvocationTargetException {
- Optional<T> v = Reflections.invokeConstructorWithArgs(clazz, new Object[] {MutableMap.copyOf(flags)}, true);
- if (v.isPresent()) {
- return v.get();
- } else {
- throw new IllegalStateException("No valid constructor defined for "+clazz+" (expected no-arg or single java.util.Map argument)");
- }
+ return super.constructNewStyle(clazz);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/519bc9a8/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/AbstractLocation.java b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
index d468622..ebb5909 100644
--- a/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
@@ -35,7 +35,7 @@ import org.slf4j.LoggerFactory;
import brooklyn.config.ConfigKey;
import brooklyn.config.ConfigKey.HasConfigKey;
import brooklyn.entity.basic.EntityDynamicType;
-import brooklyn.entity.proxying.InternalLocationFactory;
+import brooklyn.entity.proxying.InternalFactory;
import brooklyn.entity.rebind.BasicLocationRebindSupport;
import brooklyn.entity.rebind.RebindManagerImpl;
import brooklyn.entity.rebind.RebindSupport;
@@ -144,7 +144,7 @@ public abstract class AbstractLocation implements LocationInternal, HasHostGeoIn
*/
public AbstractLocation(Map properties) {
inConstruction = true;
- _legacyConstruction = !InternalLocationFactory.FactoryConstructionTracker.isConstructing();
+ _legacyConstruction = !InternalFactory.FactoryConstructionTracker.isConstructing();
if (!_legacyConstruction && properties!=null && !properties.isEmpty()) {
LOG.warn("Forcing use of deprecated old-style location construction for "+getClass().getName()+" because properties were specified ("+properties+")");
_legacyConstruction = true;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/519bc9a8/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
index a5d324f..3760933 100644
--- a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
+++ b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
@@ -37,7 +37,7 @@ import brooklyn.entity.Entity;
import brooklyn.entity.Group;
import brooklyn.entity.basic.EntityInternal;
import brooklyn.entity.basic.EntityLocal;
-import brooklyn.entity.proxying.InternalPolicyFactory;
+import brooklyn.entity.proxying.InternalFactory;
import brooklyn.entity.rebind.RebindManagerImpl;
import brooklyn.entity.trait.Configurable;
import brooklyn.event.AttributeSensor;
@@ -106,7 +106,7 @@ public abstract class AbstractEntityAdjunct implements EntityAdjunct, Configurab
public AbstractEntityAdjunct(@SuppressWarnings("rawtypes") Map flags) {
inConstruction = true;
- _legacyConstruction = !InternalPolicyFactory.FactoryConstructionTracker.isConstructing();
+ _legacyConstruction = !InternalFactory.FactoryConstructionTracker.isConstructing();
_legacyNoConstructionInit = (flags != null) && Boolean.TRUE.equals(flags.get("noConstructionInit"));
if (!_legacyConstruction && flags!=null && !flags.isEmpty()) {
[4/8] git commit: Change EntityAdjunct.getName() to getDisplayName()
Posted by he...@apache.org.
Change EntityAdjunct.getName() to getDisplayName()
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/5ca049eb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/5ca049eb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/5ca049eb
Branch: refs/heads/master
Commit: 5ca049eb6497e5698c8e493f928741bb201fa949
Parents: cbb6e40
Author: Aled Sage <al...@gmail.com>
Authored: Mon Jul 14 16:09:59 2014 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Jul 14 23:45:19 2014 +0100
----------------------------------------------------------------------
api/src/main/java/brooklyn/policy/Enricher.java | 3 +++
.../java/brooklyn/policy/EntityAdjunct.java | 6 ++++++
api/src/main/java/brooklyn/policy/Policy.java | 3 +++
.../brooklyn/entity/basic/PolicyDescriptor.java | 2 +-
.../entity/proxying/InternalPolicyFactory.java | 4 ++--
.../rebind/BasicEnricherRebindSupport.java | 2 +-
.../entity/rebind/BasicPolicyRebindSupport.java | 2 +-
.../entity/rebind/dto/MementosGenerators.java | 4 ++--
.../policy/basic/AbstractEntityAdjunct.java | 20 +++++++++++++++++---
.../brooklyn/entity/basic/EntitySpecTest.java | 4 ++--
.../loadbalancing/LoadBalancingPolicy.java | 2 +-
.../autoscaling/AutoScalerPolicyRebindTest.java | 2 +-
.../rest/transform/PolicyTransformer.java | 2 +-
.../rest/util/BrooklynRestResourceUtils.java | 2 +-
.../util/BrooklynRestResourceUtilsTest.java | 2 +-
15 files changed, 43 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/api/src/main/java/brooklyn/policy/Enricher.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/policy/Enricher.java b/api/src/main/java/brooklyn/policy/Enricher.java
index c0e6168..53f2603 100644
--- a/api/src/main/java/brooklyn/policy/Enricher.java
+++ b/api/src/main/java/brooklyn/policy/Enricher.java
@@ -43,7 +43,10 @@ public interface Enricher extends EntityAdjunct, Rebindable, Configurable {
/**
* Get the name assigned to this enricher.
+ *
+ * @deprecated since 0.7; use {@link #getDisplayName()}
*/
+ @Deprecated
@Override
String getName();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/api/src/main/java/brooklyn/policy/EntityAdjunct.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/policy/EntityAdjunct.java b/api/src/main/java/brooklyn/policy/EntityAdjunct.java
index e50c400..d0d0d37 100644
--- a/api/src/main/java/brooklyn/policy/EntityAdjunct.java
+++ b/api/src/main/java/brooklyn/policy/EntityAdjunct.java
@@ -36,6 +36,12 @@ public interface EntityAdjunct extends Identifiable {
*
* @return the name assigned to the adjunct
*/
+ String getDisplayName();
+
+ /**
+ * @deprecated since 0.7; use {@link #getDisplayName()}
+ */
+ @Deprecated
String getName();
/**
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/api/src/main/java/brooklyn/policy/Policy.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/policy/Policy.java b/api/src/main/java/brooklyn/policy/Policy.java
index cd2d2a6..3e275cf 100644
--- a/api/src/main/java/brooklyn/policy/Policy.java
+++ b/api/src/main/java/brooklyn/policy/Policy.java
@@ -43,7 +43,10 @@ public interface Policy extends EntityAdjunct, Rebindable, Configurable {
* Get the name assigned to this policy.
*
* @return the name assigned to the policy.
+ *
+ * @deprecated since 0.7; use {@link #getDisplayName()}
*/
+ @Deprecated
@Override
String getName();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/core/src/main/java/brooklyn/entity/basic/PolicyDescriptor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/PolicyDescriptor.java b/core/src/main/java/brooklyn/entity/basic/PolicyDescriptor.java
index 3910d1e..3bba292 100644
--- a/core/src/main/java/brooklyn/entity/basic/PolicyDescriptor.java
+++ b/core/src/main/java/brooklyn/entity/basic/PolicyDescriptor.java
@@ -31,7 +31,7 @@ public class PolicyDescriptor {
public PolicyDescriptor(Policy policy) {
this.id = policy.getId();
this.type = policy.getPolicyType().getName();
- this.name = policy.getName();
+ this.name = policy.getDisplayName();
}
public String getId() {
return id;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java b/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
index 3839ce1..ebf13dd 100644
--- a/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
+++ b/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
@@ -92,7 +92,7 @@ public class InternalPolicyFactory extends InternalFactory {
T pol = construct(clazz, spec.getFlags());
if (spec.getDisplayName()!=null)
- ((AbstractPolicy)pol).setName(spec.getDisplayName());
+ ((AbstractPolicy)pol).setDisplayName(spec.getDisplayName());
if (isNewStylePolicy(clazz)) {
((AbstractPolicy)pol).setManagementContext(managementContext);
@@ -127,7 +127,7 @@ public class InternalPolicyFactory extends InternalFactory {
T enricher = construct(clazz, spec.getFlags());
if (spec.getDisplayName()!=null)
- ((AbstractEnricher)enricher).setName(spec.getDisplayName());
+ ((AbstractEnricher)enricher).setDisplayName(spec.getDisplayName());
if (isNewStyleEnricher(clazz)) {
((AbstractEnricher)enricher).setManagementContext(managementContext);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/core/src/main/java/brooklyn/entity/rebind/BasicEnricherRebindSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/BasicEnricherRebindSupport.java b/core/src/main/java/brooklyn/entity/rebind/BasicEnricherRebindSupport.java
index ffbd447..0fc1584 100644
--- a/core/src/main/java/brooklyn/entity/rebind/BasicEnricherRebindSupport.java
+++ b/core/src/main/java/brooklyn/entity/rebind/BasicEnricherRebindSupport.java
@@ -48,7 +48,7 @@ public class BasicEnricherRebindSupport implements RebindSupport<EnricherMemento
public void reconstruct(RebindContext rebindContext, EnricherMemento memento) {
if (LOG.isTraceEnabled()) LOG.trace("Reconstructing enricher: {}", memento.toVerboseString());
- enricher.setName(memento.getDisplayName());
+ enricher.setDisplayName(memento.getDisplayName());
// TODO entity does config-lookup differently; the memento contains the config keys.
// BasicEntityMemento.postDeserialize uses the injectTypeClass to call EntityTypes.getDefinedConfigKeys(clazz)
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/core/src/main/java/brooklyn/entity/rebind/BasicPolicyRebindSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/BasicPolicyRebindSupport.java b/core/src/main/java/brooklyn/entity/rebind/BasicPolicyRebindSupport.java
index e97dedd..cac7996 100644
--- a/core/src/main/java/brooklyn/entity/rebind/BasicPolicyRebindSupport.java
+++ b/core/src/main/java/brooklyn/entity/rebind/BasicPolicyRebindSupport.java
@@ -48,7 +48,7 @@ public class BasicPolicyRebindSupport implements RebindSupport<PolicyMemento> {
public void reconstruct(RebindContext rebindContext, PolicyMemento memento) {
if (LOG.isTraceEnabled()) LOG.trace("Reconstructing policy: {}", memento.toVerboseString());
- policy.setName(memento.getDisplayName());
+ policy.setDisplayName(memento.getDisplayName());
// TODO entity does config-lookup differently; the memento contains the config keys.
// BasicEntityMemento.postDeserialize uses the injectTypeClass to call EntityTypes.getDefinedConfigKeys(clazz)
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java b/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
index 241ece4..be1f27d 100644
--- a/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
+++ b/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
@@ -251,7 +251,7 @@ public class MementosGenerators {
builder.type = policy.getClass().getName();
builder.typeClass = policy.getClass();
builder.id = policy.getId();
- builder.displayName = policy.getName();
+ builder.displayName = policy.getDisplayName();
// TODO persist config keys as well? Or only support those defined on policy class;
// current code will lose the ConfigKey type on rebind for anything not defined on class.
@@ -297,7 +297,7 @@ public class MementosGenerators {
builder.type = enricher.getClass().getName();
builder.typeClass = enricher.getClass();
builder.id = enricher.getId();
- builder.displayName = enricher.getName();
+ builder.displayName = enricher.getDisplayName();
// TODO persist config keys as well? Or only support those defined on policy class;
// current code will lose the ConfigKey type on rebind for anything not defined on class.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
index 3760933..b6dd15f 100644
--- a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
+++ b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
@@ -173,7 +173,7 @@ public abstract class AbstractEntityAdjunct implements EntityAdjunct, Configurab
//TODO inconsistent with entity and location, where name is legacy and displayName is encouraged!
//'displayName' is a legacy way to refer to a policy's name
Preconditions.checkArgument(flags.get("displayName") instanceof CharSequence, "'displayName' property should be a string");
- setName(flags.remove("displayName").toString());
+ setDisplayName(flags.remove("displayName").toString());
}
}
@@ -271,12 +271,26 @@ public abstract class AbstractEntityAdjunct implements EntityAdjunct, Configurab
}
@Override
- public String getName() {
+ public String getDisplayName() {
if (name!=null && name.length()>0) return name;
return getClass().getCanonicalName();
}
- public void setName(String name) { this.name = name; }
+ @Override
+ @Deprecated
+ public String getName() {
+ return getDisplayName();
+ }
+
+ public void setDisplayName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @deprecated since 0.7.0; see {@link #setDisplayName(String)}
+ */
+ @Deprecated
+ public void setName(String name) { setDisplayName(name); }
@Override
public String getId() { return id; }
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/core/src/test/java/brooklyn/entity/basic/EntitySpecTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/basic/EntitySpecTest.java b/core/src/test/java/brooklyn/entity/basic/EntitySpecTest.java
index 8550231..621ffcd 100644
--- a/core/src/test/java/brooklyn/entity/basic/EntitySpecTest.java
+++ b/core/src/test/java/brooklyn/entity/basic/EntitySpecTest.java
@@ -87,7 +87,7 @@ public class EntitySpecTest extends BrooklynAppUnitTestSupport {
Policy policy = Iterables.getOnlyElement(entity.getPolicies());
assertTrue(policy instanceof MyPolicy, "policy="+policy);
- assertEquals(policy.getName(), "mypolicyname");
+ assertEquals(policy.getDisplayName(), "mypolicyname");
assertEquals(policy.getConfig(MyPolicy.CONF1), "myconf1val");
}
@@ -110,7 +110,7 @@ public class EntitySpecTest extends BrooklynAppUnitTestSupport {
Enricher enricher = Iterables.getOnlyElement(entity.getEnrichers());
assertTrue(enricher instanceof MyEnricher, "enricher="+enricher);
- assertEquals(enricher.getName(), "myenrichername");
+ assertEquals(enricher.getDisplayName(), "myenrichername");
assertEquals(enricher.getConfig(MyEnricher.CONF1), "myconf1val");
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java b/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
index c9a6875..83ff569 100644
--- a/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
+++ b/policy/src/main/java/brooklyn/policy/loadbalancing/LoadBalancingPolicy.java
@@ -127,7 +127,7 @@ public class LoadBalancingPolicy<NodeType extends Entity, ItemType extends Movab
this.lowThresholdConfigKeyName = metric.getName()+".threshold.low";
this.highThresholdConfigKeyName = metric.getName()+".threshold.high";
this.model = model;
- this.strategy = new BalancingStrategy(getName(), model); // TODO: extract interface, inject impl
+ this.strategy = new BalancingStrategy(getDisplayName(), model); // TODO: extract interface, inject impl
// TODO Should re-use the execution manager's thread pool, somehow
executor = Executors.newSingleThreadScheduledExecutor(newThreadFactory());
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java b/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java
index 2d4e9f8..61e2974 100644
--- a/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java
+++ b/policy/src/test/java/brooklyn/policy/autoscaling/AutoScalerPolicyRebindTest.java
@@ -91,7 +91,7 @@ public class AutoScalerPolicyRebindTest extends RebindTestFixtureWithApp {
DynamicCluster newCluster = (DynamicCluster) Iterables.getOnlyElement(newApp.getChildren());
AutoScalerPolicy newPolicy = (AutoScalerPolicy) Iterables.getOnlyElement(newCluster.getPolicies());
- assertEquals(newPolicy.getName(), "myname");
+ assertEquals(newPolicy.getDisplayName(), "myname");
assertEquals(newPolicy.getConfig(AutoScalerPolicy.METRIC), METRIC_SENSOR);
assertEquals(newPolicy.getConfig(AutoScalerPolicy.ENTITY_WITH_METRIC), newCluster);
assertEquals(newPolicy.getConfig(AutoScalerPolicy.METRIC_UPPER_BOUND), 1);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/usage/rest-server/src/main/java/brooklyn/rest/transform/PolicyTransformer.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/transform/PolicyTransformer.java b/usage/rest-server/src/main/java/brooklyn/rest/transform/PolicyTransformer.java
index f5ef35d..e15c97f 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/transform/PolicyTransformer.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/transform/PolicyTransformer.java
@@ -54,7 +54,7 @@ public class PolicyTransformer {
.put("entity", URI.create(entityUri))
.build();
- return new PolicySummary(policy.getId(), policy.getName(), ApplicationTransformer.statusFromLifecycle(Policies.getPolicyStatus(policy)), links);
+ return new PolicySummary(policy.getId(), policy.getDisplayName(), ApplicationTransformer.statusFromLifecycle(Policies.getPolicyStatus(policy)), links);
}
public static PolicyConfigSummary policyConfigSummary(BrooklynRestResourceUtils utils, ApplicationSummary application, EntityLocal entity, Policy policy, ConfigKey<?> config) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/usage/rest-server/src/main/java/brooklyn/rest/util/BrooklynRestResourceUtils.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/util/BrooklynRestResourceUtils.java b/usage/rest-server/src/main/java/brooklyn/rest/util/BrooklynRestResourceUtils.java
index 9db3f10..724cd45 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/util/BrooklynRestResourceUtils.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/util/BrooklynRestResourceUtils.java
@@ -118,7 +118,7 @@ public class BrooklynRestResourceUtils {
if (policy.equals(p.getId())) return p;
}
for (Policy p: entity.getPolicies()) {
- if (policy.equals(p.getName())) return p;
+ if (policy.equals(p.getDisplayName())) return p;
}
throw WebResourceUtils.notFound("Cannot find policy '%s' in entity '%s'", policy, entity);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5ca049eb/usage/rest-server/src/test/java/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java b/usage/rest-server/src/test/java/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
index 2ba7483..58419bb 100644
--- a/usage/rest-server/src/test/java/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
@@ -100,7 +100,7 @@ public class BrooklynRestResourceUtilsTest {
assertEquals(subentityRetrieved.getDisplayName(), "subentity");
Policy subappPolicy = util.getPolicy(app.getId(), subentity.getId(), "mypolicy");
- assertEquals(subappPolicy.getName(), "mypolicy");
+ assertEquals(subappPolicy.getDisplayName(), "mypolicy");
}
public interface MyInterface {
[2/8] git commit: Internal*Factory: remove duplication
Posted by he...@apache.org.
Internal*Factory: remove duplication
- Remove duplication across InternalEntityFactory, InternalPolicyFactory
and InternalLocationFactory
- Remove duplication in callers of InternalEntityFactory.createEntity
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/e07155ad
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/e07155ad
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/e07155ad
Branch: refs/heads/master
Commit: e07155ad3fafa6bd6f3bc0ac2060ceaa95426c72
Parents: 9138317
Author: Aled Sage <al...@gmail.com>
Authored: Mon Jul 14 12:48:46 2014 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Jul 14 23:45:19 2014 +0100
----------------------------------------------------------------------
.../entity/proxying/InternalEntityFactory.java | 107 +++++++++++--------
.../entity/proxying/InternalFactory.java | 16 +--
.../proxying/InternalLocationFactory.java | 9 +-
.../entity/proxying/InternalPolicyFactory.java | 18 +---
.../entity/rebind/RebindManagerImpl.java | 40 ++-----
.../BrooklynComponentTemplateResolver.java | 13 ---
6 files changed, 79 insertions(+), 124 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e07155ad/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java b/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
index e572ce9..7abf68f 100644
--- a/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
+++ b/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
@@ -19,6 +19,7 @@
package brooklyn.entity.proxying;
import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@@ -29,11 +30,11 @@ import org.slf4j.LoggerFactory;
import brooklyn.config.ConfigKey;
import brooklyn.entity.Entity;
+import brooklyn.entity.basic.AbstractApplication;
import brooklyn.entity.basic.AbstractEntity;
import brooklyn.entity.basic.BrooklynTaskTags;
import brooklyn.entity.basic.EntityInternal;
import brooklyn.entity.basic.EntityLocal;
-import brooklyn.management.ManagementContext;
import brooklyn.management.internal.LocalEntityManager;
import brooklyn.management.internal.ManagementContextInternal;
import brooklyn.policy.Enricher;
@@ -46,10 +47,11 @@ import brooklyn.util.collections.MutableSet;
import brooklyn.util.exceptions.Exceptions;
import brooklyn.util.flags.FlagUtils;
import brooklyn.util.javalang.AggregateClassLoader;
-import brooklyn.util.javalang.Reflections;
import brooklyn.util.task.Tasks;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
/**
* Creates entities (and proxies) of required types, given the
@@ -57,6 +59,13 @@ import com.google.common.collect.ImmutableMap;
* This is an internal class for use by core-brooklyn. End-users are strongly discouraged from
* using this class directly.
*
+ * Used in three situations:
+ * <ul>
+ * <li>Normal entity creation (through entityManager.createEntity)
+ * <li>rebind (i.e. Brooklyn restart, or promotion of HA standby manager node)
+ * <li>yaml parsing
+ * </ul>
+ *
* @author aled
*/
public class InternalEntityFactory extends InternalFactory {
@@ -66,41 +75,33 @@ public class InternalEntityFactory extends InternalFactory {
private final EntityTypeRegistry entityTypeRegistry;
private final InternalPolicyFactory policyFactory;
- /**
- * Returns true if this is a "new-style" entity (i.e. where not expected to call the constructor to instantiate it).
- * That means it is an entity with a no-arg constructor.
- * @param managementContext
- * @param clazz
- */
- public static boolean isNewStyleEntity(ManagementContext managementContext, Class<?> clazz) {
- return InternalFactory.isNewStyle(managementContext, clazz);
- }
-
- public static boolean isNewStyleEntity(Class<?> clazz) {
- return InternalFactory.isNewStyle(clazz);
- }
-
public InternalEntityFactory(ManagementContextInternal managementContext, EntityTypeRegistry entityTypeRegistry, InternalPolicyFactory policyFactory) {
super(managementContext);
this.entityTypeRegistry = checkNotNull(entityTypeRegistry, "entityTypeRegistry");
this.policyFactory = checkNotNull(policyFactory, "policyFactory");
}
- @SuppressWarnings("unchecked")
public <T extends Entity> T createEntityProxy(EntitySpec<T> spec, T entity) {
- // TODO Don't want the proxy to have to implement EntityLocal, but required by how
- // AbstractEntity.parent is used (e.g. parent.getAllConfig)
- ClassLoader classloader = (spec.getImplementation() != null ? spec.getImplementation() : spec.getType()).getClassLoader();
- MutableSet.Builder<Class<?>> builder = MutableSet.<Class<?>>builder()
- .add(EntityProxy.class, Entity.class, EntityLocal.class, EntityInternal.class);
+ Set<Class<?>> interfaces = Sets.newLinkedHashSet();
if (spec.getType().isInterface()) {
- builder.add(spec.getType());
+ interfaces.add(spec.getType());
} else {
log.warn("EntitySpec declared in terms of concrete type "+spec.getType()+"; should be supplied in terms of interface");
}
- builder.addAll(spec.getAdditionalInterfaces());
- Set<Class<?>> interfaces = builder.build();
+ interfaces.addAll(spec.getAdditionalInterfaces());
+ return createEntityProxy(interfaces, entity);
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T extends Entity> T createEntityProxy(Iterable<Class<?>> interfaces, T entity) {
+ // TODO Don't want the proxy to have to implement EntityLocal, but required by how
+ // AbstractEntity.parent is used (e.g. parent.getAllConfig)
+ Set<Class<?>> allInterfaces = MutableSet.<Class<?>>builder()
+ .add(EntityProxy.class, Entity.class, EntityLocal.class, EntityInternal.class)
+ .addAll(interfaces)
+ .build();
+
// TODO OSGi strangeness! The classloader obtained from the type should be enough.
// If an OSGi class loader, it should delegate to find things like Entity.class etc.
// However, we get errors such as:
@@ -108,18 +109,17 @@ public class InternalEntityFactory extends InternalFactory {
// Building our own aggregating class loader gets around this.
// But we really should not have to do this! What are the consequences?
AggregateClassLoader aggregateClassLoader = AggregateClassLoader.newInstanceWithNoLoaders();
- aggregateClassLoader.addFirst(classloader);
aggregateClassLoader.addFirst(entity.getClass().getClassLoader());
- for(Class<?> iface : interfaces) {
+ for(Class<?> iface : allInterfaces) {
aggregateClassLoader.addLast(iface.getClassLoader());
}
return (T) java.lang.reflect.Proxy.newProxyInstance(
aggregateClassLoader,
- interfaces.toArray(new Class[interfaces.size()]),
+ allInterfaces.toArray(new Class[allInterfaces.size()]),
new EntityProxyImpl(entity));
}
-
+
public <T extends Entity> T createEntity(EntitySpec<T> spec) {
/* Order is important here. Changed Jul 2014 when supporting children in spec.
* (Previously was much simpler, and parent was set right after running initializers; and there were no children.)
@@ -147,8 +147,11 @@ public class InternalEntityFactory extends InternalFactory {
if (spec.getFlags().containsKey("id")) {
throw new IllegalArgumentException("Spec's flags must not contain id; use spec.id() instead for "+spec);
}
- if (spec.getId() != null && ((LocalEntityManager)managementContext.getEntityManager()).isKnownEntityId(spec.getId())) {
- throw new IllegalArgumentException("Entity with id "+spec.getId()+" already exists; cannot create new entity with this explicit id from spec "+spec);
+ if (spec.getId() != null) {
+ log.warn("Use of deprecated EntitySpec.id ({}); instead let management context pick the random+unique id", spec);
+ if (((LocalEntityManager)managementContext.getEntityManager()).isKnownEntityId(spec.getId())) {
+ throw new IllegalArgumentException("Entity with id "+spec.getId()+" already exists; cannot create new entity with this explicit id from spec "+spec);
+ }
}
try {
@@ -156,13 +159,6 @@ public class InternalEntityFactory extends InternalFactory {
T entity = constructEntity(clazz, spec);
- // TODO Could move setManagementContext call into constructEntity; would that break rebind?
- if (spec.getId() != null) {
- FlagUtils.setFieldsFromFlags(ImmutableMap.of("id", spec.getId()), entity);
- }
- ((AbstractEntity)entity).setManagementContext(managementContext);
- managementContext.prePreManage(entity);
-
loadUnitializedEntity(entity, spec);
entitiesByEntityId.put(entity.getId(), entity);
@@ -194,7 +190,6 @@ public class InternalEntityFactory extends InternalFactory {
if (spec.getDisplayName()!=null)
((AbstractEntity)entity).setDisplayName(spec.getDisplayName());
- if (((AbstractEntity)entity).getProxy() == null) ((AbstractEntity)entity).setProxy(createEntityProxy(spec, entity));
((AbstractEntity)entity).configure(MutableMap.copyOf(spec.getFlags()));
for (Map.Entry<ConfigKey<?>, Object> entry : spec.getConfig().entrySet()) {
@@ -281,18 +276,46 @@ public class InternalEntityFactory extends InternalFactory {
/**
* Constructs an entity (if new-style, calls no-arg constructor; if old-style, uses spec to pass in config).
+ * Sets the entity's proxy. If {@link EntitySpec#id(String)} was set then uses that to override the entity's id,
+ * but that behaviour is deprecated.
*/
public <T extends Entity> T constructEntity(Class<? extends T> clazz, EntitySpec<T> spec) {
- return super.construct(clazz, spec.getFlags());
+ T entity = constructEntityImpl(clazz, spec.getFlags(), spec.getId());
+ if (((AbstractEntity)entity).getProxy() == null) ((AbstractEntity)entity).setProxy(createEntityProxy(spec, entity));
+ return entity;
}
/**
* Constructs a new-style entity (fails if no no-arg constructor).
+ * Sets the entity's id and proxy.
*/
- public <T extends Entity> T constructEntity(Class<T> clazz) {
- return super.constructNewStyle(clazz);
+ public <T extends Entity> T constructEntity(Class<T> clazz, Iterable<Class<?>> interfaces, String entityId) {
+ if (!isNewStyle(clazz)) {
+ throw new IllegalStateException("Cannot construct old-style entity "+clazz);
+ }
+ checkNotNull(entityId, "entityId");
+ checkState(interfaces != null && !Iterables.isEmpty(interfaces), "must have at least one interface for entity %s:%s", clazz, entityId);
+
+ T entity = constructEntityImpl(clazz, ImmutableMap.<String, Object>of(), entityId);
+ if (((AbstractEntity)entity).getProxy() == null) ((AbstractEntity)entity).setProxy(createEntityProxy(interfaces, entity));
+ return entity;
}
+ protected <T extends Entity> T constructEntityImpl(Class<? extends T> clazz, Map<String, ?> constructionFlags, String entityId) {
+ T entity = super.construct(clazz, constructionFlags);
+
+ if (entityId != null) {
+ FlagUtils.setFieldsFromFlags(ImmutableMap.of("id", entityId), entity);
+ }
+ if (entity instanceof AbstractApplication) {
+ FlagUtils.setFieldsFromFlags(ImmutableMap.of("mgmt", managementContext), entity);
+ }
+ managementContext.prePreManage(entity);
+ ((AbstractEntity)entity).setManagementContext(managementContext);
+
+ return entity;
+ }
+
@Override
protected <T> T constructOldStyle(Class<T> clazz, Map<String,?> flags) throws InstantiationException, IllegalAccessException, InvocationTargetException {
if (flags.containsKey("parent") || flags.containsKey("owner")) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e07155ad/core/src/main/java/brooklyn/entity/proxying/InternalFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/proxying/InternalFactory.java b/core/src/main/java/brooklyn/entity/proxying/InternalFactory.java
index e024872..3b77526 100644
--- a/core/src/main/java/brooklyn/entity/proxying/InternalFactory.java
+++ b/core/src/main/java/brooklyn/entity/proxying/InternalFactory.java
@@ -23,7 +23,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
-import brooklyn.management.ManagementContext;
import brooklyn.management.internal.ManagementContextInternal;
import brooklyn.util.collections.MutableMap;
import brooklyn.util.exceptions.Exceptions;
@@ -62,19 +61,10 @@ public class InternalFactory {
}
/**
- * Returns true if this is a "new-style" policy (i.e. where not expected to call the constructor to instantiate it).
+ * Returns true if this is a "new-style" policy (i.e. where not expected callers to use the constructor directly to instantiate it).
*
- * @param managementContext
* @param clazz
*/
- public static boolean isNewStyle(ManagementContext managementContext, Class<?> clazz) {
- try {
- return isNewStyle(clazz);
- } catch (IllegalArgumentException e) {
- return false;
- }
- }
-
public static boolean isNewStyle(Class<?> clazz) {
try {
clazz.getConstructor(new Class[0]);
@@ -88,6 +78,10 @@ public class InternalFactory {
this.managementContext = checkNotNull(managementContext, "managementContext");
}
+ /**
+ * Constructs an instance (e.g. of entity, location, enricher or policy.
+ * If new-style, calls no-arg constructor; if old-style, uses spec to pass in config.
+ */
protected <T> T construct(Class<? extends T> clazz, Map<String, ?> constructorFlags) {
try {
if (isNewStyle(clazz)) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e07155ad/core/src/main/java/brooklyn/entity/proxying/InternalLocationFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/proxying/InternalLocationFactory.java b/core/src/main/java/brooklyn/entity/proxying/InternalLocationFactory.java
index ffcfac2..804b5d5 100644
--- a/core/src/main/java/brooklyn/entity/proxying/InternalLocationFactory.java
+++ b/core/src/main/java/brooklyn/entity/proxying/InternalLocationFactory.java
@@ -87,7 +87,7 @@ public class InternalLocationFactory extends InternalFactory {
try {
Class<? extends T> clazz = spec.getType();
- T loc = constructLocation(clazz, spec);
+ T loc = construct(clazz, spec.getFlags());
if (spec.getId() != null) {
FlagUtils.setFieldsFromFlags(ImmutableMap.of("id", spec.getId()), loc);
@@ -122,13 +122,6 @@ public class InternalLocationFactory extends InternalFactory {
}
/**
- * Constructs an entity (if new-style, calls no-arg constructor; if old-style, uses spec to pass in config).
- */
- public <T extends Location> T constructLocation(Class<? extends T> clazz, LocationSpec<T> spec) {
- return super.construct(clazz, spec.getFlags());
- }
-
- /**
* Constructs a new-style entity (fails if no no-arg constructor).
*/
public <T extends Location> T constructLocation(Class<T> clazz) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e07155ad/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java b/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
index 5480823..3839ce1 100644
--- a/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
+++ b/core/src/main/java/brooklyn/entity/proxying/InternalPolicyFactory.java
@@ -89,7 +89,7 @@ public class InternalPolicyFactory extends InternalFactory {
try {
Class<? extends T> clazz = spec.getType();
- T pol = constructPolicy(clazz, spec);
+ T pol = construct(clazz, spec.getFlags());
if (spec.getDisplayName()!=null)
((AbstractPolicy)pol).setName(spec.getDisplayName());
@@ -124,7 +124,7 @@ public class InternalPolicyFactory extends InternalFactory {
try {
Class<? extends T> clazz = spec.getType();
- T enricher = constructEnricher(clazz, spec);
+ T enricher = construct(clazz, spec.getFlags());
if (spec.getDisplayName()!=null)
((AbstractEnricher)enricher).setName(spec.getDisplayName());
@@ -151,20 +151,6 @@ public class InternalPolicyFactory extends InternalFactory {
}
/**
- * Constructs a policy (if new-style, calls no-arg constructor; if old-style, uses spec to pass in config).
- */
- public <T extends Policy> T constructPolicy(Class<? extends T> clazz, PolicySpec<T> spec) {
- return super.construct(clazz, spec.getFlags());
- }
-
- /**
- * Constructs an enricher (if new-style, calls no-arg constructor; if old-style, uses spec to pass in config).
- */
- public <T extends Enricher> T constructEnricher(Class<? extends T> clazz, EnricherSpec<T> spec) {
- return super.construct(clazz, spec.getFlags());
- }
-
- /**
* Constructs a new-style policy (fails if no no-arg constructor).
*/
public <T extends Policy> T constructPolicy(Class<T> clazz) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e07155ad/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
index 8814aa1..34a529e 100644
--- a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
+++ b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
@@ -23,6 +23,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import java.io.IOException;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@@ -41,6 +42,7 @@ import brooklyn.entity.basic.Entities;
import brooklyn.entity.basic.EntityInternal;
import brooklyn.entity.proxying.EntitySpec;
import brooklyn.entity.proxying.InternalEntityFactory;
+import brooklyn.entity.proxying.InternalFactory;
import brooklyn.entity.proxying.InternalLocationFactory;
import brooklyn.entity.proxying.InternalPolicyFactory;
import brooklyn.internal.BrooklynFeatureEnablement;
@@ -566,41 +568,11 @@ public class RebindManagerImpl implements RebindManager {
private Entity newEntity(String entityId, String entityType, Reflections reflections) {
Class<? extends Entity> entityClazz = (Class<? extends Entity>) reflections.loadClass(entityType);
- if (InternalEntityFactory.isNewStyleEntity(managementContext, entityClazz)) {
- // Not using entityManager.createEntity(EntitySpec) because don't want init() to be called
- // TODO Need to rationalise this to move code into methods of InternalEntityFactory.
- // The InternalEntityFactory.constructEntity is used in three places:
- // 1. normal entity creation (through entityManager.createEntity)
- // 2. rebind (i.e. here)
- // 3. yaml parsing
- // Purpose is to create a new (unconfigured/uninitialised) entity, but that is
- // known about by the managementContext and that has things like the right id and
- // a proxy for if another entity needs to reference it during the init phase.
+ if (InternalFactory.isNewStyle(entityClazz)) {
+ // Not using entityManager.createEntity(EntitySpec) because don't want init() to be called.
+ // Creates an uninitialized entity, but that has correct id + proxy.
InternalEntityFactory entityFactory = managementContext.getEntityFactory();
- Entity entity = entityFactory.constructEntity(entityClazz);
- FlagUtils.setFieldsFromFlags(ImmutableMap.of("id", entityId), entity);
- if (entity instanceof AbstractApplication) {
- FlagUtils.setFieldsFromFlags(ImmutableMap.of("mgmt", managementContext), entity);
- }
- managementContext.prePreManage(entity);
- ((AbstractEntity)entity).setManagementContext(managementContext);
-
- Class<?> entityInterface;
- List<Class<?>> additionalInterfaces;
- try {
- entityInterface = managementContext.getEntityManager().getEntityTypeRegistry().getEntityTypeOf((Class)entityClazz);
- additionalInterfaces = Reflections.getAllInterfaces(entityClazz);
- } catch (IllegalArgumentException e) {
- // TODO this can happen if it's an app with no annotation, for example; not nice catching exception
- entityInterface = Entity.class;
- additionalInterfaces = Reflections.getAllInterfaces(entityClazz);
- }
- EntitySpec<Entity> entitySpec = EntitySpec.create((Class)entityInterface)
- .additionalInterfaces(additionalInterfaces)
- .impl((Class)entityClazz)
- .id(entityId);
-
- ((AbstractEntity)entity).setProxy(entityFactory.createEntityProxy(entitySpec, entity));
+ Entity entity = entityFactory.constructEntity(entityClazz, Reflections.getAllInterfaces(entityClazz), entityId);
return entity;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e07155ad/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
index 2f000e8..c8112ee 100644
--- a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
+++ b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
@@ -36,7 +36,6 @@ import brooklyn.catalog.CatalogItem;
import brooklyn.config.ConfigKey;
import brooklyn.entity.Application;
import brooklyn.entity.Entity;
-import brooklyn.entity.basic.AbstractApplication;
import brooklyn.entity.basic.AbstractEntity;
import brooklyn.entity.basic.ConfigKeys;
import brooklyn.entity.basic.EntityInternal;
@@ -61,7 +60,6 @@ import brooklyn.util.javalang.Reflections;
import brooklyn.util.text.Strings;
import com.google.common.base.Function;
-import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
@@ -282,22 +280,11 @@ public class BrooklynComponentTemplateResolver {
Class<? extends T> entityImpl = (spec.getImplementation() != null) ? spec.getImplementation() : mgmt.getEntityManager().getEntityTypeRegistry().getImplementedBy(spec.getType());
InternalEntityFactory entityFactory = ((ManagementContextInternal)mgmt).getEntityFactory();
T entity = entityFactory.constructEntity(entityImpl, spec);
- if (entity instanceof AbstractApplication) {
- FlagUtils.setFieldsFromFlags(ImmutableMap.of("mgmt", mgmt), entity);
- }
- // TODO Some of the code below could go into constructEntity?
- if (spec.getId() != null) {
- FlagUtils.setFieldsFromFlags(ImmutableMap.of("id", spec.getId()), entity);
- }
String planId = (String)spec.getConfig().get(BrooklynCampConstants.PLAN_ID.getConfigKey());
if (planId != null) {
((EntityInternal)entity).setConfig(BrooklynCampConstants.PLAN_ID, planId);
}
- ((ManagementContextInternal)mgmt).prePreManage(entity);
- ((AbstractEntity)entity).setManagementContext((ManagementContextInternal)mgmt);
-
- ((AbstractEntity)entity).setProxy(entityFactory.createEntityProxy(spec, entity));
if (spec.getLocations().size() > 0) {
((AbstractEntity)entity).addLocations(spec.getLocations());
[3/8] git commit: Deprecate EntitySpec.id and LocationSpec.id
Posted by he...@apache.org.
Deprecate EntitySpec.id and LocationSpec.id
- Just let the management context decide what the id should be.
- Rebind goes through a different path.
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/91383179
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/91383179
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/91383179
Branch: refs/heads/master
Commit: 91383179bff219989c0f4a4f90d5f3d7e0360e94
Parents: 519bc9a
Author: Aled Sage <al...@gmail.com>
Authored: Mon Jul 14 12:47:25 2014 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Mon Jul 14 23:45:19 2014 +0100
----------------------------------------------------------------------
api/src/main/java/brooklyn/entity/proxying/EntitySpec.java | 7 +++++++
api/src/main/java/brooklyn/location/LocationSpec.java | 7 +++++++
.../src/test/java/brooklyn/entity/basic/DynamicGroupTest.java | 2 +-
3 files changed, 15 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/91383179/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java b/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java
index 1ea5fb6..2f67dbd 100644
--- a/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java
+++ b/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java
@@ -158,7 +158,10 @@ public class EntitySpec<T extends Entity> implements Serializable {
/**
* @return The id to use when creating the entity, or null if allow brooklyn to generate a unique id.
+ /**
+ * @deprecated since 0.7.0; instead let the management context pick a random+unique id
*/
+ @Deprecated
public String getId() {
return id;
}
@@ -240,6 +243,10 @@ public class EntitySpec<T extends Entity> implements Serializable {
return locations;
}
+ /**
+ * @deprecated since 0.7.0; instead let the management context pick a random+unique id
+ */
+ @Deprecated
public EntitySpec<T> id(String val) {
checkMutable();
id = val;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/91383179/api/src/main/java/brooklyn/location/LocationSpec.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/location/LocationSpec.java b/api/src/main/java/brooklyn/location/LocationSpec.java
index d9027b5..6f767c2 100644
--- a/api/src/main/java/brooklyn/location/LocationSpec.java
+++ b/api/src/main/java/brooklyn/location/LocationSpec.java
@@ -90,6 +90,10 @@ public class LocationSpec<T extends Location> implements Serializable {
this.type = type;
}
+ /**
+ * @deprecated since 0.7.0; instead let the management context pick a random+unique id
+ */
+ @Deprecated
public LocationSpec<T> id(String val) {
id = val;
return this;
@@ -164,7 +168,10 @@ public class LocationSpec<T extends Location> implements Serializable {
/**
* @return The id of the location to be created, or null if brooklyn can auto-generate an id
+ *
+ * @deprecated since 0.7.0; instead let the management context pick a random+unique id
*/
+ @Deprecated
public String getId() {
return id;
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/91383179/core/src/test/java/brooklyn/entity/basic/DynamicGroupTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/basic/DynamicGroupTest.java b/core/src/test/java/brooklyn/entity/basic/DynamicGroupTest.java
index 1491210..00ed47a 100644
--- a/core/src/test/java/brooklyn/entity/basic/DynamicGroupTest.java
+++ b/core/src/test/java/brooklyn/entity/basic/DynamicGroupTest.java
@@ -293,7 +293,7 @@ public class DynamicGroupTest {
});
for (int i = 0; i < NUM_CYCLES; i++) {
- final TestEntity entity = app.createAndManageChild(EntitySpec.create(TestEntity.class).id("entity-" + i));
+ final TestEntity entity = app.createAndManageChild(EntitySpec.create(TestEntity.class));
LOG.debug("Created: entity {}", i);
Asserts.succeedsEventually(new Runnable() {
public void run() {
[7/8] git commit: This closes #69
Posted by he...@apache.org.
This closes #69
Conflicts:
core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java - imports
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/491eb609
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/491eb609
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/491eb609
Branch: refs/heads/master
Commit: 491eb609c01f6a285f226f043f6ee1512cfca820
Parents: d67444a 0194580
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Aug 1 16:11:53 2014 -0400
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Aug 1 16:11:53 2014 -0400
----------------------------------------------------------------------
.../java/brooklyn/basic/BrooklynObject.java | 31 +++
api/src/main/java/brooklyn/entity/Entity.java | 10 +-
.../brooklyn/entity/proxying/EntitySpec.java | 7 +
.../entity/rebind/BrooklynObjectType.java | 30 +++
.../rebind/PersistenceExceptionHandler.java | 13 +-
.../entity/rebind/RebindExceptionHandler.java | 43 +---
.../main/java/brooklyn/location/Location.java | 5 +-
.../java/brooklyn/location/LocationSpec.java | 7 +
api/src/main/java/brooklyn/policy/Enricher.java | 3 +
.../java/brooklyn/policy/EntityAdjunct.java | 9 +-
api/src/main/java/brooklyn/policy/Policy.java | 3 +
.../brooklyn/basic/AbstractBrooklynObject.java | 33 +++
.../brooklyn/basic/BrooklynObjectInternal.java | 24 ++
.../brooklyn/entity/basic/AbstractEntity.java | 61 ++---
.../brooklyn/entity/basic/EntityFunctions.java | 7 +-
.../brooklyn/entity/basic/EntityInternal.java | 3 +-
.../brooklyn/entity/basic/PolicyDescriptor.java | 2 +-
.../entity/proxying/InternalEntityFactory.java | 186 ++++++--------
.../entity/proxying/InternalFactory.java | 131 ++++++++++
.../proxying/InternalLocationFactory.java | 78 +-----
.../entity/proxying/InternalPolicyFactory.java | 109 +--------
.../rebind/BasicEnricherRebindSupport.java | 2 +-
.../entity/rebind/BasicPolicyRebindSupport.java | 2 +-
.../rebind/PeriodicDeltaChangeListener.java | 8 +-
.../rebind/PersistenceExceptionHandlerImpl.java | 29 +--
.../rebind/RebindExceptionHandlerImpl.java | 244 ++++---------------
.../entity/rebind/RebindManagerImpl.java | 74 ++----
.../entity/rebind/dto/BrooklynMementoImpl.java | 20 +-
.../entity/rebind/dto/MementosGenerators.java | 4 +-
.../BrooklynMementoPersisterToFile.java | 1 +
.../BrooklynMementoPersisterToMultiFile.java | 20 +-
.../BrooklynMementoPersisterToObjectStore.java | 97 +++-----
.../location/basic/AbstractLocation.java | 49 ++--
.../location/basic/LocationInternal.java | 3 +-
.../policy/basic/AbstractEntityAdjunct.java | 35 +--
.../brooklyn/entity/basic/DynamicGroupTest.java | 2 +-
.../brooklyn/entity/basic/EntitySpecTest.java | 4 +-
.../entity/rebind/RebindFailuresTest.java | 17 +-
.../rebind/RecordingRebindExceptionHandler.java | 113 ++-------
.../loadbalancing/LoadBalancingPolicy.java | 2 +-
.../autoscaling/AutoScalerPolicyRebindTest.java | 2 +-
.../BrooklynComponentTemplateResolver.java | 13 -
.../rest/transform/PolicyTransformer.java | 2 +-
.../rest/util/BrooklynRestResourceUtils.java | 2 +-
.../util/BrooklynRestResourceUtilsTest.java | 2 +-
45 files changed, 641 insertions(+), 901 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491eb609/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491eb609/api/src/main/java/brooklyn/location/LocationSpec.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491eb609/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491eb609/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
----------------------------------------------------------------------
diff --cc core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
index d6a31fb,7abf68f..4d53fbb
--- a/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
+++ b/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
@@@ -29,7 -30,7 +30,8 @@@ import org.slf4j.LoggerFactory
import brooklyn.config.ConfigKey;
import brooklyn.entity.Entity;
+import brooklyn.entity.Group;
+ import brooklyn.entity.basic.AbstractApplication;
import brooklyn.entity.basic.AbstractEntity;
import brooklyn.entity.basic.BrooklynTaskTags;
import brooklyn.entity.basic.EntityInternal;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491eb609/core/src/main/java/brooklyn/location/basic/AbstractLocation.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491eb609/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491eb609/core/src/test/java/brooklyn/entity/basic/EntitySpecTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491eb609/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491eb609/usage/rest-server/src/main/java/brooklyn/rest/util/BrooklynRestResourceUtils.java
----------------------------------------------------------------------