summaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorgjoranv <gv@verizonmedia.com>2021-07-14 18:16:13 +0200
committergjoranv <gv@verizonmedia.com>2021-07-14 18:16:13 +0200
commit34f4fa288380263975dd1b45b54847c36c6b6745 (patch)
tree56e4cbb367cb4fd060f07eb7dbd6b71ecb516c80 /container-core
parent3f7beca44cbd15e7839077c54356084509728b21 (diff)
Remove Jersey integration from DI framework.
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/main/java/com/yahoo/container/di/Container.java11
-rw-r--r--container-core/src/main/java/com/yahoo/container/di/componentgraph/core/JerseyNode.java92
-rw-r--r--container-core/src/main/java/com/yahoo/container/di/config/RestApiContext.java98
-rw-r--r--container-core/src/main/resources/configdefinitions/container.di.config.jersey-bundles.def8
-rw-r--r--container-core/src/main/resources/configdefinitions/container.di.config.jersey-injection.def5
-rw-r--r--container-core/src/test/java/com/yahoo/container/di/ContainerTest.java61
-rw-r--r--container-core/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java23
-rw-r--r--container-core/src/test/java/com/yahoo/container/di/componentgraph/core/JerseyNodeTest.java68
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()));
- }
-}