summaryrefslogtreecommitdiffstats
path: root/holmes-actions
diff options
context:
space:
mode:
Diffstat (limited to 'holmes-actions')
-rw-r--r--holmes-actions/src/main/java/org/onap/holmes/common/dropwizard/ioc/bundle/AutoConfigBundle.java556
1 files changed, 251 insertions, 305 deletions
diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dropwizard/ioc/bundle/AutoConfigBundle.java b/holmes-actions/src/main/java/org/onap/holmes/common/dropwizard/ioc/bundle/AutoConfigBundle.java
index db4f341..fe9ee5a 100644
--- a/holmes-actions/src/main/java/org/onap/holmes/common/dropwizard/ioc/bundle/AutoConfigBundle.java
+++ b/holmes-actions/src/main/java/org/onap/holmes/common/dropwizard/ioc/bundle/AutoConfigBundle.java
@@ -1,12 +1,12 @@
/**
- * Copyright 2017 ZTE Corporation.
- *
+ * Copyright 2017 - 2021 ZTE Corporation.
+ * <p>
* Licensed 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
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
* 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.
@@ -24,14 +24,6 @@ import io.dropwizard.lifecycle.ServerLifecycleListener;
import io.dropwizard.servlets.tasks.Task;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-import javax.ws.rs.Path;
-import javax.ws.rs.ext.Provider;
import org.eclipse.jetty.util.component.LifeCycle;
import org.glassfish.hk2.api.ServiceLocator;
import org.glassfish.hk2.api.ServiceLocatorFactory;
@@ -39,12 +31,7 @@ import org.glassfish.hk2.utilities.ServiceLocatorUtilities;
import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.glassfish.jersey.servlet.ServletProperties;
import org.jvnet.hk2.annotations.Service;
-import org.onap.holmes.common.dropwizard.ioc.annotation.BaseService;
-import org.onap.holmes.common.dropwizard.ioc.annotation.Lazy;
-import org.onap.holmes.common.dropwizard.ioc.annotation.PostBaseService;
-import org.onap.holmes.common.dropwizard.ioc.annotation.PreBaseService;
-import org.onap.holmes.common.dropwizard.ioc.annotation.PreLoad;
-import org.onap.holmes.common.dropwizard.ioc.annotation.PreServiceLoad;
+import org.onap.holmes.common.dropwizard.ioc.annotation.*;
import org.onap.holmes.common.dropwizard.ioc.utils.ServiceBinder;
import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder;
import org.reflections.Reflections;
@@ -56,366 +43,325 @@ import org.reflections.util.FilterBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.ws.rs.Path;
+import javax.ws.rs.ext.Provider;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
/**
* complete the integration of hK2 container and dropwizard
*
* @author hu.rui
- *
*/
public class AutoConfigBundle<T extends Configuration> implements ConfiguredBundle<T> {
- private static final Logger LOG = LoggerFactory.getLogger(AutoConfigBundle.class);
+ private static final Logger LOG = LoggerFactory.getLogger(AutoConfigBundle.class);
- private ServiceLocator locator;
- private Reflections reflections;
- private Set<Class<?>> services;
+ private ServiceLocator locator;
+ private Reflections reflections;
+ private Set<Class<?>> services;
- private Bootstrap<?> bootstrap;
+ private Bootstrap<?> bootstrap;
- AutoConfigBundle(final String packageName) {
- this(Lists.newArrayList(packageName));
- }
+ AutoConfigBundle(final String packageName) {
+ this(Lists.newArrayList(packageName));
+ }
- AutoConfigBundle(List<String> packageNames) {
- FilterBuilder filterBuilder = new FilterBuilder();
+ AutoConfigBundle(List<String> packageNames) {
+ FilterBuilder filterBuilder = new FilterBuilder();
- packageNames.stream().forEach(packageName -> {
- filterBuilder.include(FilterBuilder.prefix(packageName));
- });
- ConfigurationBuilder reflectionCfg = new ConfigurationBuilder();
+ packageNames.stream().forEach(packageName -> filterBuilder.include(FilterBuilder.prefix(packageName)));
+ ConfigurationBuilder reflectionCfg = new ConfigurationBuilder();
- packageNames.stream().forEach(packageName -> {
- reflectionCfg.addUrls(ClasspathHelper.forPackage(packageName));
- });
+ packageNames.stream().forEach(packageName -> reflectionCfg.addUrls(ClasspathHelper.forPackage(packageName)));
- reflectionCfg.filterInputsBy(filterBuilder).setScanners(new SubTypesScanner(),
- new TypeAnnotationsScanner());
- reflections = new Reflections(reflectionCfg);
+ reflectionCfg.filterInputsBy(filterBuilder).setScanners(new SubTypesScanner(),
+ new TypeAnnotationsScanner());
+ reflections = new Reflections(reflectionCfg);
- locator = ServiceLocatorFactory.getInstance().create("dw-hk2");
+ locator = ServiceLocatorFactory.getInstance().create("dw-hk2");
- ServiceLocatorHolder.setLocator(locator);
+ ServiceLocatorHolder.setLocator(locator);
- }
+ }
- public static <T extends Configuration> AutoConfigBundleBuider<T> newBuilder() {
- return new AutoConfigBundleBuider<T>();
- }
+ public static <T extends Configuration> AutoConfigBundleBuider<T> newBuilder() {
+ return new AutoConfigBundleBuider<T>();
+ }
- @Override
- public void initialize(final Bootstrap<?> bootstrap) {
+ @Override
+ public void initialize(final Bootstrap<?> bootstrap) {
- this.bootstrap = bootstrap;
- registerPreLoadService();
+ this.bootstrap = bootstrap;
+ registerPreLoadService();
- LOG.debug("Intialzing auto config bundle.");
- }
+ LOG.debug("Intialzing auto config bundle.");
+ }
- private void registerPreLoadService() {
+ private void registerPreLoadService() {
+ registerService(PreLoad.class);
+ }
- registerService(PreLoad.class);
- }
+ @Override
+ public void run(final T configuration, final Environment environment) {
+ registerConfigurationProvider(configuration, environment);
- @Override
- public void run(final T configuration, final Environment environment) throws Exception {
+ registerEnvironment(environment);
+ registerObjectMapper(environment);
- registerConfigurationProvider(configuration, environment);
+ environment.getApplicationContext().getServletContext()
+ .setAttribute(ServletProperties.SERVICE_LOCATOR, locator);
+ registerService(PreBaseService.class);
+ registerService(BaseService.class);
+ registerService(PostBaseService.class);
+ this.registerService(PreServiceLoad.class);
- registerEnvironment(environment);
- registerObjectMapper(environment);
- environment.getApplicationContext().getServletContext()
- .setAttribute(ServletProperties.SERVICE_LOCATOR, locator);
+ registerServices();
- registerService(PreBaseService.class);
- registerService(BaseService.class);
- registerService(PostBaseService.class);
- this.registerService(PreServiceLoad.class);
+ registerLifecycle(environment);
+ registerServerLifecycleListeners(environment);
+ registerJettyLifeCycleListener(environment);
+ registerTasks(environment);
+ registerHealthChecks(environment);
+ registerProviders(environment);
+ registerResources(environment);
+ environment.lifecycle().manage(new ServiceLocatorManaged(locator));
- registerServices();
+ }
- // registerManaged(environment);
- registerLifecycle(environment);
- registerServerLifecycleListeners(environment);
- registerJettyLifeCycleListener(environment);
- registerTasks(environment);
- registerHealthChecks(environment);
- registerProviders(environment);
- registerResources(environment);
- environment.lifecycle().manage(new ServiceLocatorManaged(locator));
+ private void registerProviders(Environment environment) {
+ reflections.getSubTypesOf(Provider.class).stream().filter(services::contains)
+ .forEach(providerKlass -> {
+ try {
+ environment.jersey().register(locator.getService(providerKlass));
+ } catch (Exception e) {
+ LOG.warn("", e);
+ }
- }
+ LOG.info("Registering Dropwizard Provider, class name : {}", providerKlass.getName());
+ });
+ }
- private void registerProviders(Environment environment) {
- reflections.getSubTypesOf(Provider.class).stream().filter(services::contains)
- .forEach(providerKlass -> {
- try {
- environment.jersey().register(locator.getService(providerKlass));
- } catch (Exception e) {
- LOG.warn("", e);
- }
+ private void registerTasks(Environment environment) {
+ reflections.getSubTypesOf(Task.class).stream().filter(services::contains).forEach(taskKlass -> {
+ try {
+ environment.admin().addTask(locator.getService(taskKlass));
+ } catch (Exception e) {
+ LOG.warn("", e);
+ }
+ LOG.info("Registering Dropwizard Task, class name : {}", taskKlass.getName());
+ });
- LOG.info("Registering Dropwizard Provider, class name : {}", providerKlass.getName());
+ }
- });
+ private void registerJettyLifeCycleListener(Environment environment) {
+ reflections.getSubTypesOf(LifeCycle.Listener.class).stream().filter(services::contains)
+ .forEach(lifecycleListenerKlass -> {
+ try {
+ environment.lifecycle()
+ .addLifeCycleListener(locator.getService(lifecycleListenerKlass));
+ } catch (Exception e) {
+ LOG.warn("", e);
+ }
+ LOG.info("Registering Dropwizard lifecycleListener, class name : {}",
+ lifecycleListenerKlass.getName());
+ });
- }
-
- private void registerTasks(Environment environment) {
- reflections.getSubTypesOf(Task.class).stream().filter(services::contains).forEach(taskKlass -> {
- try {
- environment.admin().addTask(locator.getService(taskKlass));
- } catch (Exception e) {
- LOG.warn("", e);
- }
- LOG.info("Registering Dropwizard Task, class name : {}", taskKlass.getName());
- });
-
- }
-
- private void registerJettyLifeCycleListener(Environment environment) {
- reflections.getSubTypesOf(LifeCycle.Listener.class).stream().filter(services::contains)
- .forEach(lifecycleListenerKlass -> {
-
- try {
- environment.lifecycle()
- .addLifeCycleListener(locator.getService(lifecycleListenerKlass));
- } catch (Exception e) {
- LOG.warn("", e);
- }
- LOG.info("Registering Dropwizard lifecycleListener, class name : {}",
- lifecycleListenerKlass.getName());
- });
+ }
- }
+ private void registerServerLifecycleListeners(Environment environment) {
- private void registerServerLifecycleListeners(Environment environment) {
+ reflections.getSubTypesOf(ServerLifecycleListener.class).stream().filter(services::contains)
+ .forEach(serverLifecycleListenerKlass -> {
+ try {
+ environment.lifecycle()
+ .addServerLifecycleListener(locator.getService(serverLifecycleListenerKlass));
+ } catch (Exception e) {
+ LOG.warn("", e);
+ }
+ LOG.info("Registering Dropwizard serverLifecycleListener, class name : {}",
+ serverLifecycleListenerKlass.getName());
+ });
- reflections.getSubTypesOf(ServerLifecycleListener.class).stream().filter(services::contains)
- .forEach(serverLifecycleListenerKlass -> {
- try {
- environment.lifecycle()
- .addServerLifecycleListener(locator.getService(serverLifecycleListenerKlass));
- } catch (Exception e) {
- LOG.warn("", e);
- }
- LOG.info("Registering Dropwizard serverLifecycleListener, class name : {}",
- serverLifecycleListenerKlass.getName());
- });
+ }
- }
-
- private void registerLifecycle(Environment environment) {
- reflections.getSubTypesOf(LifeCycle.class).stream().filter(services::contains)
- .forEach(lifeCycleKlass -> {
- try {
- environment.lifecycle().manage(locator.getService(lifeCycleKlass));
- } catch (Exception e) {
- LOG.warn("", e);
- }
- LOG.info("Registering Dropwizard LifeCycle, class name : {}", lifeCycleKlass.getName());
- });
- }
-
- /*
- * private void registerManaged(Environment environment) {
- *
- * reflections.getSubTypesOf(Managed.class).stream().filter(services::contains)
- * .forEach(managedKlass -> { try {
- * environment.lifecycle().manage(locator.getService(managedKlass)); } catch (Exception e) {
- * LOG.warn("", e); } LOG.info("Registering Dropwizard managed, class name : {}",
- * managedKlass.getName()); });
- *
- * }
- */
-
- private void registerObjectMapper(Environment environment) {
-
- final ObjectMapper objectMapper = environment.getObjectMapper();
-
- ServiceLocatorUtilities.bind(locator, new AbstractBinder() {
- @Override
- protected void configure() {
- bind(objectMapper).to(ObjectMapper.class);
-
- LOG.info("Registering Dropwizard objectMapper, class name : {}",
- objectMapper.getClass().getName());
- }
- });
-
- }
-
- private void registerEnvironment(final Environment environment) {
-
- ServiceLocatorUtilities.bind(locator, new AbstractBinder() {
- @Override
- protected void configure() {
- bind(environment).to(Environment.class);
-
- LOG.info("Registering Dropwizard environment, class name : {}",
- environment.getClass().getName());
- }
- });
-
- }
-
- private void registerConfigurationProvider(final T configuration, final Environment environment) {
-
- ServiceLocatorUtilities.bind(locator, new AbstractBinder() {
- @Override
- protected void configure() {
- bind(configuration);
- LOG.info("Registering Dropwizard Configuration class name:{}",
- configuration.getClass().getName());
- bind((Configuration) configuration).to(Configuration.class);
- LOG.info("Registering Dropwizard Configuration class name:{}",
- Configuration.class.getName());
- }
- });
-
- registerSubConfigure(configuration, environment);
-
- }
-
- private void registerSubConfigure(final T configuration, final Environment environment) {
- final List<Field> subDeclaredFields =
- Arrays.asList(configuration.getClass().getDeclaredFields());
- List<Field> parentDeclaredFields = Arrays.asList(Configuration.class.getDeclaredFields());
-
- List<Field> filtersubDeclaredFields = subDeclaredFields.stream()
- .filter(subDeclaredField -> !subDeclaredField.getType().isPrimitive())
- .filter(subDeclaredField -> !subDeclaredField.getType().equals(String.class))
- .filter(subDeclaredField -> !parentDeclaredFields.contains(subDeclaredField))
- .collect(Collectors.toList());
-
- ServiceLocatorUtilities.bind(locator, new AbstractBinder() {
- @Override
- protected void configure() {
- filtersubDeclaredFields.forEach(subField -> {
- subField.setAccessible(true);
- try {
- Object subConfig = subField.get(configuration);
- if (subConfig != null) {
- bind(subConfig);
- LOG.info("Registering Dropwizard Sub Configuration class name {}",
- subConfig.getClass().getName());
- }
+ private void registerLifecycle(Environment environment) {
+ reflections.getSubTypesOf(LifeCycle.class).stream().filter(services::contains)
+ .forEach(lifeCycleKlass -> {
+ try {
+ environment.lifecycle().manage(locator.getService(lifeCycleKlass));
+ } catch (Exception e) {
+ LOG.warn("", e);
+ }
+ LOG.info("Registering Dropwizard LifeCycle, class name : {}", lifeCycleKlass.getName());
+ });
+ }
+
+ private void registerObjectMapper(Environment environment) {
+
+ final ObjectMapper objectMapper = environment.getObjectMapper();
- } catch (Exception e) {
- LOG.error("bind sub config:{} fail", subField);
- }
+ ServiceLocatorUtilities.bind(locator, new AbstractBinder() {
+ @Override
+ protected void configure() {
+ bind(objectMapper).to(ObjectMapper.class);
+
+ LOG.info("Registering Dropwizard objectMapper, class name : {}",
+ objectMapper.getClass().getName());
+ }
});
- }
- });
- }
+ }
- private void registerServices() {
- services = this.reflections.getTypesAnnotatedWith(Service.class, true);
- if (!services.isEmpty()) {
- ServiceLocatorUtilities.bind(locator, new ServiceBinder(services));
+ private void registerEnvironment(final Environment environment) {
- services.forEach(s -> {
- LOG.info("Registering Dropwizard service, class name : {}", s.getName());
- });
+ ServiceLocatorUtilities.bind(locator, new AbstractBinder() {
+ @Override
+ protected void configure() {
+ bind(environment).to(Environment.class);
- services.stream().filter(serviceClazz -> (serviceClazz.getAnnotation(Lazy.class) == null))
- .peek(serviceClazz -> LOG.info("active service, class name : {}", serviceClazz.getName()))
- .forEach(serviceClazz -> {
- try {
- long startTime = System.currentTimeMillis();
- locator.getService(serviceClazz);
- LOG.info("active service, class name : {},cost time:{}", serviceClazz.getName(),
- (System.currentTimeMillis() - startTime));
- } catch (Exception e) {
- LOG.warn("", e);
+ LOG.info("Registering Dropwizard environment, class name : {}",
+ environment.getClass().getName());
}
+ });
- });
+ }
- } else {
- LOG.warn("Registering Dropwizard service is empty");
+ private void registerConfigurationProvider(final T configuration, final Environment environment) {
+
+ ServiceLocatorUtilities.bind(locator, new AbstractBinder() {
+ @Override
+ protected void configure() {
+ bind(configuration);
+ LOG.info("Registering Dropwizard Configuration class name:{}",
+ configuration.getClass().getName());
+ bind((Configuration) configuration).to(Configuration.class);
+ LOG.info("Registering Dropwizard Configuration class name:{}",
+ Configuration.class.getName());
+ }
+ });
+
+ registerSubConfigure(configuration, environment);
}
- }
+ private void registerSubConfigure(final T configuration, final Environment environment) {
+ final List<Field> subDeclaredFields =
+ Arrays.asList(configuration.getClass().getDeclaredFields());
+ List<Field> parentDeclaredFields = Arrays.asList(Configuration.class.getDeclaredFields());
+
+ List<Field> filtersubDeclaredFields = subDeclaredFields.stream()
+ .filter(subDeclaredField -> !subDeclaredField.getType().isPrimitive())
+ .filter(subDeclaredField -> !subDeclaredField.getType().equals(String.class))
+ .filter(subDeclaredField -> !parentDeclaredFields.contains(subDeclaredField))
+ .collect(Collectors.toList());
+
+ ServiceLocatorUtilities.bind(locator, new AbstractBinder() {
+ @Override
+ protected void configure() {
+ filtersubDeclaredFields.forEach(subField -> {
+ subField.setAccessible(true);
+ try {
+ Object subConfig = subField.get(configuration);
+ if (subConfig != null) {
+ bind(subConfig);
+ LOG.info("Registering Dropwizard Sub Configuration class name {}",
+ subConfig.getClass().getName());
+ }
+
+ } catch (Exception e) {
+ LOG.error("bind sub config:{} fail", subField);
+ }
+ });
+ }
+ });
- private void registerResources(final Environment environment) {
- reflections.getTypesAnnotatedWith(Path.class).stream().forEach(resourceClass -> {
+ }
- LOG.info("begin Registering Dropwizard resource, class name : {}", resourceClass.getName());
- try {
- Object resourceObject = locator.getService(resourceClass);
- if (resourceObject != null) {
- environment.jersey().register(resourceObject);
- LOG.info("Registering Dropwizard resource, class name : {}", resourceClass.getName());
+ private void registerServices() {
+ services = this.reflections.getTypesAnnotatedWith(Service.class, true);
+ if (!services.isEmpty()) {
+ ServiceLocatorUtilities.bind(locator, new ServiceBinder(services));
+ services.forEach(s -> LOG.info("Registering Dropwizard service, class name : {}", s.getName()));
+ recordTimeCost(services);
} else {
- LOG.warn(resourceClass.getName() + " not use Service annotation");
+ LOG.warn("Registering Dropwizard service is empty");
}
- } catch (Exception e) {
- LOG.error("", e);
- }
-
-
- });
- }
-
- private void registerHealthChecks(final Environment env) {
-
- reflections.getSubTypesOf(HealthCheck.class).stream().filter(services::contains)
- .forEach(healthCheckKlass -> {
- try {
- env.healthChecks().register(healthCheckKlass.getName(),
- locator.getService(healthCheckKlass));
- } catch (Exception e) {
- LOG.warn("", e);
- }
- LOG.info("Registering Dropwizard healthCheck, class name : {}",
- healthCheckKlass.getName());
- });
-
- }
-
+ }
- private void registerService(Class<? extends Annotation> annotationClazz) {
-
- Set<Class<?>> services = this.reflections.getTypesAnnotatedWith(annotationClazz, true);
- if (!services.isEmpty()) {
- ServiceLocatorUtilities.bind(locator, new ServiceBinder(services));
- services.forEach(s -> {
- LOG.info("{} Registering service, class name : {}", annotationClazz.getName(),
- s.getName());
- });
+ private void registerResources(final Environment environment) {
+ reflections.getTypesAnnotatedWith(Path.class).stream().forEach(resourceClass -> {
- services.stream().filter(serviceClazz -> (serviceClazz.getAnnotation(Lazy.class) == null))
- .peek(serviceClazz -> LOG.info("active service, class name : {}", serviceClazz.getName()))
- .forEach(serviceClazz -> {
+ LOG.info("begin Registering Dropwizard resource, class name : {}", resourceClass.getName());
try {
- long startTime = System.currentTimeMillis();
- locator.getService(serviceClazz);
- LOG.info("active service, class name : {},cost time:{}", serviceClazz.getName(),
- (System.currentTimeMillis() - startTime));
+ Object resourceObject = locator.getService(resourceClass);
+ if (resourceObject != null) {
+ environment.jersey().register(resourceObject);
+ LOG.info("Registering Dropwizard resource, class name : {}", resourceClass.getName());
+ } else {
+ LOG.warn(resourceClass.getName() + " not use Service annotation");
+ }
} catch (Exception e) {
- LOG.warn("", e);
+ LOG.error("", e);
}
+ });
+ }
- });
+ private void registerHealthChecks(final Environment env) {
+ reflections.getSubTypesOf(HealthCheck.class).stream().filter(services::contains)
+ .forEach(healthCheckKlass -> {
+ try {
+ env.healthChecks().register(healthCheckKlass.getName(),
+ locator.getService(healthCheckKlass));
+ } catch (Exception e) {
+ LOG.warn("", e);
+ }
+ LOG.info("Registering Dropwizard healthCheck, class name : {}",
+ healthCheckKlass.getName());
+ });
+ }
- } else {
- LOG.warn("Registering {} service is empty", annotationClazz.getName());
+ private void registerService(Class<? extends Annotation> annotationClazz) {
+ Set<Class<?>> services = this.reflections.getTypesAnnotatedWith(annotationClazz, true);
+ if (!services.isEmpty()) {
+ ServiceLocatorUtilities.bind(locator, new ServiceBinder(services));
+ services.forEach(s -> LOG.info("{} Registering service, class name : {}", annotationClazz.getName(),
+ s.getName()));
+ recordTimeCost(services);
+ } else {
+ LOG.warn("Registering {} service is empty", annotationClazz.getName());
+ }
}
- }
+ private void recordTimeCost(Set<Class<?>> services) {
+ services.stream().filter(serviceClazz -> (serviceClazz.getAnnotation(Lazy.class) == null))
+ .peek(serviceClazz -> LOG.info("active service, class name : {}", serviceClazz.getName()))
+ .forEach(serviceClazz -> {
+ try {
+ long startTime = System.currentTimeMillis();
+ locator.getService(serviceClazz);
+ LOG.info("active service, class name : {},cost time:{}", serviceClazz.getName(),
+ (System.currentTimeMillis() - startTime));
+ } catch (Exception e) {
+ LOG.warn("", e);
+ }
+ });
+ }
}