Repository: incubator-tamaya-sandbox Updated Branches: refs/heads/master f1c7dccb6 -> 56adb6d8e
Fixed build issues. Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/56adb6d8 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/56adb6d8 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/56adb6d8 Branch: refs/heads/master Commit: 56adb6d8ec8e726d3006af1d24997a0629f2ca88 Parents: f1c7dcc Author: Anatole Tresch <[email protected]> Authored: Wed Nov 21 08:22:27 2018 +0100 Committer: Anatole Tresch <[email protected]> Committed: Wed Nov 21 08:22:27 2018 +0100 ---------------------------------------------------------------------- .../org/apache/tamaya/jsr382/SmokeExamples.java | 445 +++++++++++++------ .../internal/ComponentConfigurator.java | 1 + .../DSLLoadingConfigurationProviderSpi.java | 86 ---- ...tamaya.metamodel.spi.MetaConfigurationReader | 1 - ...g.apache.tamaya.spi.ConfigurationProviderSpi | 20 - .../vertx/TamayaConfigurationProducer.java | 3 +- 6 files changed, 300 insertions(+), 256 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/56adb6d8/configjsr/src/test/java/org/apache/tamaya/jsr382/SmokeExamples.java ---------------------------------------------------------------------- diff --git a/configjsr/src/test/java/org/apache/tamaya/jsr382/SmokeExamples.java b/configjsr/src/test/java/org/apache/tamaya/jsr382/SmokeExamples.java index f7e0001..9a7d520 100644 --- a/configjsr/src/test/java/org/apache/tamaya/jsr382/SmokeExamples.java +++ b/configjsr/src/test/java/org/apache/tamaya/jsr382/SmokeExamples.java @@ -1,147 +1,298 @@ -///* -// * 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 org.apache.tamaya.jsr382; -// -//import org.apache.tamaya.Configuration; -//import org.apache.tamaya.ConfigurationSnapshot; -// -//import javax.config.Config; -//import javax.config.ConfigAccessor; -//import javax.config.ConfigProvider; -//import javax.config.ConfigSnapshot; -//import java.util.Arrays; -//import java.util.Optional; -// -///** -// * Simple smoke example to use the JDK 382 API. -// */ -//public class SmokeExamples { -// -// -// static Server defaultServer; -// -// public static void main(String[] args) { -// } -// -// -// public void jsr382(){ -// -// Config config = ConfigProvider.getConfig(); -// -// String textValue = config.getValue("foo.bar.property", String.class); -// int intValue = config.getValue("foo.bar.property", int.class); -// Server serverValue = config.getValue("foo.bar.property", Server.class); -// } -// -// public void apacheTamaya(){ -// -// Configuration cfg = Configuration.current(); -// -// String textValue = cfg.get("foo.bar.property"); -// int intValue = cfg.get("foo.bar.property", int.class); -// Server serverValue = cfg.get("foo.bar.property", Server.class); -// } -// -// public void jsr382_Optional(){ -// -// Config config = ConfigProvider.getConfig(); -// -// Optional<String> textValue = config.getOptionalValue("foo.bar.property", String.class); -// Optional<Integer> intValue = config.getOptionalValue("foo.bar.property", Integer.class); -// Optional<Server> serverValue = config.getOptionalValue("foo.bar.property", Server.class); -// } -// -// public void apacheTamaya_Optional(){ -// -// Configuration cfg = Configuration.current(); -// -// Optional<String> textValue = cfg.getOptional("foo.bar.property"); -// Optional<Integer> intValue = cfg.getOptional("foo.bar.property", Integer.class); -// Optional<Server> serverValue = cfg.getOptional("foo.bar.property", Server.class); -// } -// -// public void jsr382_Defaults(){ -// -// Config config = ConfigProvider.getConfig(); -// -// String textValue = config.getOptionalValue("foo.bar.property", String.class).orElse("anyDefault"); -// Integer intValue = config.getOptionalValue("foo.bar.property", Integer.class).orElse(1234); -// Server serverValue = config.getOptionalValue("foo.bar.property", Server.class).orElse(defaultServer); -// } -// -// public void apacheTamaya_Defaults(){ -// -// Configuration cfg = Configuration.current(); -// -// String textValue = cfg.getOrDefault("foo.bar.property", "anyDefault"); -// Integer intValue = cfg.getOrDefault("foo.bar.property", Integer.class, 1234); -// Server serverValue = cfg.getOrDefault("foo.bar.property", Server.class, defaultServer); -// } -// -// public void jsr382_multiKeyLookup(){ -// -// Config config = ConfigProvider.getConfig(); -// -// ConfigAccessor<String> accessor = config.access("foo.bar.property"); -// accessor = accessor.addLookupSuffix("DEV").addLookupSuffix("server01"); -// accessor = accessor.withDefault("anyDefault"); -// String textValue = accessor.getValue(); -// } -// -// public void apacheTamaya_multiKeyLookup(){ -// -// Configuration config = Configuration.current(); -// -// String textValue = config.getOrDefault( -// Arrays.asList( -// "foo.bar.property.DEV.server1", -// "foo.bar.property.server1", -// "foo.bar.property.DEV", -// "foo.bar.property"), -// "anyDefault"); -// } -// -// public void jsr382_snapshot(){ -// -// Config config = ConfigProvider.getConfig(); -// -// ConfigAccessor<String> accessor = config.access("foo.bar.property"); -// accessor = accessor.addLookupSuffix("DEV"); -// accessor = accessor.withDefault("anyDefault"); -// ConfigAccessor<Integer> accessor2 = config.access("foo.bar.property2").as(Integer.class); -// accessor = accessor.withDefault("1234"); -// ConfigSnapshot snapshot = config.snapshotFor(accessor, accessor2); -// -// String property1 = accessor.getValue(snapshot); -// Integer property2 = accessor2.getValue(snapshot); -// } -// -// public void apacheTamaya_snapshot(){ -// -// ConfigurationSnapshot config = Configuration.current().getSnapshot( -// "foo.bar.property", "foo.bar.property.DEV", "foo.bar.property2"); -// -// String property1 = config.getOrDefault( -// Arrays.asList("foo.bar.property.DEV", "foo.bar.property"), -// "anyDefault"); -// Integer property2 = config.getOrDefault( -// "foo.bar.property2", Integer.class, 1234); -// } -// -//} +/* + * 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 org.apache.tamaya.jsr382; + +import org.apache.tamaya.Configuration; +import org.apache.tamaya.ConfigurationSnapshot; +import org.apache.tamaya.TypeLiteral; +import org.apache.tamaya.functions.ConfigurationFunctions; +import org.apache.tamaya.spi.*; + +import javax.config.Config; +import javax.config.ConfigAccessor; +import javax.config.ConfigProvider; +import javax.config.ConfigSnapshot; +import javax.config.spi.ConfigBuilder; +import javax.config.spi.ConfigProviderResolver; +import javax.config.spi.ConfigSource; +import javax.config.spi.Converter; +import java.net.ServerSocket; +import java.util.Arrays; +import java.util.Collections; +import java.util.Map; +import java.util.Optional; + +/** + * Simple smoke example to use the JDK 382 API. + */ +public class SmokeExamples { + + interface Server{ + + } + + static Server defaultServer; + + public static void main(String[] args) { + new SmokeExamples().filterAndPrint_tamaya(); + } + + + public void jsr382(){ + + Config config = ConfigProvider.getConfig(); + + String textValue = config.getValue("foo.bar.property", String.class); + int intValue = config.getValue("foo.bar.property", int.class); + Server serverValue = config.getValue("foo.bar.property", Server.class); + } + + public void apacheTamaya(){ + + Configuration cfg = Configuration.current(); + + String textValue = cfg.get("foo.bar.property"); + int intValue = cfg.get("foo.bar.property", int.class); + Server serverValue = cfg.get("foo.bar.property", Server.class); + } + + public void jsr382_Optional(){ + + Config config = ConfigProvider.getConfig(); + + Optional<String> textValue = config.getOptionalValue("foo.bar.property", String.class); + Optional<Integer> intValue = config.getOptionalValue("foo.bar.property", Integer.class); + Optional<Server> serverValue = config.getOptionalValue("foo.bar.property", Server.class); + } + + public void apacheTamaya_Optional(){ + + Configuration cfg = Configuration.current(); + + Optional<String> textValue = cfg.getOptional("foo.bar.property"); + Optional<Integer> intValue = cfg.getOptional("foo.bar.property", Integer.class); + Optional<Server> serverValue = cfg.getOptional("foo.bar.property", Server.class); + } + + public void jsr382_Defaults(){ + + Config config = ConfigProvider.getConfig(); + + String textValue = config.getOptionalValue("foo.bar.property", String.class).orElse("anyDefault"); + Integer intValue = config.getOptionalValue("foo.bar.property", Integer.class).orElse(1234); + Server serverValue = config.getOptionalValue("foo.bar.property", Server.class).orElse(defaultServer); + } + + public void apacheTamaya_Defaults(){ + + Configuration cfg = Configuration.current(); + + String textValue = cfg.getOrDefault("foo.bar.property", "anyDefault"); + Integer intValue = cfg.getOrDefault("foo.bar.property", Integer.class, 1234); + Server serverValue = cfg.getOrDefault("foo.bar.property", Server.class, defaultServer); + } + + public void jsr382_multiKeyLookup(){ + + Config config = ConfigProvider.getConfig(); + + ConfigAccessor<String> accessor = config.access("foo.bar.property"); + accessor = accessor.addLookupSuffix("DEV").addLookupSuffix("server01"); + accessor = accessor.withDefault("anyDefault"); + String textValue = accessor.getValue(); + } + + public void apacheTamaya_multiKeyLookup(){ + + Configuration config = Configuration.current(); + + String textValue = config.getOrDefault( + Arrays.asList( + "foo.bar.property.DEV.server1", + "foo.bar.property.server1", + "foo.bar.property.DEV", + "foo.bar.property"), + "anyDefault"); + } + + public void jsr382_snapshot(){ + + Config config = ConfigProvider.getConfig(); + + ConfigAccessor<String> accessor = config.access("foo.bar.property"); + accessor = accessor.addLookupSuffix("DEV"); + accessor = accessor.withDefault("anyDefault"); + ConfigAccessor<Integer> accessor2 = config.access("foo.bar.property2").as(Integer.class); + accessor = accessor.withDefault("1234"); + ConfigSnapshot snapshot = config.snapshotFor(accessor, accessor2); + + String property1 = accessor.getValue(snapshot); + Integer property2 = accessor2.getValue(snapshot); + } + + public void apacheTamaya_snapshot(){ + + ConfigurationSnapshot config = Configuration.current().getSnapshot( + "foo.bar.property", "foo.bar.property.DEV", "foo.bar.property2"); + + String property1 = config.getOrDefault( + Arrays.asList("foo.bar.property.DEV", "foo.bar.property"), "anyDefault"); + Integer property2 = config.getOrDefault("foo.bar.property2", Integer.class, 1234); + } + + public void jsr382_access(){ + + Config config = ConfigProvider.getConfig(); + Config config2 = ConfigProvider.getConfig(ClassLoader.getSystemClassLoader()); + + ConfigProviderResolver.instance().registerConfig(config, Thread.currentThread().getContextClassLoader()); + ConfigProviderResolver.instance().registerConfig(config2, ClassLoader.getSystemClassLoader()); + ConfigProviderResolver.instance().releaseConfig(config2); + } + + public void apacheTamaya_access(){ + + Configuration config = Configuration.current(); + Configuration config2 = Configuration.current(ClassLoader.getSystemClassLoader()); + + Configuration.setCurrent(config); + Configuration.setCurrent(config2, ClassLoader.getSystemClassLoader()); + Configuration released = Configuration.releaseConfiguration(ClassLoader.getSystemClassLoader()); + } + + public void jsr382_builder(){ + + ConfigBuilder builder = ConfigProviderResolver.instance().getBuilder(); + builder.addDefaultSources(); + builder.forClassLoader(ClassLoader.getSystemClassLoader()); + builder.addDiscoveredSources(); + builder.addDiscoveredConverters(); + builder.withConverter(Void.class, 0, s -> null); + ConfigSource myConfigSource = new MyConfigSource(); + builder.withSources(myConfigSource); + Config config = builder.build(); + } + + public void apacheTamaya_builder(){ + + ConfigurationBuilder builder = Configuration.createConfigurationBuilder(); + builder.setClassLoader(ClassLoader.getSystemClassLoader()); + builder.addDefaultPropertySources(); + builder.addDefaultPropertySources(); + builder.addDefaultPropertyConverters(); + builder.addPropertyConverters(TypeLiteral.of(Void.class), (s, ctx) -> null); + PropertySource myConfigSource = new MyPropertySource(); + builder.addPropertySources(myConfigSource); + builder.highestPriority(myConfigSource); + Configuration config = builder.build(); + } + + public void resolution_jsr(){ + + String myKey = "Test ${java.version},${java.foo},${PATH}"; + + Config config = ConfigProvider.getConfig(); + String resolvedValue = config.access("myKey").evaluateVariables(true).getValue(); + } + + public void resolution_tamaya(){ + + String myKey = "Test ${java.version},${java.foo},${env:PATH}"; + + Configuration config = Configuration.current(); + String resolvedValue = config.get("myKey"); + } + + public void filterAndPrint_tamaya(){ + + Configuration config = Configuration.current(); + // Filter only java.* entries + Configuration javaConfig = config.map(ConfigurationFunctions.section("java.")); + // Print them as text + String text = javaConfig.adapt(ConfigurationFunctions.textInfo()); + System.out.println(text); + text = javaConfig.adapt(ConfigurationFunctions.xmlInfo()); + System.out.println(text); + } + + private class MyConfigSource implements ConfigSource { + @Override + public Map<String, String> getProperties() { + return Collections.emptyMap(); + } + + @Override + public String getValue(String propertyName) { + return "Config:"+propertyName; + } + + @Override + public String getName() { + return "demo"; + } + } + + private class MyConverter implements Converter<ServerSocket> { + + @Override + public ServerSocket convert(String value) { + try { + int port = 89; + int backlog = 0; + int[] values = null; // parseValues(value); + return new ServerSocket(values[0],values[1]); + }catch(Exception e){ + return null; + } + } + } + + private class MyPropertySource implements PropertySource { + @Override + public Map<String, PropertyValue> getProperties() { + return Collections.emptyMap(); + } + + @Override + public PropertyValue get(String key) { + return PropertyValue.createValue(key, "Config:"+key); + } + + @Override + public String getName() { + return "demo"; + } + } + + private class MyTamayaConverter implements PropertyConverter<ServerSocket> { + + @Override + public ServerSocket convert(String value, ConversionContext context) { + try { + String key = context.getKey(); + // the conversion context enables much more powerful conversion... + int port = context.getConfiguration().getOrDefault(key+".port", int.class, 89); + int backlog = context.getConfiguration().getOrDefault(key+".backlog", int.class, 20); + return new ServerSocket(port, backlog); + }catch(Exception e){ + return null; + } + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/56adb6d8/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ComponentConfigurator.java ---------------------------------------------------------------------- diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ComponentConfigurator.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ComponentConfigurator.java index 812abf0..ae915a4 100644 --- a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ComponentConfigurator.java +++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ComponentConfigurator.java @@ -178,6 +178,7 @@ public final class ComponentConfigurator<T> { default: if(Enum.class.isAssignableFrom(targetType)){ Method m = targetType.getDeclaredMethod("valueOf", String.class); + m.setAccessible(true); return m.invoke(null, value); } Constructor c = targetType.getConstructor(String.class); http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/56adb6d8/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/DSLLoadingConfigurationProviderSpi.java ---------------------------------------------------------------------- diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/DSLLoadingConfigurationProviderSpi.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/DSLLoadingConfigurationProviderSpi.java deleted file mode 100644 index 2ad6869..0000000 --- a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/DSLLoadingConfigurationProviderSpi.java +++ /dev/null @@ -1,86 +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 org.apache.tamaya.metamodel.internal; - -import org.apache.tamaya.metamodel.MetaConfiguration; -import org.apache.tamaya.Configuration; -import org.apache.tamaya.spi.*; -import org.apache.tamaya.spi.ConfigurationBuilder; -import org.apache.tamaya.spisupport.*; -import org.osgi.service.component.annotations.Component; - -import javax.annotation.Priority; -import java.util.Objects; - -/** - * ConfigurationContext that uses {@link MetaConfiguration} to configure the - * Tamaya configuration context. - */ -@Priority(10) -@Component -public class DSLLoadingConfigurationProviderSpi implements ConfigurationProviderSpi{ - - // TODO make this provider multi classloader aware... - private volatile Configuration config; - private final Object LOCK = new Object(); - - @Override - public ConfigurationBuilder getConfigurationBuilder() { - return new DefaultConfigurationBuilder(); - } - - @Override - public void setConfiguration(Configuration config, ClassLoader classLoader) { - this.config = Objects.requireNonNull(config); - } - - @Override - public boolean isConfigurationSettable(ClassLoader classLoader) { - return true; - } - - @Override - public Configuration getConfiguration(ClassLoader classLoader) { - checkInitialized(); - return config; - } - - @Override - public Configuration createConfiguration(ConfigurationContext context) { - return new DefaultConfiguration(context); - } - - private void checkInitialized() { - if(config==null){ - synchronized (LOCK) { - if(config==null){ - // load defaults - this.config = new DefaultConfigurationBuilder() - .addDefaultPropertyConverters() - .addDefaultPropertyFilters() - .addDefaultPropertySources() - .sortPropertyFilter(PropertyFilterComparator.getInstance()) - .sortPropertySources(PropertySourceComparator.getInstance()) - .build(); - } - } - } - } - -} http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/56adb6d8/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigurationReader ---------------------------------------------------------------------- diff --git a/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigurationReader b/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigurationReader index 79b9249..6442e25 100644 --- a/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigurationReader +++ b/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigurationReader @@ -21,6 +21,5 @@ org.apache.tamaya.metamodel.internal.PropertyFilterReader org.apache.tamaya.metamodel.internal.PropertyConverterReader org.apache.tamaya.metamodel.internal.PropertySourceReader org.apache.tamaya.metamodel.internal.MetaContextReader -org.apache.tamaya.metamodel.internal.CombinationPolicyReader org.apache.tamaya.metamodel.internal.PropertyFilterOrderingReader org.apache.tamaya.metamodel.internal.PropertySourceOrderingReader \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/56adb6d8/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationProviderSpi ---------------------------------------------------------------------- diff --git a/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationProviderSpi b/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationProviderSpi deleted file mode 100644 index f9a7797..0000000 --- a/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationProviderSpi +++ /dev/null @@ -1,20 +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 current 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. -# - -org.apache.tamaya.metamodel.internal.DSLLoadingConfigurationProviderSpi \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/56adb6d8/vertx/src/main/java/org/apache/tamaya/vertx/TamayaConfigurationProducer.java ---------------------------------------------------------------------- diff --git a/vertx/src/main/java/org/apache/tamaya/vertx/TamayaConfigurationProducer.java b/vertx/src/main/java/org/apache/tamaya/vertx/TamayaConfigurationProducer.java index 53608ef..24e02d9 100644 --- a/vertx/src/main/java/org/apache/tamaya/vertx/TamayaConfigurationProducer.java +++ b/vertx/src/main/java/org/apache/tamaya/vertx/TamayaConfigurationProducer.java @@ -137,11 +137,10 @@ public class TamayaConfigurationProducer extends AbstractConfiguredVerticle{ @Override public void start(Future<Void> startFuture) throws Exception { - super.start(startFuture); registerMultiConfigEntryProvider(mapBusTarget, vertx.eventBus()); registerSingleConfigEntryProvider(singleBusTarget, vertx.eventBus()); registerConfigurationInjector(injectionBusTarget, vertx.eventBus()); - startFuture.complete(); + super.start(startFuture); } public String getInjectionBusTarget() {
