Talk at ApacheCon 2020 about Micronaut and Groovy.
It covers:
- Micronaut Groovy Dependencies - Routing - Configuration - Micronaut + Spock - Micronaut + Geb - GORM for Hibernate - Micronaut GORM Multi-tenancy
objectcomputing.com© 2019, Object Computing, Inc. (OCI). All rights reserved. No part of these notes may be reproduced, stored in a retrieval system, or transmitted, in anyform or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior, written permission of Object Computing, Inc. (OCI)Micronaut + Groovy
View Slide
© 2018, Object Computing, Inc. (OCI). All rights reserved.© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 2• MICRONAUT / GRAILS OCI TEAM• GUADALAJARA, SPAIN• CURATOR OF GROOVYCALAMARI.COM• GREACH Conference organizer• @SDELAMO• HTTPS://SERGIODELAMO.COMSERGIO DEL AMO
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 3MICRONAUT IS LANGUAGE AGNOSTIC
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 4MICRONAUT IS TEST FRAMEWORK AGNOSTIC
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 5Micronaut + Groovy♥
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 6MICRONAUT IS WRITTEN WITH JAVA. IT IS TESTED WITH SPOCK
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 7MICRONAUT LAUNCH - GROOVY/SPOCK
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 8MICRONAUT CLI - GROOVY/SPOCK
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 9Groovy Specific ModulesDependency Descriptionmicronaut-inject-groovy Include AST transformations to generate bean definitions. Should be compileOnly on your classpath.micronaut-runtime-groovyAdds the ability to specify configuration placed in src/main/resources in Groovy format (i.e.application.groovy)micronaut-function-groovy Include AST transforms that make it easier to write Functions for AWS Lambda
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 10Groovy Specific Modules
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 11Singleton⚠ Make sure to use javax.inject.Singletonwhen declaring a singleton bean.Groovy automatically importsgroovy.lang.Singleton
© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 12Configuration
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 13src/main/resources/application.groovy
© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 14Routing
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 15Using Groovy Route Builder
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 16Using Groovy Route Builder
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 17Using @GET @POST @PUT annotations
© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 18
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 19Test Dependenciesorg.spockframework:spock-core 2.0-M3-groovy-3.0org.codehause.groovy:groovy 3.0.4
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 20@AutoCleanup and @Shared
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 21@AutoCleanup and @Shared
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 22@AutoCleanup and @Shared
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 23Spock Mocks
© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 24
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 25geb-spock dependencies
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 26src/test/resources/GebConfig.groovy
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 27Webdriver binaries plugin
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 28
© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 29
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 30GORM ModulesDependency Descriptionmicronaut-hibernate-gorm Configures GORM for Hibernate for Groovy applicationsmicronaut-mongo-gorm Configures GORM for Mongo DB for Groovy applicationsmicronaut-neo4j-gorm Configures GORM for Mongo DB for Groovy applications
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 31Micronaut + GORM Hibernate
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 32Hibernate GORM Feature
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 33Hibernate GORM Feature
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 34Hibernate GORM | Package scanning
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 35Entities
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 36Transaction demarcation⚠ Each method that interacts with GORM should beannotated with GORM'sgrails.gorm.transactions.Transactional toensure a session is present. You can also add the@Transactional annotation to the class.
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 37GORM Data services are registered automatically a singleton beans
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 38
© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 39Validation
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 40Validation
© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 41Multi-Tenancy
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 42GORM Multitenancy
© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 43GORM MULTITENANCYhttps://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy
© 2018, Object Computing, Inc. (OCI). objectcomputing.com 44GORM Multi-tenancy● Configure Multitenancy Mode● Configure Tenant Resolver● Configure Domain classes which you want to beregarded as multi tenant. ● User Tenants.* or Multi-tenancyTransformations.
© 2018, Object Computing, Inc. (OCI). All rights reserved.© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 45Multi-tenancy modesModes DescriptionDATABASESeparate database with a separate connection poolis used to store each tenants data.SCHEMAThe same database, but different schemas areused to store each tenants’ data.DISCRIMINATORThe same database is used with a discriminatorused to partition and isolate data.
© 2018, Object Computing, Inc. (OCI). All rights reserved.© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 46Multi-tenancy modes - Data isolationModes IsolationDATABASE SCHEMA DISCRIMINATOR
© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 47MULTI-TENANCY PROPAGATIONsrc/main/resources/application.yml
© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 48DOMAINS MULTI-TENANCY
© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 49DOMAINS - PARTITIONED MULTI-TENANCY
© 2018, Object Computing, Inc. (OCI). All rights reserved.© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 50Multi-tenancy transformationsTransformation Description@CurrentTenantResolve the current tenant for the context of a classor method@TenantUse a specifc tenant for the context of a class ormethod@WithoutTenantExecute logic without a specific tentnat (using thedefault connection)
© 2018, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 51DOMAINS - PARTITIONED MULTI-TENANCY
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 52Multi-Tenancy GORM - Tenant ResolversName DescriptionCookie Tenant Resolver Removes the current tenant from an HTTP cookieFixed Tenant Resolver Resolves against a fixed tenant idHttpHeaderTenantResolver Resolves the current tenant from the request HTTP HeaderPrincipalTenantResolver Resolves the current tenant from the authenticated usernameSessionTenantResolver Resolves the current tenant from the HTTP SessionSubdomainTenantResolver Resolves the tenant id from the subdomainSystemPropertyTenantResolver Resolves the tenant id from a system property
© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com• gitter.im/micronautfw• docs.micronaut.io• guides.micronaut.io• micronaut.io/faq.html• github.com/micronaut-projects/micronaut-core• github.com/micronaut-projects/micronaut-examples• objectcomputing.com/products/micronaut• [email protected]Micronaut Resources53
CONNECT WITH US1+ (314) 579-0066@objectcomputingobjectcomputing.com© 2019, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 54Questions?