diff options
author | gjoranv <gv@verizonmedia.com> | 2021-07-14 18:16:13 +0200 |
---|---|---|
committer | gjoranv <gv@verizonmedia.com> | 2021-07-14 18:16:13 +0200 |
commit | 34f4fa288380263975dd1b45b54847c36c6b6745 (patch) | |
tree | 56e4cbb367cb4fd060f07eb7dbd6b71ecb516c80 /container-core | |
parent | 3f7beca44cbd15e7839077c54356084509728b21 (diff) |
Remove Jersey integration from DI framework.
Diffstat (limited to 'container-core')
8 files changed, 1 insertions, 365 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/di/Container.java b/container-core/src/main/java/com/yahoo/container/di/Container.java index a91aa6eb588..2bd8b2a90ec 100644 --- a/container-core/src/main/java/com/yahoo/container/di/Container.java +++ b/container-core/src/main/java/com/yahoo/container/di/Container.java @@ -12,11 +12,9 @@ import com.yahoo.container.di.ConfigRetriever.ComponentsConfigs; import com.yahoo.container.di.ConfigRetriever.ConfigSnapshot; import com.yahoo.container.di.componentgraph.core.ComponentGraph; import com.yahoo.container.di.componentgraph.core.ComponentNode; -import com.yahoo.container.di.componentgraph.core.JerseyNode; import com.yahoo.container.di.componentgraph.core.Node; import com.yahoo.container.di.config.ApplicationBundlesConfig; import com.yahoo.container.di.config.PlatformBundlesConfig; -import com.yahoo.container.di.config.RestApiContext; import com.yahoo.container.di.config.SubscriberFactory; import com.yahoo.vespa.config.ConfigKey; import org.osgi.framework.Bundle; @@ -200,14 +198,7 @@ public class Container { for (ComponentsConfig.Components config : componentsConfig.components()) { BundleInstantiationSpecification specification = bundleInstantiationSpecification(config); Class<?> componentClass = osgi.resolveClass(specification); - Node componentNode; - - if (RestApiContext.class.isAssignableFrom(componentClass)) { - Class<? extends RestApiContext> nodeClass = componentClass.asSubclass(RestApiContext.class); - componentNode = new JerseyNode(specification.id, config.configId(), nodeClass, osgi); - } else { - componentNode = new ComponentNode(specification.id, config.configId(), componentClass, null); - } + Node componentNode = new ComponentNode(specification.id, config.configId(), componentClass, null); graph.add(componentNode); } } diff --git a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/JerseyNode.java b/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/JerseyNode.java deleted file mode 100644 index 0f8aa678934..00000000000 --- a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/JerseyNode.java +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.container.di.componentgraph.core; - -import com.yahoo.component.ComponentId; -import com.yahoo.component.ComponentSpecification; -import com.yahoo.container.di.Osgi; -import com.yahoo.container.di.config.JerseyBundlesConfig; -import com.yahoo.container.di.config.RestApiContext; -import com.yahoo.container.di.config.RestApiContext.BundleInfo; -import com.yahoo.container.di.osgi.BundleClasses; -import org.osgi.framework.Bundle; -import org.osgi.framework.wiring.BundleWiring; - -import java.net.URL; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; - -/** - * Represents an instance of RestApiContext - * - * @author gjoranv - * @author Tony Vaagenes - * @author ollivir - */ -public class JerseyNode extends ComponentNode { - private static final String WEB_INF_URL = "WebInfUrl"; - - private final Osgi osgi; - - public JerseyNode(ComponentId componentId, String configId, Class<?> clazz, Osgi osgi) { - super(componentId, configId, clazz, null); - this.osgi = osgi; - } - - @Override - protected RestApiContext newInstance() { - Object instance = super.newInstance(); - RestApiContext restApiContext = (RestApiContext) instance; - - List<JerseyBundlesConfig.Bundles> bundles = restApiContext.bundlesConfig.bundles(); - for (JerseyBundlesConfig.Bundles bundleConfig : bundles) { - BundleClasses bundleClasses = osgi.getBundleClasses(ComponentSpecification.fromString(bundleConfig.spec()), - new HashSet<>(bundleConfig.packages())); - - restApiContext.addBundle(createBundleInfo(bundleClasses.bundle(), bundleClasses.classEntries())); - } - - componentsToInject.forEach(component -> restApiContext.addInjectableComponent(component.instanceKey(), component.componentId(), - component.component())); - - return restApiContext; - } - - @Override - public int hashCode() { - return super.hashCode(); - } - - @Override - public boolean equals(Object other) { - return super.equals(other) - && (other instanceof JerseyNode && this.componentsToInject.equals(((JerseyNode) other).componentsToInject)); - } - - public static BundleInfo createBundleInfo(Bundle bundle, Collection<String> classEntries) { - BundleInfo bundleInfo = new BundleInfo(bundle.getSymbolicName(), bundle.getVersion(), bundle.getLocation(), webInfUrl(bundle), - bundle.adapt(BundleWiring.class).getClassLoader()); - - bundleInfo.setClassEntries(classEntries); - return bundleInfo; - } - - public static Bundle getBundle(Osgi osgi, String bundleSpec) { - Bundle bundle = osgi.getBundle(ComponentSpecification.fromString(bundleSpec)); - if (bundle == null) { - throw new IllegalArgumentException("Bundle not found: " + bundleSpec); - } - return bundle; - } - - private static URL webInfUrl(Bundle bundle) { - String webInfUrlHeader = bundle.getHeaders().get(WEB_INF_URL); - - if (webInfUrlHeader == null) { - return null; - } else { - return bundle.getEntry(webInfUrlHeader); - } - } - -} diff --git a/container-core/src/main/java/com/yahoo/container/di/config/RestApiContext.java b/container-core/src/main/java/com/yahoo/container/di/config/RestApiContext.java deleted file mode 100644 index bfb9a8f9160..00000000000 --- a/container-core/src/main/java/com/yahoo/container/di/config/RestApiContext.java +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.container.di.config; - -import com.google.common.collect.ImmutableSet; -import com.google.inject.Inject; -import com.google.inject.Key; -import com.yahoo.component.ComponentId; -import org.osgi.framework.Version; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -/** - * Only for internal JDisc use. - * - * @author gjoranv - */ -public class RestApiContext { - - private final List<BundleInfo> bundles = new ArrayList<>(); - private final List<Injectable> injectableComponents = new ArrayList<>(); - - public final JerseyBundlesConfig bundlesConfig; - public final JerseyInjectionConfig injectionConfig; - - @Inject - public RestApiContext(JerseyBundlesConfig bundlesConfig, JerseyInjectionConfig injectionConfig) { - this.bundlesConfig = bundlesConfig; - this.injectionConfig = injectionConfig; - } - - public List<BundleInfo> getBundles() { - return Collections.unmodifiableList(bundles); - } - - public void addBundle(BundleInfo bundle) { - bundles.add(bundle); - } - - public List<Injectable> getInjectableComponents() { - return Collections.unmodifiableList(injectableComponents); - } - - public void addInjectableComponent(Key<?> key, ComponentId id, Object component) { - injectableComponents.add(new Injectable(key, id, component)); - } - - public static class Injectable { - public final Key<?> key; - public final ComponentId id; - public final Object instance; - - public Injectable(Key<?> key, ComponentId id, Object instance) { - this.key = key; - this.id = id; - this.instance = instance; - } - @Override - public String toString() { - return id.toString(); - } - } - - public static class BundleInfo { - public final String symbolicName; - public final Version version; - public final String fileLocation; - public final URL webInfUrl; - public final ClassLoader classLoader; - - private Set<String> classEntries; - - public BundleInfo(String symbolicName, Version version, String fileLocation, URL webInfUrl, ClassLoader classLoader) { - this.symbolicName = symbolicName; - this.version = version; - this.fileLocation = fileLocation; - this.webInfUrl = webInfUrl; - this.classLoader = classLoader; - } - - @Override - public String toString() { - return symbolicName + ":" + version; - } - - public void setClassEntries(Collection<String> entries) { - this.classEntries = ImmutableSet.copyOf(entries); - } - - public Set<String> getClassEntries() { - return classEntries; - } - } -} diff --git a/container-core/src/main/resources/configdefinitions/container.di.config.jersey-bundles.def b/container-core/src/main/resources/configdefinitions/container.di.config.jersey-bundles.def deleted file mode 100644 index a226420274d..00000000000 --- a/container-core/src/main/resources/configdefinitions/container.di.config.jersey-bundles.def +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -namespace=container.di.config - -# The SymbolicName[:Version] of the Jersey bundles -bundles[].spec string - -# The packages to scan for Jersey resources -bundles[].packages[] string diff --git a/container-core/src/main/resources/configdefinitions/container.di.config.jersey-injection.def b/container-core/src/main/resources/configdefinitions/container.di.config.jersey-injection.def deleted file mode 100644 index 9f5be59abbd..00000000000 --- a/container-core/src/main/resources/configdefinitions/container.di.config.jersey-injection.def +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -namespace=container.di.config - -inject[].instance string -inject[].forClass string diff --git a/container-core/src/test/java/com/yahoo/container/di/ContainerTest.java b/container-core/src/test/java/com/yahoo/container/di/ContainerTest.java index b596246a43d..47ac3018fde 100644 --- a/container-core/src/test/java/com/yahoo/container/di/ContainerTest.java +++ b/container-core/src/test/java/com/yahoo/container/di/ContainerTest.java @@ -5,13 +5,10 @@ import com.google.inject.Guice; import com.yahoo.component.AbstractComponent; import com.yahoo.config.di.IntConfig; import com.yahoo.config.test.TestConfig; -import com.yahoo.container.bundle.MockBundle; import com.yahoo.container.di.componentgraph.Provider; import com.yahoo.container.di.componentgraph.core.ComponentGraph; import com.yahoo.container.di.componentgraph.core.ComponentGraphTest.SimpleComponent; -import com.yahoo.container.di.componentgraph.core.ComponentGraphTest.SimpleComponent2; import com.yahoo.container.di.componentgraph.core.ComponentNode.ComponentConstructorException; -import com.yahoo.container.di.config.RestApiContext; import org.junit.Ignore; import org.junit.Test; import org.osgi.framework.Bundle; @@ -218,64 +215,6 @@ public class ContainerTest extends ContainerTestBase { assertNotNull(newGraph.get(5, TimeUnit.MINUTES)); } - - @Test - public void bundle_info_is_set_on_rest_api_context() { - Class<RestApiContext> clazz = RestApiContext.class; - - writeBootstrapConfigs("restApiContext", clazz); - dirConfigSource.writeConfig("jersey-bundles", "bundles[0].spec \"mock-entry-to-enforce-a-MockBundle\""); - dirConfigSource.writeConfig("jersey-injection", "inject[0]"); - - Container container = newContainer(dirConfigSource); - ComponentGraph componentGraph = getNewComponentGraph(container); - - RestApiContext restApiContext = componentGraph.getInstance(clazz); - assertNotNull(restApiContext); - - assertEquals(1, restApiContext.getBundles().size()); - assertEquals(MockBundle.SymbolicName, restApiContext.getBundles().get(0).symbolicName); - assertEquals(MockBundle.BundleVersion, restApiContext.getBundles().get(0).version); - - container.shutdownConfigurer(); - } - - @Test - public void restApiContext_has_all_components_injected() { - Class<RestApiContext> restApiClass = RestApiContext.class; - Class<SimpleComponent> injectedClass = SimpleComponent.class; - String injectedComponentId = "injectedComponent"; - Class<SimpleComponent2> anotherComponentClass = SimpleComponent2.class; - String anotherComponentId = "anotherComponent"; - - String componentsConfig = - new ComponentEntry(injectedComponentId, injectedClass).asConfig(0) + "\n" + - new ComponentEntry(anotherComponentId, anotherComponentClass).asConfig(1) + "\n" + - new ComponentEntry("restApiContext", restApiClass).asConfig(2) + "\n" + - "components[2].inject[0].id " + injectedComponentId + "\n" + - "components[2].inject[1].id " + anotherComponentId + "\n"; - - String injectionConfig = "inject[1]\n" +// - "inject[0].instance " + injectedComponentId + "\n" +// - "inject[0].forClass \"" + injectedClass.getName() + "\"\n"; - - dirConfigSource.writeConfig("components", componentsConfig); - dirConfigSource.writeConfig("platform-bundles", ""); - dirConfigSource.writeConfig("application-bundles", ""); - dirConfigSource.writeConfig("jersey-bundles", "bundles[0].spec \"mock-entry-to-enforce-a-MockBundle\""); - dirConfigSource.writeConfig("jersey-injection", injectionConfig); - - Container container = newContainer(dirConfigSource); - ComponentGraph componentGraph = getNewComponentGraph(container); - - RestApiContext restApiContext = componentGraph.getInstance(restApiClass); - - assertFalse(restApiContext.getInjectableComponents().isEmpty()); - assertEquals(2, restApiContext.getInjectableComponents().size()); - - container.shutdownConfigurer(); - } - @Test public void providers_are_destructed() { writeBootstrapConfigs("id1", DestructableProvider.class); diff --git a/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java b/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java index 70dc4c8665c..43e36781101 100644 --- a/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java +++ b/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java @@ -16,11 +16,7 @@ import com.yahoo.config.ConfigInstance; import com.yahoo.config.subscription.ConfigGetter; import com.yahoo.config.test.Test2Config; import com.yahoo.config.test.TestConfig; -import com.yahoo.container.di.Osgi; import com.yahoo.container.di.componentgraph.Provider; -import com.yahoo.container.di.config.JerseyBundlesConfig; -import com.yahoo.container.di.config.JerseyInjectionConfig; -import com.yahoo.container.di.config.RestApiContext; import com.yahoo.vespa.config.ConfigKey; import org.junit.Test; @@ -485,25 +481,6 @@ public class ComponentGraphTest { assertThat(componentGraph.getInstance(ComponentTakingComponentId.class).componentId, is(ComponentId.fromString(componentId))); } - @Test - public void rest_api_context_can_be_instantiated() { - String configId = "raw:\"\""; - - Class<RestApiContext> clazz = RestApiContext.class; - JerseyNode jerseyNode = new JerseyNode(uniqueComponentId(clazz.getName()), configId, clazz, new Osgi() { - }); - - ComponentGraph componentGraph = new ComponentGraph(); - componentGraph.add(jerseyNode); - componentGraph.complete(); - - componentGraph - .setAvailableConfigs(ConfigMap.newMap(JerseyBundlesConfig.class, configId).add(JerseyInjectionConfig.class, configId)); - - RestApiContext restApiContext = componentGraph.getInstance(clazz); - assertNotNull(restApiContext); - assertThat(restApiContext.getBundles().size(), is(0)); - } //Note that all Components must be defined in a static context, //otherwise their constructor will take the outer class as the first parameter. diff --git a/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/JerseyNodeTest.java b/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/JerseyNodeTest.java deleted file mode 100644 index f30f9260830..00000000000 --- a/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/JerseyNodeTest.java +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.container.di.componentgraph.core; - -import com.yahoo.container.bundle.MockBundle; -import com.yahoo.container.di.config.RestApiContext; -import com.yahoo.container.di.osgi.OsgiUtil; -import org.junit.Test; -import org.osgi.framework.wiring.BundleWiring; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.junit.Assert.assertThat; - -/** - * @author gjoranv - * @author ollivir - */ - -public class JerseyNodeTest { - private MockBundle bundle; - private List<String> bundleClasses; - private final Map<String, String> resources; - - public JerseyNodeTest() { - resources = new HashMap<>(); - resources.put("com/foo", "com/foo/Foo.class"); - resources.put("com/bar", "com/bar/Bar.class"); - bundle = new MockBundle() { - @Override - public Collection<String> listResources(String path, String ignored, int options) { - if ((options & BundleWiring.LISTRESOURCES_RECURSE) != 0 && path.equals("/")) { - return resources.values(); - } else { - return Collections.singleton(resources.get(path)); - } - } - }; - bundleClasses = new ArrayList<>(resources.values()); - } - - @Test - public void all_bundle_entries_are_returned_when_no_packages_are_given() { - Collection<String> entries = OsgiUtil.getClassEntriesInBundleClassPath(bundle, Collections.emptySet()); - assertThat(entries, containsInAnyOrder(bundleClasses.toArray())); - } - - @Test - public void only_bundle_entries_from_the_given_packages_are_returned() { - Collection<String> entries = OsgiUtil.getClassEntriesInBundleClassPath(bundle, Collections.singleton("com.foo")); - assertThat(entries, contains(resources.get("com/foo"))); - } - - @Test - public void bundle_info_is_initialized() { - RestApiContext.BundleInfo bundleInfo = JerseyNode.createBundleInfo(bundle, Collections.emptyList()); - assertThat(bundleInfo.symbolicName, is(bundle.getSymbolicName())); - assertThat(bundleInfo.version, is(bundle.getVersion())); - assertThat(bundleInfo.fileLocation, is(bundle.getLocation())); - } -} |