You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2021/02/23 14:15:41 UTC
[servicecomb-java-chassis] branch master updated: [SCB-2193]
dynamic enum can indicate value is static or dynamic (#2248)
This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/master by this push:
new 1ae0b6b [SCB-2193] dynamic enum can indicate value is static or dynamic (#2248)
1ae0b6b is described below
commit 1ae0b6b521e1e926c7b156c49e41b626e521dd2c
Author: wujimin <wu...@huawei.com>
AuthorDate: Tue Feb 23 22:15:30 2021 +0800
[SCB-2193] dynamic enum can indicate value is static or dynamic (#2248)
---
.../core/registry/ThirdServiceRegister.java | 6 ++++--
.../foundation/common/base/DynamicEnum.java | 18 ++++++++++++++++++
.../foundation/common/base/DynamicEnumCache.java | 8 +++++++-
.../foundation/common/base/DynamicEnumTest.java | 14 ++++++++++++++
4 files changed, 43 insertions(+), 3 deletions(-)
diff --git a/core/src/main/java/org/apache/servicecomb/core/registry/ThirdServiceRegister.java b/core/src/main/java/org/apache/servicecomb/core/registry/ThirdServiceRegister.java
index c3053ee..375d3e9 100644
--- a/core/src/main/java/org/apache/servicecomb/core/registry/ThirdServiceRegister.java
+++ b/core/src/main/java/org/apache/servicecomb/core/registry/ThirdServiceRegister.java
@@ -86,13 +86,15 @@ public abstract class ThirdServiceRegister implements BootListener, EnvironmentA
public static final int ORDER = -1000;
- private static final String VERSION = "1.0";
+ public static final String VERSION = "1.0";
+
+ public static final List<String> DEFAULT_ADDRESSES = Collections.singletonList("http://127.0.0.1");
/**
* role: {@link EndpointUtils}<br>
* default to any address
*/
- protected List<String> urls = Collections.singletonList("http://127.0.0.1");
+ protected List<String> urls = DEFAULT_ADDRESSES;
protected String appId;
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/base/DynamicEnum.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/base/DynamicEnum.java
index 7889332..6629db5 100644
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/base/DynamicEnum.java
+++ b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/base/DynamicEnum.java
@@ -18,11 +18,15 @@ package org.apache.servicecomb.foundation.common.base;
import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonValue;
public abstract class DynamicEnum<T> {
private T value;
+ @JsonIgnore
+ private boolean dynamic = false;
+
public DynamicEnum(T value) {
this.value = value;
}
@@ -32,6 +36,20 @@ public abstract class DynamicEnum<T> {
return value;
}
+ @JsonIgnore
+ public boolean isStatic() {
+ return !dynamic;
+ }
+
+ public boolean isDynamic() {
+ return dynamic;
+ }
+
+ public DynamicEnum<T> setDynamic(boolean dynamic) {
+ this.dynamic = dynamic;
+ return this;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/base/DynamicEnumCache.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/base/DynamicEnumCache.java
index ff50aa5..74d27cd 100644
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/base/DynamicEnumCache.java
+++ b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/base/DynamicEnumCache.java
@@ -70,10 +70,16 @@ public class DynamicEnumCache<T extends DynamicEnum<?>> {
}
T instance = values.get(value);
+ if (instance != null) {
+ return instance;
+ }
+
try {
// do not cache unknown value to avoid attach
// if need to cache unknown value, should avoid cache too many values
- return instance != null ? instance : constructor.newInstance(value);
+ instance = constructor.newInstance(value);
+ instance.setDynamic(true);
+ return instance;
} catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
LOGGER.error("failed to create enum, class={}, value={}.", cls.getName(), value);
return null;
diff --git a/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/base/DynamicEnumTest.java b/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/base/DynamicEnumTest.java
index 91d1e2c..6658172 100644
--- a/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/base/DynamicEnumTest.java
+++ b/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/base/DynamicEnumTest.java
@@ -51,6 +51,20 @@ class DynamicEnumTest {
}
@Test
+ void should_be_dynamic_for_unknown_value() {
+ Color color = Color.fromValue("unknown");
+ assertThat(color.isDynamic()).isTrue();
+ assertThat(color.isStatic()).isFalse();
+ }
+
+ @Test
+ void should_be_static_for_known_value() {
+ Color color = Color.fromValue("RED");
+ assertThat(color.isDynamic()).isFalse();
+ assertThat(color.isStatic()).isTrue();
+ }
+
+ @Test
void should_encode() {
assertThat(Json.encode(Color.RED)).isEqualTo("\"RED\"");
}