Skip to content

Commit

Permalink
implemented integration for deployed apps
Browse files Browse the repository at this point in the history
  • Loading branch information
musketyr committed Dec 12, 2020
1 parent 95b6808 commit 7da4137
Show file tree
Hide file tree
Showing 17 changed files with 552 additions and 214 deletions.
12 changes: 12 additions & 0 deletions examples/micronaut-grails-example/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# we are extending everything from tomcat:8.0 image ...
FROM tomcat:8.5
MAINTAINER Vladimir Orany
# COPY path-to-your-application-war path-to-webapps-in-docker-tomcat

RUN rm -rf /usr/local/tomcat/webapps/*
ADD ./build/libs/micronaut-grails-example-3.0.0-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war

EXPOSE 8080/tcp
EXPOSE 8000/tcp

ENV CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000"
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ environments:
url: jdbc:h2:mem:testDb;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
production:
dataSource:
dbCreate: none
dbCreate: update
url: jdbc:h2:./prodDb;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
properties:
jmxEnabled: true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,28 +17,32 @@
*/
package micronaut.grails.example

import com.agorapulse.micronaut.grails.CompatibilityMode
import com.agorapulse.micronaut.grails.EnvVarLikeSystemPropertiesPropertySource
import com.agorapulse.micronaut.grails.MicronautGrailsApp
import com.agorapulse.micronaut.grails.MicronautGrailsAutoConfiguration
import com.agorapulse.micronaut.grails.domain.Manager
import grails.boot.config.GrailsAutoConfiguration
import groovy.transform.CompileStatic
import io.micronaut.context.env.Environment
import org.springframework.context.ConfigurableApplicationContext

@CompileStatic
class Application extends GrailsAutoConfiguration {
class Application extends MicronautGrailsAutoConfiguration { // <1>

static ConfigurableApplicationContext context

static void main(String[] args) {
context = MicronautGrailsApp.run { // <1>
compatibility MicronautGrailsApp.Compatibility.STRICT // <2>
source Application // <3>
arguments args // <4>
environment { // <5>
addPackage Manager.package // <6>
addPropertySource(new EnvVarLikeSystemPropertiesPropertySource()) // <7>
}
}
context = MicronautGrailsApp.run(Application, args) // <2>
}

final CompatibilityMode compatibilityMode = CompatibilityMode.STRICT // <3>
final Collection<Package> packages = [ // <4>
Manager.package,
]

@Override
protected void doWithMicronautEnvironment(Environment env) {
env.addPropertySource(new EnvVarLikeSystemPropertiesPropertySource()) // <5>
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,25 @@
*/
package micronaut.grails.example

import com.agorapulse.micronaut.grails.CompatibilityMode
import com.agorapulse.micronaut.grails.MicronautGrailsApp
import com.agorapulse.micronaut.grails.MicronautGrailsAutoConfiguration
import com.agorapulse.micronaut.grails.domain.Manager
import grails.boot.config.GrailsAutoConfiguration
import groovy.transform.CompileStatic
import org.springframework.context.ConfigurableApplicationContext

@CompileStatic
class BridgeApplication extends GrailsAutoConfiguration {
class BridgeApplication extends MicronautGrailsAutoConfiguration {

static ConfigurableApplicationContext context

final CompatibilityMode compatibilityMode = CompatibilityMode.BRIDGE
final List<Package> packages = [
Manager.package
]

static void main(String[] args) {
context = MicronautGrailsApp.run {
compatibility MicronautGrailsApp.Compatibility.BRIDGE
source BridgeApplication
arguments args
environment {
addPackage Manager.package
}
}
context = MicronautGrailsApp.run(BridgeApplication, args)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,27 +17,26 @@
*/
package micronaut.grails.example

import com.agorapulse.micronaut.grails.CompatibilityMode
import com.agorapulse.micronaut.grails.MicronautGrailsApp
import com.agorapulse.micronaut.grails.MicronautGrailsAutoConfiguration
import com.agorapulse.micronaut.grails.domain.Manager
import grails.boot.config.GrailsAutoConfiguration

import groovy.transform.CompileStatic
import org.springframework.context.ConfigurableApplicationContext

@CompileStatic
class LegacyApplication extends GrailsAutoConfiguration {
class LegacyApplication extends MicronautGrailsAutoConfiguration {

static ConfigurableApplicationContext context

final CompatibilityMode compatibilityMode = CompatibilityMode.LEGACY
final List<Package> packages = [
Manager.package
]

static void main(String[] args) {
context = MicronautGrailsApp.run {
compatibility MicronautGrailsApp.Compatibility.LEGACY
source LegacyApplication
arguments args
environment {
addPackage Manager.package
}
}
context = MicronautGrailsApp.run(LegacyApplication, args)
}

}
14 changes: 14 additions & 0 deletions examples/micronaut-grails-example/localhost.http
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
GET https://localhost:8080/test/index
Accept: application/json

###
GET https://localhost:8080/test/context
Accept: application/json

###
GET https://localhost:8080/test/values
Accept: application/json

###
GET https://localhost:8080/test/managers
Accept: application/json
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ configurations {

dependencies {
compile project(':micronaut-grails')
compile project(':micronaut-grails-web-boot')
compile project(':micronaut-grails-domain-library')

testCompile 'com.agorapulse:gru-http:0.8.4'
Expand All @@ -73,7 +74,8 @@ dependencies {
compile "org.grails:grails-core"
compile "org.springframework.boot:spring-boot-starter-actuator"
compile "org.springframework.boot:spring-boot-starter-tomcat"
compile "org.grails:grails-web-boot"
// this needs to be disabled
// compile "org.grails:grails-web-boot"
compile "org.grails:grails-logging"
compile "org.grails:grails-plugin-rest"
compile "org.grails:grails-plugin-databinding"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,25 @@
*/
package micronaut.grails.example

import com.agorapulse.micronaut.grails.web.boot.MicronautGrailsAppServletInitializer
import org.springframework.boot.builder.SpringApplicationBuilder

class ApplicationSpec extends AbstractApplicationSpec {

SpringApplicationBuilder builder = Mock()

@Override
Class<?> getApplicationClass() {
return Application
}

void 'loader class is created'() {
when:
MicronautGrailsAppServletInitializer loader = Application.classLoader.loadClass("${Application.name}Loader").newInstance() as MicronautGrailsAppServletInitializer
loader.configure(builder)
then:

1 * builder.sources(Application)
}

}
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

slug=agorapulse/micronaut-grails
group=com.agorapulse
version = 2.0.0-SNAPSHOT
version = 3.0.0-SNAPSHOT

micronautVersion = 1.2.11
grailsVersion=4.0.4
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* SPDX-License-Identifier: Apache-2.0
*
* Copyright 2020 Vladimir Orany.
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* 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.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
config {
bintray {
enabled = true
}
}

dependencies {
api project(':micronaut-grails')
api "org.grails:grails-core:$grailsVersion"

compileOnly 'javax.servlet:javax.servlet-api:4.0.1'
compileOnly 'org.springframework:spring-webmvc:5.2.12.RELEASE'
compileOnly 'org.springframework.boot:spring-boot:2.4.1'

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
/*
* SPDX-License-Identifier: Apache-2.0
*
* Copyright 2020 Vladimir Orany.
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* 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.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.
*
* Inspired by {@code GrailsAppServletInitializer}
*
*/
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.contextClass(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);
}

private ApplicationContext getExistingRootWebApplicationContext(ServletContext servletContext) {
Object context = servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
if (context instanceof ApplicationContext) {
return (ApplicationContext) context;
}
return null;
}
}
Loading

0 comments on commit 7da4137

Please sign in to comment.