fileType) {
+ return Resources.loadResources(fileName, fileType)
+ .onFailure(throwable -> {
+ if (logger.isErrorEnabled()) {
+ logger.error("[Capa][CapaProperties.loadConfigFile] fileName[{}] fileType[{}] load error!",
+ fileName, fileType.getName(), throwable);
+ }
+ })
+ .get();
+ }
+}
\ No newline at end of file
diff --git a/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/CapaEnvironment.java b/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/metainfo/CapaEnvironment.java
similarity index 65%
rename from sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/CapaEnvironment.java
rename to sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/metainfo/CapaEnvironment.java
index 2d47b49..8607b82 100644
--- a/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/CapaEnvironment.java
+++ b/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/metainfo/CapaEnvironment.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package group.rxcloud.capa.infrastructure;
+package group.rxcloud.capa.infrastructure.metainfo;
/**
* Capa System Environment Properties.
@@ -26,7 +26,6 @@ public interface CapaEnvironment {
*
* + AWS
* + ALIBABA
- * + CTRIP
*
*
* @return the deploy cloud name
@@ -56,29 +55,4 @@ public interface CapaEnvironment {
* @return the deploy env name
*/
String getDeployEnv();
-
- /**
- * The {@code CapaEnvironment} SPI Class Provider.
- */
- abstract class Provider {
-
- /**
- * The {@code CapaEnvironment} SPI Class Obj.
- */
- private volatile static CapaEnvironment INSTANCE;
-
- /**
- * Gets {@code CapaEnvironment} instance.
- */
- public static CapaEnvironment getInstance() {
- if (INSTANCE == null) {
- synchronized (Provider.class) {
- if (INSTANCE == null) {
- INSTANCE = CapaClassLoader.loadInfrastructureClassObj("cloud", CapaEnvironment.class);
- }
- }
- }
- return INSTANCE;
- }
- }
}
diff --git a/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/plugin/PluginLoader.java b/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/plugin/PluginLoader.java
index de783be..90e447c 100644
--- a/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/plugin/PluginLoader.java
+++ b/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/plugin/PluginLoader.java
@@ -16,11 +16,10 @@
*/
package group.rxcloud.capa.infrastructure.plugin;
-import group.rxcloud.capa.infrastructure.CapaClassLoader;
+import group.rxcloud.vrml.spi.SPI;
-import java.util.Map;
+import java.util.List;
import java.util.Optional;
-import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier;
/**
@@ -28,16 +27,6 @@
*/
public final class PluginLoader {
- private static final Map pluginImplCache;
-
- static {
- pluginImplCache = new ConcurrentHashMap<>();
- }
-
- public static Map getPluginImplCache() {
- return pluginImplCache;
- }
-
/**
* Load plugin impl by java spi.
*
@@ -46,9 +35,18 @@ public static Map getPluginImplCache() {
* @return the optional of plugin impl
*/
public static Optional loadPluginImpl(Class pluginSuperClazz) {
- Object o = pluginImplCache.computeIfAbsent(pluginSuperClazz,
- aClass -> CapaClassLoader.loadPluginClassObj(pluginSuperClazz));
- return Optional.ofNullable((T) o);
+ return SPI.loadSpiImpl(pluginSuperClazz);
+ }
+
+ /**
+ * Load plugin impls by java spi.
+ *
+ * @param the plugin interface type
+ * @param pluginSuperClazz the plugin interface class
+ * @return the optional of plugin impls
+ */
+ public static Optional> loadPluginImpls(Class pluginSuperClazz) {
+ return SPI.loadSpiImpls(pluginSuperClazz);
}
/**
@@ -60,14 +58,6 @@ public static Optional loadPluginImpl(Class pluginSuperClazz) {
* @return the plugin impl
*/
public static T loadPluginImpl(Class pluginSuperClazz, Supplier defaultPluginObj) {
- Object o = pluginImplCache.computeIfAbsent(pluginSuperClazz,
- aClass -> {
- T pluginClassObj = CapaClassLoader.loadPluginClassObj(pluginSuperClazz);
- if (pluginClassObj != null) {
- return pluginClassObj;
- }
- return defaultPluginObj.get();
- });
- return (T) o;
+ return SPI.loadSpiImpl(pluginSuperClazz, defaultPluginObj);
}
}
diff --git a/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/plugin/PluginOrder.java b/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/plugin/PluginOrder.java
deleted file mode 100644
index 958dba6..0000000
--- a/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/plugin/PluginOrder.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * 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 group.rxcloud.capa.infrastructure.plugin;
-
-/**
- * TODO: 2021/12/29 currently only support one plugin.
- */
-public @interface PluginOrder {
-
- int order() default 0;
-}
diff --git a/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/utils/SpiUtils.java b/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/utils/SpiUtils.java
deleted file mode 100644
index 0bf4b12..0000000
--- a/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/utils/SpiUtils.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * 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 group.rxcloud.capa.infrastructure.utils;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import group.rxcloud.capa.infrastructure.CapaProperties;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.nio.charset.StandardCharsets;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Load class and create instance from config file.
- * TODO move to {@link CapaProperties}
- */
-@Deprecated
-public final class SpiUtils {
-
- private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper()
- .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
- .setSerializationInclusion(JsonInclude.Include.NON_NULL);
-
- private static final Map CACHE = new ConcurrentHashMap<>();
-
- private SpiUtils() {
- }
-
- public static T loadConfigNullable(String path, Class configType) {
- try (InputStream in = configType.getResourceAsStream(path)) {
- if (in != null) {
- InputStreamReader inputStreamReader = new InputStreamReader(in, StandardCharsets.UTF_8);
- return OBJECT_MAPPER.readValue(inputStreamReader, configType);
- }
- } catch (IOException e) {
- }
- return null;
- }
-
- @Nullable
- public static T loadFromSpiComponentFileNullable(Class type, String fileSuffix) {
- return loadFromSpiComponentFileNullable(type, null, null, fileSuffix, false);
- }
-
- @Nullable
- public static T loadFromSpiComponentFileNullable(Class type, Class[] argTypes, Object[] args,
- String fileSuffix, boolean cache) {
- try {
- Properties properties = CapaProperties.COMPONENT_PROPERTIES_SUPPLIER.apply(fileSuffix);
- String path = properties.getProperty(type.getName());
- if (path != null) {
- return doNewInstance(path, type, argTypes, args, cache);
- }
- return null;
- } catch (Throwable e) {
- }
- return null;
- }
-
- @Nullable
- public static T newInstanceWithConstructorCache(String path, Class type) {
- return newInstance(path, type, null, null, true);
- }
-
- @Nullable
- public static T newInstance(String path, Class type, Class[] argTypes, Object[] args, boolean cache) {
- if (path == null) {
- return null;
- }
- return doNewInstance(path, type, argTypes, args, cache);
- }
-
- private static String keyOf(String path, Class type, Class[] argTypes) {
- StringBuilder builder = new StringBuilder(type.getName()).append('=').append(path);
- if (argTypes != null) {
- for (Class arg : argTypes) {
- builder.append('_').append(arg.getName());
- }
- }
- return builder.toString();
- }
-
- @Nonnull
- private static T doNewInstance(String path, Class type, Class[] argTypes, Object[] args, boolean cache) {
- String key = keyOf(path, type, argTypes);
- Constructor targetCons = cache
- ? CACHE.computeIfAbsent(key, k -> findConstructor(path, type, argTypes))
- : findConstructor(path, type, argTypes);
- try {
- return targetCons.getParameterCount() == 0 ? targetCons.newInstance() : targetCons.newInstance(args);
- } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
- throw new IllegalArgumentException("Fail to create component. targetType = " + type.getName(), e);
- }
- }
-
- private static Constructor findConstructor(String path, Class type, Class[] argTypes) {
- try {
- Class aClass = path == null ? type : (Class) Class.forName(path);
- return aClass.getConstructor(argTypes);
- } catch (ClassNotFoundException | NoSuchMethodException e) {
- throw new IllegalArgumentException("Fail to find the constructor. path = " + path, e);
- }
- }
-}
diff --git a/sdk-infrastructure/src/main/resources/sample/capa-infrastructure-cloud.properties b/sdk-infrastructure/src/main/resources/sample/capa-infrastructure-cloud.properties
index 55b95a1..07f4905 100644
--- a/sdk-infrastructure/src/main/resources/sample/capa-infrastructure-cloud.properties
+++ b/sdk-infrastructure/src/main/resources/sample/capa-infrastructure-cloud.properties
@@ -1,2 +1,2 @@
# {@code CapaEnvironment} spi class load
-group.rxcloud.capa.infrastructure.CapaEnvironment=your-spi-class-path
\ No newline at end of file
+group.rxcloud.capa.infrastructure.metainfo.CapaEnvironment=your-spi-class-path
\ No newline at end of file
diff --git a/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/CapaPropertiesTest.java b/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/loader/CapaPropertiesTest.java
similarity index 89%
rename from sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/CapaPropertiesTest.java
rename to sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/loader/CapaPropertiesTest.java
index 11c803c..83f7b5d 100644
--- a/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/CapaPropertiesTest.java
+++ b/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/loader/CapaPropertiesTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package group.rxcloud.capa.infrastructure;
+package group.rxcloud.capa.infrastructure.loader;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -25,7 +25,7 @@ public class CapaPropertiesTest {
@Test
public void testGetComponentProperties_Success() {
- Properties properties = CapaProperties.COMPONENT_PROPERTIES_SUPPLIER.apply("rpc");
+ Properties properties = CapaProperties.loadComponentProperties("rpc");
String value = properties.getProperty("key");
Assertions.assertEquals("value", value);
}
diff --git a/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/MyImpl.java b/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/MyImpl.java
deleted file mode 100644
index 1791222..0000000
--- a/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/MyImpl.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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 group.rxcloud.capa.infrastructure.utils;
-
-public class MyImpl implements MyInterface{
-
-}
diff --git a/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/MyImplWithArgs.java b/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/MyImplWithArgs.java
deleted file mode 100644
index 5232dca..0000000
--- a/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/MyImplWithArgs.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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 group.rxcloud.capa.infrastructure.utils;
-
-public class MyImplWithArgs implements MyInterfaceWithArgs{
-
- private MyImplWithArgs(Integer a) {
-
- }
- public MyImplWithArgs(String a) {
-
- }
- public MyImplWithArgs(Integer a, String b) {
-
- }
-
- public MyImplWithArgs(boolean a, short b, int c, long d, float e, double f, byte g, char h, String i) {
-
- }
-}
diff --git a/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/MyInterface.java b/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/MyInterface.java
deleted file mode 100644
index 70fb329..0000000
--- a/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/MyInterface.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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 group.rxcloud.capa.infrastructure.utils;
-
-public interface MyInterface {
-
-}
diff --git a/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/MyInterfaceWithArgs.java b/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/MyInterfaceWithArgs.java
deleted file mode 100644
index fe69c4c..0000000
--- a/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/MyInterfaceWithArgs.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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 group.rxcloud.capa.infrastructure.utils;
-
-public interface MyInterfaceWithArgs {
-
-}
diff --git a/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/SpiUtilsTest.java b/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/SpiUtilsTest.java
deleted file mode 100644
index 9e0ab08..0000000
--- a/sdk-infrastructure/src/test/java/group/rxcloud/capa/infrastructure/utils/SpiUtilsTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * 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 group.rxcloud.capa.infrastructure.utils;
-
-import org.junit.jupiter.api.Test;
-
-import java.util.List;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-public class SpiUtilsTest {
-
- @Test
- public void loadConfigNullable() {
- Config config = SpiUtils.loadConfigNullable("/config.json", Config.class);
- assertEquals("aaa", config.str);
- assertEquals(2, config.getList().size());
- assertEquals("zzz", config.getList().get(0));
-
- assertNull(SpiUtils.loadConfigNullable("aaa", Config.class));
- assertNull(SpiUtils.loadConfigNullable("/config.json", Integer.class));
- }
-
- @Test
- public void loadFromSpiComponentFileNullable() {
- MyInterface myInterface = SpiUtils.loadFromSpiComponentFileNullable(MyInterface.class, "test");
- assertTrue(myInterface instanceof MyImpl);
- }
-
- @Test
- public void loadFromSpiComponentFileNullable2() {
- MyInterfaceWithArgs myInterfaceWithArgs = SpiUtils.loadFromSpiComponentFileNullable(MyInterfaceWithArgs.class, new Class[] {boolean.class, short.class, int.class, long.class, float.class, double.class, byte.class, char.class, String.class}, new Object[] {true, (short)1, 2, 3L, 4.0f, 5.0, (byte)0x1, 'x', "a"}, "test", true);
-
- assertTrue(myInterfaceWithArgs instanceof MyImplWithArgs);
-
-
- }
-
- @Test
- public void loadFromSpiComponentFileNullable2Fail() {
- MyInterfaceWithArgs myInterfaceWithArgs = SpiUtils.loadFromSpiComponentFileNullable(MyInterfaceWithArgs.class, "test");
- assertNull(myInterfaceWithArgs);
-
-
- assertNull(SpiUtils.loadFromSpiComponentFileNullable(MyImplWithArgs.class, new Class[] {String.class}, new Object[] {"a"}, "test", true));
-
- assertNull(SpiUtils.loadFromSpiComponentFileNullable(MyInterfaceWithArgs.class, new Class[] {Long.class}, new Object[] {1L}, "test", false));
-
- assertNull(SpiUtils.loadFromSpiComponentFileNullable(MyInterfaceWithArgs.class, new Class[] {Integer.class}, new Object[] {1}, "test", false));
-
- assertNull(SpiUtils.loadFromSpiComponentFileNullable(MyInterfaceWithArgs.class, new Class[] {boolean.class, short.class, int.class, long.class, float.class, double.class, byte.class, char.class, String.class}, new Object[] {true, (short)1, 2, 3L, 4.0f, 5.0, null, 'x', "a"}, "test", true));
-
-
- }
-
- @Test
- public void newInstance() {
- assertNull(SpiUtils.newInstance(null, Config.class, null, null, false));
-
- MyImpl my = SpiUtils.newInstanceWithConstructorCache(MyImpl.class.getCanonicalName(), MyImpl.class);
- assertNotNull(my);
-
- MyImplWithArgs myImplWithArgs = SpiUtils.newInstance(MyImplWithArgs.class.getCanonicalName(),MyImplWithArgs.class, new Class[] {String.class}, new Object[] {"a"}, false);
- assertNotNull(myImplWithArgs);
- }
-
- @Test
- public void newInstanceFail() {
- Throwable t = null;
- try {
- Config my = SpiUtils.newInstanceWithConstructorCache(Config.class.getCanonicalName(), Config.class);
- } catch (Throwable throwable) {
- t = throwable;
- }
- assertNotNull(t);
- }
-
- static class Config {
-
- private String str;
-
- private List list;
-
- public String getStr() {
- return str;
- }
-
- public Config setStr(String str) {
- this.str = str;
- return this;
- }
-
- public List getList() {
- return list;
- }
-
- public Config setList(List list) {
- this.list = list;
- return this;
- }
- }
-}
\ No newline at end of file
diff --git a/sdk-infrastructure/src/test/resources/capa-component-test.properties b/sdk-infrastructure/src/test/resources/capa-component-test.properties
deleted file mode 100644
index dafd0e8..0000000
--- a/sdk-infrastructure/src/test/resources/capa-component-test.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-group.rxcloud.capa.infrastructure.utils.MyInterface=group.rxcloud.capa.infrastructure.utils.MyImpl
-group.rxcloud.capa.infrastructure.utils.MyInterfaceWithArgs=group.rxcloud.capa.infrastructure.utils.MyImplWithArgs
\ No newline at end of file
diff --git a/sdk-infrastructure/src/test/resources/config.json b/sdk-infrastructure/src/test/resources/config.json
deleted file mode 100644
index 0de38f1..0000000
--- a/sdk-infrastructure/src/test/resources/config.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "str": "aaa",
- "list": ["zzz", "yyy"]
-}
\ No newline at end of file
diff --git a/sdk-infrastructure/src/test/resources/config.properties b/sdk-infrastructure/src/test/resources/config.properties
deleted file mode 100644
index 2b9c2c9..0000000
--- a/sdk-infrastructure/src/test/resources/config.properties
+++ /dev/null
@@ -1 +0,0 @@
-str=aaa
\ No newline at end of file
diff --git a/sdk-spi-demo/pom.xml b/sdk-spi-demo/pom.xml
index db60b90..2e4e9a0 100644
--- a/sdk-spi-demo/pom.xml
+++ b/sdk-spi-demo/pom.xml
@@ -23,7 +23,7 @@
capa-parent
group.rxcloud
- 1.11.13.2.RELEASE
+ 2.12.1.RELEASE
capa-sdk-spi-demo
diff --git a/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/DemoCapaEnvironment.java b/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/DemoCapaEnvironment.java
index 2c5ad16..a74c679 100644
--- a/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/DemoCapaEnvironment.java
+++ b/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/DemoCapaEnvironment.java
@@ -16,7 +16,7 @@
*/
package group.rxcloud.capa.spi.demo;
-import group.rxcloud.capa.infrastructure.CapaEnvironment;
+import group.rxcloud.capa.infrastructure.metainfo.CapaEnvironment;
public class DemoCapaEnvironment implements CapaEnvironment {
diff --git a/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/http/DemoCapaHttp.java b/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/http/DemoCapaHttp.java
index 8e14a28..9308cb1 100644
--- a/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/http/DemoCapaHttp.java
+++ b/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/http/DemoCapaHttp.java
@@ -18,9 +18,7 @@
import group.rxcloud.capa.component.http.HttpResponse;
import group.rxcloud.capa.infrastructure.serializer.CapaObjectSerializer;
-import group.rxcloud.capa.spi.demo.http.config.DemoRpcServiceOptions;
import group.rxcloud.capa.spi.http.CapaSerializeHttpSpi;
-import group.rxcloud.capa.spi.http.config.RpcServiceOptions;
import group.rxcloud.cloudruntimes.utils.TypeRef;
import okhttp3.OkHttpClient;
import org.slf4j.Logger;
@@ -54,11 +52,7 @@ protected CompletableFuture> invokeSpiApi(String appId,
String httpMethod,
Map headers,
Map> urlParameters,
- TypeRef type,
- RpcServiceOptions rpcServiceOptions) {
- DemoRpcServiceOptions demoRpcServiceOptions = (DemoRpcServiceOptions) rpcServiceOptions;
- logger.info("[DemoCapaHttp.invokeSpiApi] rpcServiceOptions[{}]", demoRpcServiceOptions);
-
+ TypeRef type) {
return CompletableFuture.supplyAsync(
() -> {
logger.info("[DemoCapaHttp.invokeSpiApi] supplyAsync[{}]", System.currentTimeMillis());
diff --git a/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/http/config/DemoRpcServiceOptions.java b/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/http/config/DemoRpcServiceOptions.java
deleted file mode 100644
index a826018..0000000
--- a/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/http/config/DemoRpcServiceOptions.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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 group.rxcloud.capa.spi.demo.http.config;
-
-import group.rxcloud.capa.spi.http.config.RpcServiceOptions;
-
-/**
- * RPC service options. Define for AppId.
- */
-public class DemoRpcServiceOptions implements RpcServiceOptions {
-
- /**
- * Unique rpc service ID
- */
- private final String appId;
-
- /**
- * Instantiates a new Capa rpc service options.
- *
- * @param appId the app id
- */
- public DemoRpcServiceOptions(String appId) {
- this.appId = appId;
- }
-}
diff --git a/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/http/config/DemoSpiOptionsLoader.java b/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/http/config/DemoSpiOptionsLoader.java
deleted file mode 100644
index 5d069fd..0000000
--- a/sdk-spi-demo/src/main/java/group/rxcloud/capa/spi/demo/http/config/DemoSpiOptionsLoader.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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 group.rxcloud.capa.spi.demo.http.config;
-
-import group.rxcloud.capa.spi.http.config.CapaSpiOptionsLoader;
-
-import java.util.Objects;
-
-public class DemoSpiOptionsLoader implements CapaSpiOptionsLoader {
-
- @Override
- public DemoRpcServiceOptions loadRpcServiceOptions(String appId) {
- Objects.requireNonNull(appId, "appId");
- return new DemoRpcServiceOptions(appId);
- }
-}
diff --git a/sdk-spi-demo/src/main/resources/capa-component-rpc-common.properties b/sdk-spi-demo/src/main/resources/capa-component-rpc-common.properties
deleted file mode 100644
index 603ac10..0000000
--- a/sdk-spi-demo/src/main/resources/capa-component-rpc-common.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-# rpc spi options class loader
-group.rxcloud.capa.spi.http.config.CapaSpiOptionsLoader=group.rxcloud.capa.spi.demo.http.config.DemoSpiOptionsLoader
\ No newline at end of file
diff --git a/sdk-spi-demo/src/main/resources/capa-infrastructure-cloud.properties b/sdk-spi-demo/src/main/resources/capa-infrastructure-cloud.properties
index 1ea1ff4..c2ce813 100644
--- a/sdk-spi-demo/src/main/resources/capa-infrastructure-cloud.properties
+++ b/sdk-spi-demo/src/main/resources/capa-infrastructure-cloud.properties
@@ -1,2 +1,2 @@
# {@code CapaEnvironment} spi class load
-group.rxcloud.capa.infrastructure.CapaEnvironment=group.rxcloud.capa.spi.demo.DemoCapaEnvironment
\ No newline at end of file
+group.rxcloud.capa.infrastructure.metainfo.CapaEnvironment=group.rxcloud.capa.spi.demo.DemoCapaEnvironment
\ No newline at end of file
diff --git a/sdk-spi/pom.xml b/sdk-spi/pom.xml
index 2537bf6..0193333 100644
--- a/sdk-spi/pom.xml
+++ b/sdk-spi/pom.xml
@@ -23,7 +23,7 @@
capa-parent
group.rxcloud
- 1.11.13.2.RELEASE
+ 2.12.1.RELEASE
capa-sdk-spi
diff --git a/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/CapaHttpSpi.java b/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/CapaHttpSpi.java
index e2b3291..d27b720 100644
--- a/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/CapaHttpSpi.java
+++ b/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/CapaHttpSpi.java
@@ -21,9 +21,6 @@
import group.rxcloud.capa.infrastructure.exceptions.CapaErrorContext;
import group.rxcloud.capa.infrastructure.exceptions.CapaException;
import group.rxcloud.capa.infrastructure.serializer.CapaObjectSerializer;
-import group.rxcloud.capa.spi.http.config.CapaSpiOptionsLoader;
-import group.rxcloud.capa.spi.http.config.CapaSpiProperties;
-import group.rxcloud.capa.spi.http.config.RpcServiceOptions;
import group.rxcloud.cloudruntimes.utils.TypeRef;
import okhttp3.OkHttpClient;
import org.slf4j.Logger;
@@ -90,18 +87,10 @@ protected CompletableFuture> doInvokeApi(String httpMethod,
version, _invoke, appId, _method, method);
}
- // load spi service options
- RpcServiceOptions rpcServiceOptions = getRpcServiceOptions(appId);
- Objects.requireNonNull(rpcServiceOptions, "rpcServiceOptions");
- if (logger.isDebugEnabled()) {
- logger.debug("[Capa.Rpc.Client.http] [CapaHttpSpi] invoke rpc options[{}]",
- rpcServiceOptions);
- }
-
try {
// spi invoke
CompletableFuture> invokeSpiApi = invokeSpiApi(
- appId, method, requestData, httpMethod, headers, urlParameters, type, rpcServiceOptions);
+ appId, method, requestData, httpMethod, headers, urlParameters, type);
invokeSpiApi.whenComplete(this::callbackLog);
return invokeSpiApi;
} catch (CapaException e) {
@@ -114,17 +103,6 @@ protected CompletableFuture> doInvokeApi(String httpMethod,
}
}
- /**
- * Override to get the configuration of the corresponding appId.
- *
- * @param appId the app id
- * @return the rpc service options
- */
- protected RpcServiceOptions getRpcServiceOptions(String appId) {
- CapaSpiOptionsLoader capaSpiOptionsLoader = CapaSpiProperties.getSpiOptionsLoader();
- return capaSpiOptionsLoader.loadRpcServiceOptions(appId);
- }
-
private void callbackLog(HttpResponse tHttpResponse, Throwable throwable) {
if (throwable != null) {
if (throwable instanceof CapaException) {
@@ -157,15 +135,14 @@ private void callbackLog(HttpResponse tHttpResponse, Throwable throwable)
/**
* Invoke spi api and then return async completable future.
*
- * @param the response type parameter
- * @param appId the app id
- * @param method the invoke method
- * @param requestData the request data
- * @param httpMethod the http method
- * @param headers the headers
- * @param urlParameters the url parameters
- * @param type the response type
- * @param rpcServiceOptions the rpc service options
+ * @param the response type parameter
+ * @param appId the app id
+ * @param method the invoke method
+ * @param requestData the request data
+ * @param httpMethod the http method
+ * @param headers the headers
+ * @param urlParameters the url parameters
+ * @param type the response type
* @return the async completable future
*/
protected abstract CompletableFuture> invokeSpiApi(String appId,
@@ -174,6 +151,5 @@ protected abstract CompletableFuture> invokeSpiApi(String ap
String httpMethod,
Map headers,
Map> urlParameters,
- TypeRef type,
- RpcServiceOptions rpcServiceOptions);
+ TypeRef type);
}
diff --git a/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/config/CapaSpiOptionsLoader.java b/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/config/CapaSpiOptionsLoader.java
deleted file mode 100644
index ed952e7..0000000
--- a/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/config/CapaSpiOptionsLoader.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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 group.rxcloud.capa.spi.http.config;
-
-
-/**
- * Read SPI configuration and generate corresponding configuration objects.
- */
-public interface CapaSpiOptionsLoader {
-
- /**
- * Load rpc service options.
- *
- * @param appId the appId
- * @return the rpc service options
- */
- T loadRpcServiceOptions(String appId);
-}
diff --git a/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/config/CapaSpiProperties.java b/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/config/CapaSpiProperties.java
deleted file mode 100644
index 5a1550f..0000000
--- a/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/config/CapaSpiProperties.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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 group.rxcloud.capa.spi.http.config;
-
-import group.rxcloud.capa.infrastructure.CapaClassLoader;
-
-/**
- * The Capa SPI environment.
- */
-public abstract class CapaSpiProperties {
-
- /**
- * Static lock object.
- */
- private static final Object LOCK = new Object();
-
- private static volatile CapaSpiOptionsLoader instance;
-
- /**
- * Gets default options loader.
- *
- * @return the default options loader
- */
- public static CapaSpiOptionsLoader getSpiOptionsLoader() {
- if (instance == null) {
- synchronized (LOCK) {
- if (instance == null) {
- instance = CapaClassLoader.loadComponentClassObj("rpc-common", CapaSpiOptionsLoader.class);
- }
- }
- }
- // load spi rpc impl
- return instance;
- }
-}
diff --git a/sdk-spi/src/main/java/group/rxcloud/capa/spi/telemetry/CapaContextAsyncWrapperSpi.java b/sdk-spi/src/main/java/group/rxcloud/capa/spi/telemetry/CapaContextAsyncWrapperPluginSpi.java
similarity index 88%
rename from sdk-spi/src/main/java/group/rxcloud/capa/spi/telemetry/CapaContextAsyncWrapperSpi.java
rename to sdk-spi/src/main/java/group/rxcloud/capa/spi/telemetry/CapaContextAsyncWrapperPluginSpi.java
index 55cf4c4..6419e87 100644
--- a/sdk-spi/src/main/java/group/rxcloud/capa/spi/telemetry/CapaContextAsyncWrapperSpi.java
+++ b/sdk-spi/src/main/java/group/rxcloud/capa/spi/telemetry/CapaContextAsyncWrapperPluginSpi.java
@@ -16,10 +16,10 @@
*/
package group.rxcloud.capa.spi.telemetry;
-import group.rxcloud.capa.component.telemetry.context.CapaContextAsyncWrapper;
+import group.rxcloud.capa.component.telemetry.context.CapaContextAsyncWrapperPlugin;
/**
* SPI Capa context async wrapper.
*/
-public abstract class CapaContextAsyncWrapperSpi implements CapaContextAsyncWrapper {
+public abstract class CapaContextAsyncWrapperPluginSpi implements CapaContextAsyncWrapperPlugin {
}
diff --git a/sdk-spi/src/main/resources/sample/capa-component-rpc-common.properties b/sdk-spi/src/main/resources/sample/capa-component-rpc-common.properties
deleted file mode 100644
index 1e2ea0f..0000000
--- a/sdk-spi/src/main/resources/sample/capa-component-rpc-common.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-# rpc spi options class loader
-group.rxcloud.capa.spi.http.config.CapaSpiOptionsLoader=your-spi-class-path
\ No newline at end of file
diff --git a/sdk-spi/src/test/java/group/rxcloud/capa/spi/http/CapaSerializeHttpSpiTest.java b/sdk-spi/src/test/java/group/rxcloud/capa/spi/http/CapaSerializeHttpSpiTest.java
index 3136b6e..b3b4487 100644
--- a/sdk-spi/src/test/java/group/rxcloud/capa/spi/http/CapaSerializeHttpSpiTest.java
+++ b/sdk-spi/src/test/java/group/rxcloud/capa/spi/http/CapaSerializeHttpSpiTest.java
@@ -22,7 +22,6 @@
import group.rxcloud.capa.infrastructure.serializer.CapaObjectSerializer;
import group.rxcloud.capa.infrastructure.serializer.DefaultObjectSerializer;
import group.rxcloud.capa.infrastructure.serializer.ExtensionObjectSerializer;
-import group.rxcloud.capa.spi.http.config.RpcServiceOptions;
import group.rxcloud.cloudruntimes.utils.TypeRef;
import okhttp3.Headers;
import okhttp3.MediaType;
@@ -183,14 +182,6 @@ public void testOnResponseInSerializationResponseFutureCallback_Success() throws
future.cancel(true);
}
-
- @Test
- public void testGetRpcServiceOptions_Success() {
- RpcServiceOptions rpcServiceOptions = capaSerializeHttpSpi.getRpcServiceOptions("appId");
- String className = rpcServiceOptions.getClass().getName();
- Assertions.assertEquals("group.rxcloud.capa.spi.http.config.TestRpcServiceOptions", className);
- }
-
@Test
public void testDoInvokeApi_Success() throws ExecutionException, InterruptedException {
String[] pathSegments = new String[]{
@@ -298,8 +289,7 @@ protected CompletableFuture> invokeSpiApi(String appId,
String httpMethod,
Map headers,
Map> urlParameters,
- TypeRef type,
- RpcServiceOptions rpcServiceOptions) {
+ TypeRef type) {
return CompletableFuture.supplyAsync(
() -> {
return new HttpResponse<>(null, null, 200);
diff --git a/sdk-spi/src/test/java/group/rxcloud/capa/spi/http/config/TestRpcServiceOptions.java b/sdk-spi/src/test/java/group/rxcloud/capa/spi/http/config/TestRpcServiceOptions.java
deleted file mode 100644
index 6f9f5ff..0000000
--- a/sdk-spi/src/test/java/group/rxcloud/capa/spi/http/config/TestRpcServiceOptions.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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 group.rxcloud.capa.spi.http.config;
-
-/**
- * RPC service options used in tests only.
- */
-public class TestRpcServiceOptions implements RpcServiceOptions {
-
- /**
- * Unique rpc service ID
- */
- private final String appId;
-
- /**
- * Instantiates a new Capa rpc service options.
- *
- * @param appId the app id
- */
- public TestRpcServiceOptions(String appId) {
- this.appId = appId;
- }
-}
diff --git a/sdk-spi/src/test/java/group/rxcloud/capa/spi/http/config/TestSpiOptionsLoader.java b/sdk-spi/src/test/java/group/rxcloud/capa/spi/http/config/TestSpiOptionsLoader.java
deleted file mode 100644
index 9d65cdd..0000000
--- a/sdk-spi/src/test/java/group/rxcloud/capa/spi/http/config/TestSpiOptionsLoader.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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 group.rxcloud.capa.spi.http.config;
-
-import java.util.Objects;
-
-/**
- * The spi options loader used in tests only.
- */
-public class TestSpiOptionsLoader implements CapaSpiOptionsLoader {
-
- @Override
- public TestRpcServiceOptions loadRpcServiceOptions(String appId) {
- Objects.requireNonNull(appId, "appId");
- return new TestRpcServiceOptions(appId);
- }
-}
\ No newline at end of file
diff --git a/sdk-spi/src/test/resources/capa-component-rpc-common.properties b/sdk-spi/src/test/resources/capa-component-rpc-common.properties
deleted file mode 100644
index d3f0e57..0000000
--- a/sdk-spi/src/test/resources/capa-component-rpc-common.properties
+++ /dev/null
@@ -1 +0,0 @@
-group.rxcloud.capa.spi.http.config.CapaSpiOptionsLoader=group.rxcloud.capa.spi.http.config.TestSpiOptionsLoader
\ No newline at end of file
diff --git a/sdk-springboot/pom.xml b/sdk-springboot/pom.xml
index 921629f..cc37f2e 100644
--- a/sdk-springboot/pom.xml
+++ b/sdk-springboot/pom.xml
@@ -23,7 +23,7 @@
capa-parent
group.rxcloud
- 1.11.13.2.RELEASE
+ 2.12.1.RELEASE
sdk-springboot
@@ -31,7 +31,6 @@
2.3.12.RELEASE
- 1.0.1-RELEASE
@@ -55,14 +54,28 @@
org.springframework.boot
- spring-boot-starter
+ spring-boot-starter-web
+ true
-
- com.kevinten
+ group.rxcloud
+ cloud-runtimes-api
+ true
+
+
+
+
+ group.rxcloud
vrml-core
- ${vrml.version}
+ true
+
+
+
+
+ io.projectreactor
+ reactor-core
+ true