From 056c21648b1f55dbb2478b00efe60936e72f67d6 Mon Sep 17 00:00:00 2001 From: Vladimir Orany Date: Wed, 8 Nov 2023 14:32:33 +0100 Subject: [PATCH] support Grails 5.x deployed as WAR (#35) --- .../MicronautGrailsAppServletInitializer.java | 49 ++----------------- .../micronaut/grails/MicronautGrailsApp.java | 4 ++ .../grails/MicronautGrailsAppBuilder.java | 6 +++ 3 files changed, 13 insertions(+), 46 deletions(-) diff --git a/subprojects/micronaut-grails-web-boot/src/main/groovy/com/agorapulse/micronaut/grails/web/boot/MicronautGrailsAppServletInitializer.java b/subprojects/micronaut-grails-web-boot/src/main/groovy/com/agorapulse/micronaut/grails/web/boot/MicronautGrailsAppServletInitializer.java index ccbe6739..598488af 100644 --- a/subprojects/micronaut-grails-web-boot/src/main/groovy/com/agorapulse/micronaut/grails/web/boot/MicronautGrailsAppServletInitializer.java +++ b/subprojects/micronaut-grails-web-boot/src/main/groovy/com/agorapulse/micronaut/grails/web/boot/MicronautGrailsAppServletInitializer.java @@ -18,20 +18,8 @@ package com.agorapulse.micronaut.grails.web.boot; import com.agorapulse.micronaut.grails.MicronautGrailsAppBuilder; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.builder.ParentContextApplicationContextInitializer; import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; -import org.springframework.boot.web.servlet.support.ErrorPageFilter; -import org.springframework.boot.web.servlet.support.ServletContextApplicationContextInitializer; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.annotation.AnnotationUtils; -import org.springframework.util.Assert; -import org.springframework.web.context.WebApplicationContext; - -import javax.servlet.ServletContext; /** * Ensure a {@link com.agorapulse.micronaut.grails.MicronautGrailsApp} in constructed during servlet initialization. @@ -41,40 +29,9 @@ */ public abstract class MicronautGrailsAppServletInitializer extends SpringBootServletInitializer { - /* - * TODO: Replace with createSpringApplicationBuilder() override when upgrading to Spring Boot 1.3 M4 and delete this method - */ - - protected WebApplicationContext createRootApplicationContext(ServletContext servletContext) { - SpringApplicationBuilder builder = new MicronautGrailsAppBuilder(); - builder.main(getClass()); - ApplicationContext parent = getExistingRootWebApplicationContext(servletContext); - if (parent != null) { - this.logger.info("Root context already created (using as parent)."); - servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, null); - builder.initializers(new ParentContextApplicationContextInitializer(parent)); - } - builder.initializers(new ServletContextApplicationContextInitializer(servletContext)); - builder.application().setApplicationContextClass(AnnotationConfigServletWebServerApplicationContext.class); - builder = configure(builder); - SpringApplication application = builder.build(); - if (application.getAllSources().isEmpty() && AnnotationUtils.findAnnotation(getClass(), Configuration.class) != null) { - application.getSources().add(getClass().getName()); - } - Assert.state( - application.getAllSources().size() > 0, - "No SpringApplication sources have been defined. Either override the configure method or add an @Configuration annotation" - ); - // Ensure error pages are registered - application.getSources().add(ErrorPageFilter.class.getName()); - return run(application); + @Override + protected SpringApplicationBuilder createSpringApplicationBuilder() { + return new MicronautGrailsAppBuilder(); } - private ApplicationContext getExistingRootWebApplicationContext(ServletContext servletContext) { - Object context = servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); - if (context instanceof ApplicationContext) { - return (ApplicationContext) context; - } - return null; - } } diff --git a/subprojects/micronaut-grails/src/main/java/com/agorapulse/micronaut/grails/MicronautGrailsApp.java b/subprojects/micronaut-grails/src/main/java/com/agorapulse/micronaut/grails/MicronautGrailsApp.java index 2cedb3d3..573545e2 100644 --- a/subprojects/micronaut-grails/src/main/java/com/agorapulse/micronaut/grails/MicronautGrailsApp.java +++ b/subprojects/micronaut-grails/src/main/java/com/agorapulse/micronaut/grails/MicronautGrailsApp.java @@ -33,6 +33,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.io.ResourceLoader; import javax.annotation.Nonnull; import java.lang.reflect.Method; @@ -160,6 +161,9 @@ public MicronautGrailsApp(Class... sources) { super(sources); } + public MicronautGrailsApp(ResourceLoader resourceLoader, Class... sources) { + super(resourceLoader, sources); + } /** * Strategy method used to create the {@link org.springframework.context.ApplicationContext}. By default this diff --git a/subprojects/micronaut-grails/src/main/java/com/agorapulse/micronaut/grails/MicronautGrailsAppBuilder.java b/subprojects/micronaut-grails/src/main/java/com/agorapulse/micronaut/grails/MicronautGrailsAppBuilder.java index ac73c4c7..1081d8b6 100644 --- a/subprojects/micronaut-grails/src/main/java/com/agorapulse/micronaut/grails/MicronautGrailsAppBuilder.java +++ b/subprojects/micronaut-grails/src/main/java/com/agorapulse/micronaut/grails/MicronautGrailsAppBuilder.java @@ -19,6 +19,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.core.io.ResourceLoader; public class MicronautGrailsAppBuilder extends SpringApplicationBuilder { @@ -31,4 +32,9 @@ protected SpringApplication createSpringApplication(Class... sources) { return new MicronautGrailsApp(sources); } + // @Override + protected SpringApplication createSpringApplication(ResourceLoader resourceLoader, Class... sources) { + return new MicronautGrailsApp(resourceLoader, sources); + } + }