From 82a4ebeb0649766c048877b3c5e19719eee36443 Mon Sep 17 00:00:00 2001 From: Dan Hardiker Date: Thu, 1 Jan 2015 12:02:05 +0000 Subject: [PATCH 01/10] Bumping to 0.7.0 as this is a functional change --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 35e416c..d227c44 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.hmsonline dropwizard-spring - 0.6.2-SNAPSHOT + 0.7.0-SNAPSHOT jar Spring Integration for DropWizard https://github.com/hmsonline/dropwizard-spring From aa7340a3eda39fa712af0defd5ff45ffa552de1c Mon Sep 17 00:00:00 2001 From: Dan Hardiker Date: Thu, 1 Jan 2015 12:03:54 +0000 Subject: [PATCH 02/10] Changing from private to package-local to allow calling from classes within the same package in preparation for adding a dropwizard bundle without repeating any code, but maintaining backward compatibility with SpringService use. --- .../dropwizard/spring/SpringService.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/hmsonline/dropwizard/spring/SpringService.java b/src/main/java/com/hmsonline/dropwizard/spring/SpringService.java index 42e4366..befd933 100644 --- a/src/main/java/com/hmsonline/dropwizard/spring/SpringService.java +++ b/src/main/java/com/hmsonline/dropwizard/spring/SpringService.java @@ -78,7 +78,7 @@ public void run(SpringServiceConfiguration configuration, Environment environmen /** * Load filter, servlets or listeners for WebApplicationContext. */ - private void loadWebConfigs(Environment environment, SpringConfiguration config, ApplicationContext appCtx) throws ClassNotFoundException { + void loadWebConfigs(Environment environment, SpringConfiguration config, ApplicationContext appCtx) throws ClassNotFoundException { // Load filters. loadFilters(config.getFilters(), environment); @@ -93,7 +93,7 @@ private void loadWebConfigs(Environment environment, SpringConfiguration config, * Load all filters. */ @SuppressWarnings("unchecked") - private void loadFilters(Map filters, Environment environment) throws ClassNotFoundException { + void loadFilters(Map filters, Environment environment) throws ClassNotFoundException { if (filters != null) { for (Map.Entry filterEntry : filters.entrySet()) { FilterConfiguration filter = filterEntry.getValue(); @@ -121,7 +121,7 @@ private void loadFilters(Map filters, Environment e * Load all servlets. */ @SuppressWarnings("unchecked") - private void loadServlets(Map servlets, Environment environment) throws ClassNotFoundException { + void loadServlets(Map servlets, Environment environment) throws ClassNotFoundException { if (servlets != null) { for (Map.Entry servletEntry : servlets.entrySet()) { ServletConfiguration servlet = servletEntry.getValue(); @@ -145,7 +145,7 @@ private void loadServlets(Map servlets, Environmen } } - private void loadResourceBeans(List resources, ApplicationContext ctx, Environment env) { + void loadResourceBeans(List resources, ApplicationContext ctx, Environment env) { if (resources != null) { for (String resource : resources) { try { @@ -158,7 +158,7 @@ private void loadResourceBeans(List resources, ApplicationContext ctx, E } - private void loadHealthCheckBeans(List healthChecks, ApplicationContext ctx, Environment env) { + void loadHealthCheckBeans(List healthChecks, ApplicationContext ctx, Environment env) { if (healthChecks != null) { for (String healthCheck : healthChecks) { try { @@ -171,7 +171,7 @@ private void loadHealthCheckBeans(List healthChecks, ApplicationContext } } - private void loadManagedBeans(List manageds, ApplicationContext ctx, Environment env) { + void loadManagedBeans(List manageds, ApplicationContext ctx, Environment env) { if (manageds != null) { for (String managed : manageds) { try { @@ -183,7 +183,7 @@ private void loadManagedBeans(List manageds, ApplicationContext ctx, Env } } - private void loadLifeCycleBeans(List lifeCycles, ApplicationContext ctx, Environment env) { + void loadLifeCycleBeans(List lifeCycles, ApplicationContext ctx, Environment env) { if (lifeCycles != null) { for (String lifeCycle : lifeCycles) { try { @@ -195,7 +195,7 @@ private void loadLifeCycleBeans(List lifeCycles, ApplicationContext ctx, } } - private void loadJerseyProviders(List providers, ApplicationContext ctx, Environment env) { + void loadJerseyProviders(List providers, ApplicationContext ctx, Environment env) { if (providers != null) { for (String provider : providers) { try { @@ -207,7 +207,7 @@ private void loadJerseyProviders(List providers, ApplicationContext ctx, } } - private void loadTasks(List tasks, ApplicationContext ctx, Environment env) { + void loadTasks(List tasks, ApplicationContext ctx, Environment env) { if (tasks != null) { for (String task : tasks) { try { @@ -219,7 +219,7 @@ private void loadTasks(List tasks, ApplicationContext ctx, Environment e } } - private void enableJerseyFeatures(List features, Environment env) { + void enableJerseyFeatures(List features, Environment env) { if (features != null) { for (String feature : features) { env.jersey().enable(feature); @@ -227,7 +227,7 @@ private void enableJerseyFeatures(List features, Environment env) { } } - private void disableJerseyFeatures(List features, Environment env) { + void disableJerseyFeatures(List features, Environment env) { if (features != null) { for (String feature : features) { env.jersey().disable(feature); @@ -235,13 +235,13 @@ private void disableJerseyFeatures(List features, Environment env) { } } - private ApplicationContext initSpringParent() { + ApplicationContext initSpringParent() { ApplicationContext parent = new ClassPathXmlApplicationContext( new String[]{"dropwizardSpringApplicationContext.xml"}, true); return parent; } - private ApplicationContext initSpring(SpringConfiguration config, ApplicationContext parent) { + ApplicationContext initSpring(SpringConfiguration config, ApplicationContext parent) { ApplicationContext appCtx = null; // Get Application Context Type String ctxType = config.getAppContextType(); @@ -269,7 +269,7 @@ private ApplicationContext initSpring(SpringConfiguration config, ApplicationCon return appCtx; } - private void logNoSuchBeanDefinitionException(NoSuchBeanDefinitionException nsbde) { + void logNoSuchBeanDefinitionException(NoSuchBeanDefinitionException nsbde) { if (LOG.isWarnEnabled()) { LOG.warn("Skipping missing Spring bean: ", nsbde); } From 141f3ee6a0599fbbfa41364dfd278e1fdf8f5f6b Mon Sep 17 00:00:00 2001 From: Dan Hardiker Date: Thu, 1 Jan 2015 12:08:11 +0000 Subject: [PATCH 03/10] Adding SpringBundle class, which can be added to a dropwizard service/application's initialize method allowing improved customisability. See the other dropwizard bundles for advantages of this approach for supporting libraries. --- .../dropwizard/spring/SpringBundle.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java diff --git a/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java b/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java new file mode 100644 index 0000000..fd23304 --- /dev/null +++ b/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java @@ -0,0 +1,52 @@ +// Copyright (c) 2015 Hardiker Ltd. +package com.hmsonline.dropwizard.spring; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.hmsonline.dropwizard.spring.web.XmlRestWebApplicationContext; +import io.dropwizard.ConfiguredBundle; +import io.dropwizard.setup.Bootstrap; +import io.dropwizard.setup.Environment; +import org.springframework.context.ApplicationContext; + + +public class SpringBundle implements ConfiguredBundle { + + @Override + public void initialize(Bootstrap bootstrap) { + // This is needed to avoid an exception when deserializing Json to an ArrayList + bootstrap.getObjectMapper().enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); + } + + @Override + public void run(SpringServiceConfiguration configuration, Environment environment) { + SpringConfiguration config = configuration.getSpring(); + + SpringService service = new SpringService(); + ApplicationContext parentCtx = service.initSpringParent(); + + Dropwizard dw = (Dropwizard) parentCtx.getBean("dropwizard"); + dw.setConfiguration(configuration); + dw.setEnvironment(environment); + + ApplicationContext appCtx = service.initSpring(config, parentCtx); + service.loadResourceBeans(config.getResources(), appCtx, environment); + service.loadHealthCheckBeans(config.getHealthChecks(), appCtx, environment); + service.loadManagedBeans(config.getManaged(), appCtx, environment); + service.loadLifeCycleBeans(config.getLifeCycles(), appCtx, environment); + service.loadJerseyProviders(config.getJerseyProviders(), appCtx, environment); + service.loadTasks(config.getTasks(), appCtx, environment); + + // Load filter or listeners for WebApplicationContext. + if (appCtx instanceof XmlRestWebApplicationContext) { + try { + service.loadWebConfigs(environment, config, appCtx); + } catch (ClassNotFoundException e) { + throw new RuntimeException("CNFE when loading spring web configs: " + e.getMessage(), e); + } + } + + service.enableJerseyFeatures(config.getEnabledJerseyFeatures(), environment); + service.disableJerseyFeatures(config.getDisabledJerseyFeatures(), environment); + } + +} \ No newline at end of file From 8a3d5c14599cacc91bdee0080fd16762c1be796d Mon Sep 17 00:00:00 2001 From: Dan Hardiker Date: Thu, 1 Jan 2015 12:11:32 +0000 Subject: [PATCH 04/10] Switching from a local SpringService reference to a class level field initialised during construction with delegating methods that are locally called (and passed through by default). This allows further customisation through subclassing for users of the library through an unpublished API. --- .../dropwizard/spring/SpringBundle.java | 71 +++++++++++++++---- 1 file changed, 59 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java b/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java index fd23304..caab2e3 100644 --- a/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java +++ b/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java @@ -8,9 +8,13 @@ import io.dropwizard.setup.Environment; import org.springframework.context.ApplicationContext; +import java.util.List; + public class SpringBundle implements ConfiguredBundle { + SpringService service = new SpringService(); + @Override public void initialize(Bootstrap bootstrap) { // This is needed to avoid an exception when deserializing Json to an ArrayList @@ -21,32 +25,75 @@ public void initialize(Bootstrap bootstrap) { public void run(SpringServiceConfiguration configuration, Environment environment) { SpringConfiguration config = configuration.getSpring(); - SpringService service = new SpringService(); - ApplicationContext parentCtx = service.initSpringParent(); + ApplicationContext parentCtx = initSpringParent(); Dropwizard dw = (Dropwizard) parentCtx.getBean("dropwizard"); dw.setConfiguration(configuration); dw.setEnvironment(environment); - ApplicationContext appCtx = service.initSpring(config, parentCtx); - service.loadResourceBeans(config.getResources(), appCtx, environment); - service.loadHealthCheckBeans(config.getHealthChecks(), appCtx, environment); - service.loadManagedBeans(config.getManaged(), appCtx, environment); - service.loadLifeCycleBeans(config.getLifeCycles(), appCtx, environment); - service.loadJerseyProviders(config.getJerseyProviders(), appCtx, environment); - service.loadTasks(config.getTasks(), appCtx, environment); + ApplicationContext appCtx = initSpring(config, parentCtx); + loadResourceBeans(config.getResources(), appCtx, environment); + loadHealthCheckBeans(config.getHealthChecks(), appCtx, environment); + loadManagedBeans(config.getManaged(), appCtx, environment); + loadLifeCycleBeans(config.getLifeCycles(), appCtx, environment); + loadJerseyProviders(config.getJerseyProviders(), appCtx, environment); + loadTasks(config.getTasks(), appCtx, environment); // Load filter or listeners for WebApplicationContext. if (appCtx instanceof XmlRestWebApplicationContext) { try { - service.loadWebConfigs(environment, config, appCtx); + loadWebConfigs(environment, config, appCtx); } catch (ClassNotFoundException e) { throw new RuntimeException("CNFE when loading spring web configs: " + e.getMessage(), e); } } - service.enableJerseyFeatures(config.getEnabledJerseyFeatures(), environment); - service.disableJerseyFeatures(config.getDisabledJerseyFeatures(), environment); + enableJerseyFeatures(config.getEnabledJerseyFeatures(), environment); + disableJerseyFeatures(config.getDisabledJerseyFeatures(), environment); + } + + void loadWebConfigs(Environment environment, SpringConfiguration config, ApplicationContext appCtx) throws ClassNotFoundException { + service.loadWebConfigs(environment, config, appCtx); + } + + void loadResourceBeans(List resources, ApplicationContext ctx, Environment env) { + service.loadResourceBeans(resources, ctx, env); + } + + void loadHealthCheckBeans(List healthChecks, ApplicationContext ctx, Environment env) { + service.loadHealthCheckBeans(healthChecks, ctx, env); + } + + void loadManagedBeans(List manageds, ApplicationContext ctx, Environment env) { + service.loadManagedBeans(manageds, ctx, env); + } + + void loadLifeCycleBeans(List lifeCycles, ApplicationContext ctx, Environment env) { + service.loadLifeCycleBeans(lifeCycles, ctx, env); + } + + void loadJerseyProviders(List providers, ApplicationContext ctx, Environment env) { + service.loadJerseyProviders(providers, ctx, env); + } + + void loadTasks(List tasks, ApplicationContext ctx, Environment env) { + service.loadTasks(tasks, ctx, env); + } + + void enableJerseyFeatures(List features, Environment env) { + service.enableJerseyFeatures(features, env); + } + + void disableJerseyFeatures(List features, Environment env) { + service.disableJerseyFeatures(features, env); + } + + ApplicationContext initSpringParent() { + return service.initSpringParent(); + } + + ApplicationContext initSpring(SpringConfiguration config, ApplicationContext parent) { + return service.initSpring(config, parent); } } \ No newline at end of file From 88f423ce047561d12d4d382a02e795a3f7292c6a Mon Sep 17 00:00:00 2001 From: Dan Hardiker Date: Thu, 1 Jan 2015 12:14:09 +0000 Subject: [PATCH 05/10] Adding a method which supports the extension of the ApplicationContext before the rest of the configuration is loaded. This has been used to inject a StaticApplicationContext where bean data is loaded from the configuration - a further feature will add this with first class support within the library. --- .../hmsonline/dropwizard/spring/SpringBundle.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java b/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java index caab2e3..a8b1dc8 100644 --- a/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java +++ b/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java @@ -26,6 +26,7 @@ public void run(SpringServiceConfiguration configuration, Environment environmen SpringConfiguration config = configuration.getSpring(); ApplicationContext parentCtx = initSpringParent(); + parentCtx = wrapApplicationContext(parentCtx, config); Dropwizard dw = (Dropwizard) parentCtx.getBean("dropwizard"); dw.setConfiguration(configuration); @@ -52,6 +53,19 @@ public void run(SpringServiceConfiguration configuration, Environment environmen disableJerseyFeatures(config.getDisabledJerseyFeatures(), environment); } + /** + * This allows you to wrap the ApplicationContext, potentially with another ApplicationContext to extend the base + * functionality to meet your needs. Don't forget to refresh any new ApplicationContext's you create! + * + * @param parent Root Application Context + * @param config SpringConfiguration object for reference + * @return Application Context for further use + */ + @SuppressWarnings("unused") + protected ApplicationContext wrapApplicationContext(ApplicationContext parent, SpringConfiguration config) { + return parent; + } + void loadWebConfigs(Environment environment, SpringConfiguration config, ApplicationContext appCtx) throws ClassNotFoundException { service.loadWebConfigs(environment, config, appCtx); } From a71bc45798b43a3ff978b92ca8faef34535be16a Mon Sep 17 00:00:00 2001 From: Dan Hardiker Date: Thu, 1 Jan 2015 12:14:34 +0000 Subject: [PATCH 06/10] Adding documentation. --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 25e89a1..fdad9e3 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,11 @@ entirely with spring, and tell the spring service which components to enable usi With **dropwizard-spring** it is not necessary to subclass `com.yammer.dropwizard.Service`, instead you reference the provided `com.hmsonline.dropwizard.spring.SpringService` class as your service class. +With **dropwizard-spring** 0.7+ it is possible to use your own `com.yammer.dropwizard.Service` (Application in dropwizard 0.7) +and use the provided `com.hmsonline.dropwizard.spring.SpringBundle` class by adding `bootstrap.addBundle(new SpringBundle());` +to the `initialize` method of your dropwizard Service/Application class. This allows you to subclass the SpringServiceConfiguration +dropwizard Configuration object to add your own configuration settings, and also introduce your own logic into your +dropwizard Service/Application. ## Maven Configuration From ebf552042bbbb8fa622fb55fad59d2d77b3865fb Mon Sep 17 00:00:00 2001 From: Dan Hardiker Date: Thu, 1 Jan 2015 12:38:52 +0000 Subject: [PATCH 07/10] Adding configuration to support beans with some documentation about what this field is supposed to do --- README.md | 28 +++++++++++++++++ .../dropwizard/spring/BeanConfiguration.java | 31 +++++++++++++++++++ .../spring/SpringConfiguration.java | 8 +++++ 3 files changed, 67 insertions(+) create mode 100644 src/main/java/com/hmsonline/dropwizard/spring/BeanConfiguration.java diff --git a/README.md b/README.md index fdad9e3..1c52f33 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,34 @@ This is required to have maven build a "fat," executable jar file. configLocations: - conf/dropwizard-beans.xml + # Beans to be created from the configuration provided + # These will be constructed *before* the configLocations are parsed allowing their values to be used. + # + # Example below reflects this equivalent spring XML config: + # + # + # + # + # + # + # + # + # + # + beans: + uniqueBeanNameHere: + clazz: class.to.Construct + config: + key1: "value1" + key2: 1234 + key3: true + remoteApi: + clazz: com.myapp.config.RemoteAPI + config: + url: "http://api.domain.com/rest/v2/" + username: "myuser" + password: "some-password-hash" + # Servlet Filter # List of FilterConfiguration filters: diff --git a/src/main/java/com/hmsonline/dropwizard/spring/BeanConfiguration.java b/src/main/java/com/hmsonline/dropwizard/spring/BeanConfiguration.java new file mode 100644 index 0000000..c8e6cfe --- /dev/null +++ b/src/main/java/com/hmsonline/dropwizard/spring/BeanConfiguration.java @@ -0,0 +1,31 @@ +// Copyright (c) 2015 Hardiker Ltd. +package com.hmsonline.dropwizard.spring; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.Map; + +public class BeanConfiguration { + + @JsonProperty + private String clazz; // Filter class. + + @JsonProperty + private Map config; // Init params. + + public String getClazz() { + return clazz; + } + + public void setClazz(String clazz) { + this.clazz = clazz; + } + + public Map getConfig() { + return config; + } + + public void setConfig(Map config) { + this.config = config; + } +} diff --git a/src/main/java/com/hmsonline/dropwizard/spring/SpringConfiguration.java b/src/main/java/com/hmsonline/dropwizard/spring/SpringConfiguration.java index 2d9a542..11b4150 100644 --- a/src/main/java/com/hmsonline/dropwizard/spring/SpringConfiguration.java +++ b/src/main/java/com/hmsonline/dropwizard/spring/SpringConfiguration.java @@ -1,4 +1,5 @@ // Copyright (c) 2012 Health Market Science, Inc. +// Extended by Hardiker Ltd package com.hmsonline.dropwizard.spring; @@ -35,6 +36,9 @@ public class SpringConfiguration extends Configuration { @JsonProperty private List resources; + @JsonProperty + private Map beans; + @JsonProperty private List healthChecks; @@ -75,6 +79,10 @@ public List getResources() { return resources; } + public Map getBeans() { + return beans; + } + public List getHealthChecks() { return healthChecks; } From 17bb5b4b80dd921b240a0827066da6aaa0822c49 Mon Sep 17 00:00:00 2001 From: Dan Hardiker Date: Thu, 1 Jan 2015 12:43:47 +0000 Subject: [PATCH 08/10] Adding a new StaticApplicationContext which reads in the BeanConfiguration entries and turns them into Spring beans, making sure this context is constructed immediately after the dropwizard Spring bean is created and populated. --- pom.xml | 6 ++++ .../dropwizard/spring/SpringService.java | 34 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/pom.xml b/pom.xml index d227c44..f328be9 100644 --- a/pom.xml +++ b/pom.xml @@ -30,6 +30,7 @@ UTF-8 0.7.0 3.2.8.RELEASE + 1.7.0 @@ -67,6 +68,11 @@ spring-web ${spring.version} + + commons-beanutils + commons-beanutils + ${beanutils.version} + junit junit diff --git a/src/main/java/com/hmsonline/dropwizard/spring/SpringService.java b/src/main/java/com/hmsonline/dropwizard/spring/SpringService.java index befd933..759bf16 100644 --- a/src/main/java/com/hmsonline/dropwizard/spring/SpringService.java +++ b/src/main/java/com/hmsonline/dropwizard/spring/SpringService.java @@ -1,4 +1,5 @@ // Copyright (c) 2012 Health Market Science, Inc. +// Extended by Hardiker Ltd package com.hmsonline.dropwizard.spring; import java.text.MessageFormat; @@ -16,6 +17,7 @@ import io.dropwizard.servlets.tasks.Task; import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Environment; +import org.apache.commons.beanutils.PropertyUtils; import org.eclipse.jetty.servlet.FilterHolder; import org.eclipse.jetty.servlet.ServletHolder; import org.slf4j.Logger; @@ -24,6 +26,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; +import org.springframework.context.support.StaticApplicationContext; import javax.servlet.DispatcherType; import javax.servlet.Filter; @@ -58,6 +61,8 @@ public void run(SpringServiceConfiguration configuration, Environment environmen dw.setConfiguration(configuration); dw.setEnvironment(environment); + parentCtx = initSpringConfigBasedBeans(parentCtx, config); + ApplicationContext appCtx = initSpring(config, parentCtx); loadResourceBeans(config.getResources(), appCtx, environment); loadHealthCheckBeans(config.getHealthChecks(), appCtx, environment); @@ -241,6 +246,35 @@ ApplicationContext initSpringParent() { return parent; } + ApplicationContext initSpringConfigBasedBeans(ApplicationContext parent, SpringConfiguration springConfiguration) { + StaticApplicationContext child = new StaticApplicationContext(parent); + child.refresh(); + + Map beanConfigs = springConfiguration.getBeans(); + if (beanConfigs != null) { + try { + for (Map.Entry beanEntry : beanConfigs.entrySet()) { + String title = beanEntry.getKey(); + BeanConfiguration beanConfig = beanEntry.getValue(); + + Class clazz = Class.forName(beanConfig.getClazz()); + child.registerSingleton(title, clazz); + + Object bean = child.getBean(title, clazz); + for (Map.Entry entry : beanConfig.getConfig().entrySet()) { + PropertyUtils.setProperty(bean, entry.getKey(), entry.getValue()); + } + } + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e.getMessage(), e); + } + } + + return child; + } + ApplicationContext initSpring(SpringConfiguration config, ApplicationContext parent) { ApplicationContext appCtx = null; // Get Application Context Type From 8cf6368f58c51b635e33b83c3f9202548e894d74 Mon Sep 17 00:00:00 2001 From: Dan Hardiker Date: Thu, 1 Jan 2015 12:45:02 +0000 Subject: [PATCH 09/10] Adding delegation to SpringBundle to keep up with SpringService functional change --- .../java/com/hmsonline/dropwizard/spring/SpringBundle.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java b/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java index a8b1dc8..08c04c3 100644 --- a/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java +++ b/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java @@ -32,6 +32,8 @@ public void run(SpringServiceConfiguration configuration, Environment environmen dw.setConfiguration(configuration); dw.setEnvironment(environment); + parentCtx = initSpringConfigBasedBeans(parentCtx, config); + ApplicationContext appCtx = initSpring(config, parentCtx); loadResourceBeans(config.getResources(), appCtx, environment); loadHealthCheckBeans(config.getHealthChecks(), appCtx, environment); @@ -106,6 +108,10 @@ ApplicationContext initSpringParent() { return service.initSpringParent(); } + ApplicationContext initSpringConfigBasedBeans(ApplicationContext parent, SpringConfiguration springConfiguration) { + return service.initSpringConfigBasedBeans(parent, springConfiguration); + } + ApplicationContext initSpring(SpringConfiguration config, ApplicationContext parent) { return service.initSpring(config, parent); } From 5c4cc50cfa6aa5ee8e581af2a257a42c3839614d Mon Sep 17 00:00:00 2001 From: Dan Hardiker Date: Thu, 1 Jan 2015 12:46:56 +0000 Subject: [PATCH 10/10] Moving the wrapped application context after the dropwizard bean has been configured (as well as created). --- src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java b/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java index 08c04c3..bddf71f 100644 --- a/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java +++ b/src/main/java/com/hmsonline/dropwizard/spring/SpringBundle.java @@ -26,12 +26,12 @@ public void run(SpringServiceConfiguration configuration, Environment environmen SpringConfiguration config = configuration.getSpring(); ApplicationContext parentCtx = initSpringParent(); - parentCtx = wrapApplicationContext(parentCtx, config); Dropwizard dw = (Dropwizard) parentCtx.getBean("dropwizard"); dw.setConfiguration(configuration); dw.setEnvironment(environment); + parentCtx = wrapApplicationContext(parentCtx, config); parentCtx = initSpringConfigBasedBeans(parentCtx, config); ApplicationContext appCtx = initSpring(config, parentCtx);