SlideShare a Scribd company logo
1 of 55
Download to read offline
objectcomputing.com
© 2022, Object Computing, Inc. (OCI). All rights reserved. No part of these notes may be reproduced, stored in a retrieval system, or transmitted, in any
form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior, written permission of Object Computing, Inc. (OCI)
Groovy-Powered Microservices
with Micronaut
Zachary Klein, Principal Software Engineer, 2GM Team
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com
❖ Zachary Klein - Developer & Architect
❖ Principal Software Engineer at Object
Computing, Inc
❖ 12+ years of software development experience
❖ OSS contributor
❖ Training instructor
2
About me
Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved.
A modern, JVM-based, full-stack framework for building modular,
easily testable microservice and serverless applications.
Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved.
https://micronaut.io/launch
Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved.
❖ Controller with
Dependency Injection
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com
❖ Micronaut is language-agnostic
❖ 1st Class support for:
❖ Java
❖ Kotlin
❖ Groovy
6
Micronaut and Groovy
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com
❖ Micronaut implements core framework
components using Groovy language features
❖ E.g, Groovy AST transformations are used
for AOT compilation support (vs Annotation
Processors in Java/Kotlin)
❖ Support for Groovy configuration files,
serverless functions, Spock/Geb tests, and
GORM!
7
Micronaut and Groovy
Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved.
❖ Controller with
Dependency Injection
❖ New class files generated
at compilation time (via
AST Transformations) to
implement the controller,
instantiate & supply
dependencies, etc
Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved.
❖ Controller with
Dependency Injection
❖ New class files generated
at compilation time (via
AST Transformations) to
implement the controller,
instantiate & supply
dependencies, etc
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com
❖ Micronaut Launch is the recommended
method for creating Micronaut apps
❖ Choose Groovy as the Language (and
Spock as testing framework, if desired)
❖ Using the CLI:
10
Getting Started
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 11
Getting Started
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 12
Getting Started
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 13
Getting Started
Groovy auto-imports the
groovy.lang.singleton
annotation - make sure you
import from jakarta.inject
!
Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved.
❖ Dependency Injection via
@Inject
Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved.
❖ Micronaut’s HTTP Client
(implemented through
Groovy AST
Transformations)
Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved.
❖ Dependency Injection via
Constructor Injection
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com
❖ YAML is the default, but Groovy
is supported
❖ Groovy allows for powerful,
expressive, programmatic
configuration
❖ Can mix and match!
17
Configuration with Groovy
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 18
Configuration with Groovy
❖ Micronaut accepts
configuration in JSON,
properties, YAML, and
Groovy ConfigSlurper (also
env variables, system
properties)
❖ Note that properties cannot
contain dashes - use
camelCase or snake_case
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com
❖ Micronaut Controllers (and Clients) express routes
declaratively via annotation arguments:
❖ @Controller("/hello")
❖ @Get("/profile “)
❖ Optionally, routes can be expressed
programmatically using the RouteBuilder interface
❖ GroovyRouteBuilder provides an expressive DSL
for routes (similar to Grails UrlMappings)
19
Controller Routes
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 20
Controller Routes
❖ Annotation-based routes
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 21
Controller Routes
❖ GroovyRouteBuilder
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 22
@MicronautTest & Spock
❖ Micronaut is test-framework agnostic - no special
tooling required
❖ E.g, JUnit, Spock
❖ Because of Micronaut’s fast startup time, many
developers prefer integration tests
❖ @MicronautTest automatically starts up the
application context for the test run, and shuts it
down cleanly
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 23
@MicronautTest & Spock
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 24
@MicronautTest & Spock
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 25
@MicronautTest & Spock
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 26
@MicronautTest & Spock
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 27
@MicronautTest & Spock
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 28
Micronaut and GORM
❖ GORM is the persistence framework pioneered by
the Grails framework - https://gorm.grails.org
❖ GORM provides expressive querying, persistence
and domain modeling features, including
validation, multi-tenancy, and more
❖ When configured with Groovy support, Micronaut
apps can leverage GORM’s powerful features in a
comparatively lightweight manner
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 29
Micronaut and GORM
Dependency Description
micronaut-
hibernate-gorm
Configures GORM for Hibernate for Groovy
applications
micronaut-mongo-
gorm
Configures GORM for Mongo DB for Groovy
applications
micronaut-neo4j-
gorm
Configures GORM for Mongo DB for Groovy
applications
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 30
Adding GORM to Micronaut
❖ Using Micronaut Launch
or the CLI command
feature-diff, you can
generate a delta showing
how to add a feature, like
hibernate-gorm
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 31
Adding GORM to Micronaut
❖ Add GORM and JDBC
dependencies - also a
database driver (H2 in this
demo)
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com
Configuring Datasources
❖ Datasource configuration
❖ Standard Hibernate/JDBC
configuration properties -
database credentials,
dialect, etc
❖ Can configure multiple
datasources
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com
Enabling Entity-scanning
❖ Application class needs to
be modified
❖ Application context is
started up using the
builder pattern - the
packages() method
species the package under
which entities are defined
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 34
Creating Domain Classes (aka Entities)
❖ A Domain Class / Entity can
be a simple POGO
annotated with @Entity
❖ Class name will be mapped
as database table name (by
convention)
❖ Properties of the class will be
mapped to columns in the
database table
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 35
Creating Domain Classes (aka Entities)
❖ Additional data-mapping
features (like validation)
can be added by
implementing the
GormEntity<> trait
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 36
GORM Data Services in Micronaut
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 37
GORM Data Services in Micronaut
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 38
GORM Multi-tenancy
https://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 39
GORM Multi-tenancy
https://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 40
GORM Multi-tenancy
https://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 41
GORM Multi-tenancy
https://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 42
GORM Multi-tenancy Modes
https://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy
Modes Description Isolation
DATABASE
Separate database with a
separate connection pool is used
to store each tenants data.
HIGHEST
SCHEMA
The same database, but different
schemas are used to store each
tenants’ data.
HIGH
DISCRIMINATOR
The same database is used with
a discriminator used to partition
and isolate data.
LOW
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 43
GORM Multi-tenancy Tenant Resolvers
https://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy
Name Description
CookieTenantResolver Removes the current tenant from an HTTP cookie
FixedTenantResolver Resolves against a fixed tenant id
HttpHeaderTenantResolver Resolves the current tenant from the request HTTP Header
PrincipalTenantResolver Resolves the current tenant from the authenticated username
SessionTenantResolver Resolves the current tenant from the HTTP Session
SubdomainTenantResolver Resolves the tenant id from the subdomain
SystemPropertyTenantResolver Resolves the tenant id from a system property
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 44
GORM Multi-tenancy: Specify tenantId
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 45
GORM Multi-tenancy Transformations (Annotations)
Transformation Description
@CurrentTenant Resolve the current tenant for the context of a class or method
@Tenant Use a specifc tenant for the context of a class or method
@WithoutTenant Execute logic without a specific tentnat (using the default connection)
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 46
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 47
Micronaut and Grails
❖ Grails is a rapid-application Java web-framework, based on
Groovy and Spring Boot
❖ Since Grails 4, Grails applications include a Micronaut
application context, allowing Micronaut features and libraries
to be integrated with Grails apps
❖ Micronaut HTTP Client & Grails: https://guides.grails.org/
grails-micronaut-http/guide/index.html
❖ Micronaut Kafka & Grails: https://guides.grails.org/grails-
micronaut-kafka/guide/index.html
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com
❖ Micronaut supports Groovy for writing serverless
functions in environments like AWS Lambda, Oracle
Cloud, Microsoft Azure, & Google Cloud Platform.
❖ You can deploy “pure” functions (invoked by events in
the platform) or lightweight “HTTP functions” (with
controllers, REST endpoints, etc)
48
Micronaut and Groovy: Serverless Functions
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 49
Micronaut and Groovy: Serverless Functions
https://micronaut-projects.github.io/
micronaut-gcp/latest/guide/
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 50
Micronaut and Groovy: Serverless Functions
https://micronaut-projects.github.io/
micronaut-aws/latest/guide/
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 51
Micronaut and Groovy: Serverless Functions
https://micronaut-projects.github.io/
micronaut-azure/latest/guide/
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 52
Micronaut and Groovy: Serverless Functions
https://micronaut-projects.github.io/
micronaut-oracle-cloud/latest/guide/
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 53
Micronaut and Groovy: CLI Apps
❖ Micronaut supports creation of Command Line
Applications using the picocli library (https://picocli.info/)
❖ CLI apps can be created using Groovy as well!
❖ Apps can utilize dependency injection, HTTP clients, &
more
❖ Docs: https://micronaut-projects.github.io/micronaut-
picocli/latest/guide/
© 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 54
Micronaut and Groovy: CLI Apps
objectcomputing.com
© 2022, Object Computing, Inc. (OCI). All rights reserved. No part of these notes may be reproduced, stored in a retrieval system, or transmitted, in any
form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior, written permission of Object Computing, Inc. (OCI)
Zachary Klein, Principal Software Engineer, 2GM Team

More Related Content

What's hot

Design by contract(계약에의한설계)
Design by contract(계약에의한설계)Design by contract(계약에의한설계)
Design by contract(계약에의한설계)Jeong-gyu Kim
 
Penetration Testing con Python - Network Sniffer
Penetration Testing con Python - Network SnifferPenetration Testing con Python - Network Sniffer
Penetration Testing con Python - Network SnifferSimone Onofri
 
Agile Requirements - Journey of a User Story
Agile Requirements - Journey of a User StoryAgile Requirements - Journey of a User Story
Agile Requirements - Journey of a User StoryCara Turner
 
User Interface customization for AEM 6
User Interface customization for AEM 6User Interface customization for AEM 6
User Interface customization for AEM 6Damien Antipa
 
Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...
Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...
Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...ucelebi
 
Raspberry Piにdiskless modeのalpine linuxを導入してみる
Raspberry Piにdiskless modeのalpine linuxを導入してみるRaspberry Piにdiskless modeのalpine linuxを導入してみる
Raspberry Piにdiskless modeのalpine linuxを導入してみるKenichiro MATOHARA
 
Reviewing a Complex DataWeave Transformation Use-case
Reviewing a Complex DataWeave Transformation Use-caseReviewing a Complex DataWeave Transformation Use-case
Reviewing a Complex DataWeave Transformation Use-caseAlexandra N. Martinez
 
Learning Agile through the candy game
Learning Agile through the candy gameLearning Agile through the candy game
Learning Agile through the candy gameCarlos Morales
 
GHAMAS Design Principles
GHAMAS Design PrinciplesGHAMAS Design Principles
GHAMAS Design PrinciplesMichael Rawlins
 
Sensible defaults for CI and CD in 2019
Sensible defaults for CI and CD in 2019Sensible defaults for CI and CD in 2019
Sensible defaults for CI and CD in 2019Thoughtworks
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작Taegon Kim
 
Understanding and Measuring I/O Performance
Understanding and Measuring I/O PerformanceUnderstanding and Measuring I/O Performance
Understanding and Measuring I/O PerformanceGlenn K. Lockwood
 
Template: Financial Sanity Check
Template: Financial Sanity CheckTemplate: Financial Sanity Check
Template: Financial Sanity CheckOrange Hills GmbH
 
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jpJava EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jpNorito Agetsuma
 

What's hot (20)

Design by contract(계약에의한설계)
Design by contract(계약에의한설계)Design by contract(계약에의한설계)
Design by contract(계약에의한설계)
 
Penetration Testing con Python - Network Sniffer
Penetration Testing con Python - Network SnifferPenetration Testing con Python - Network Sniffer
Penetration Testing con Python - Network Sniffer
 
Agile Requirements - Journey of a User Story
Agile Requirements - Journey of a User StoryAgile Requirements - Journey of a User Story
Agile Requirements - Journey of a User Story
 
Testing at Spotify
Testing at SpotifyTesting at Spotify
Testing at Spotify
 
User Interface customization for AEM 6
User Interface customization for AEM 6User Interface customization for AEM 6
User Interface customization for AEM 6
 
Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...
Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...
Apache Flink Internals: Stream & Batch Processing in One System – Apache Flin...
 
User stories for BAs: overview and tips
User stories for BAs: overview and tipsUser stories for BAs: overview and tips
User stories for BAs: overview and tips
 
Raspberry Piにdiskless modeのalpine linuxを導入してみる
Raspberry Piにdiskless modeのalpine linuxを導入してみるRaspberry Piにdiskless modeのalpine linuxを導入してみる
Raspberry Piにdiskless modeのalpine linuxを導入してみる
 
Reviewing a Complex DataWeave Transformation Use-case
Reviewing a Complex DataWeave Transformation Use-caseReviewing a Complex DataWeave Transformation Use-case
Reviewing a Complex DataWeave Transformation Use-case
 
Learning Agile through the candy game
Learning Agile through the candy gameLearning Agile through the candy game
Learning Agile through the candy game
 
The Mule Agent
The Mule AgentThe Mule Agent
The Mule Agent
 
Vertical Slicing
Vertical SlicingVertical Slicing
Vertical Slicing
 
GHAMAS Design Principles
GHAMAS Design PrinciplesGHAMAS Design Principles
GHAMAS Design Principles
 
Sensible defaults for CI and CD in 2019
Sensible defaults for CI and CD in 2019Sensible defaults for CI and CD in 2019
Sensible defaults for CI and CD in 2019
 
Feature Toggles
Feature TogglesFeature Toggles
Feature Toggles
 
AEM 6.X (With Basics) Training Syllabus
AEM 6.X (With Basics) Training SyllabusAEM 6.X (With Basics) Training Syllabus
AEM 6.X (With Basics) Training Syllabus
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작
 
Understanding and Measuring I/O Performance
Understanding and Measuring I/O PerformanceUnderstanding and Measuring I/O Performance
Understanding and Measuring I/O Performance
 
Template: Financial Sanity Check
Template: Financial Sanity CheckTemplate: Financial Sanity Check
Template: Financial Sanity Check
 
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jpJava EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jp
 

Similar to Groovy-Powered Microservices with Micronaut

Micronaut: Changing the Micro Future
Micronaut: Changing the Micro FutureMicronaut: Changing the Micro Future
Micronaut: Changing the Micro FutureZachary Klein
 
Native Cloud-Native: Building Agile Microservices with the Micronaut Framework
Native Cloud-Native: Building Agile Microservices with the Micronaut FrameworkNative Cloud-Native: Building Agile Microservices with the Micronaut Framework
Native Cloud-Native: Building Agile Microservices with the Micronaut FrameworkZachary Klein
 
Protecting data with CSI Volume Snapshots on Kubernetes
Protecting data with CSI Volume Snapshots on KubernetesProtecting data with CSI Volume Snapshots on Kubernetes
Protecting data with CSI Volume Snapshots on KubernetesDoKC
 
Quebec - 16 November 2022 - Canada CNCF Meetups.pdf
Quebec - 16 November 2022 - Canada CNCF Meetups.pdfQuebec - 16 November 2022 - Canada CNCF Meetups.pdf
Quebec - 16 November 2022 - Canada CNCF Meetups.pdfprune1
 
Groovy for Java Devs
Groovy for Java DevsGroovy for Java Devs
Groovy for Java DevsZachary Klein
 
DevOps for Mainframe: Open Source Fast Track
DevOps for Mainframe: Open Source Fast TrackDevOps for Mainframe: Open Source Fast Track
DevOps for Mainframe: Open Source Fast TrackDevOps.com
 
Grails 4: Upgrade your Game!
Grails 4: Upgrade your Game!Grails 4: Upgrade your Game!
Grails 4: Upgrade your Game!Zachary Klein
 
Get the Exact Identity Solution You Need - In the Cloud - Overview
Get the Exact Identity Solution You Need - In the Cloud - OverviewGet the Exact Identity Solution You Need - In the Cloud - Overview
Get the Exact Identity Solution You Need - In the Cloud - OverviewForgeRock
 
Automate Behavior-driven Development (Stanford WebCamp 2022)
Automate Behavior-driven Development (Stanford WebCamp 2022)Automate Behavior-driven Development (Stanford WebCamp 2022)
Automate Behavior-driven Development (Stanford WebCamp 2022)DOCOMO Innovations, Inc.
 
20160221 va interconnect_pub
20160221 va interconnect_pub20160221 va interconnect_pub
20160221 va interconnect_pubCanturk Isci
 
Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編
Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編
Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編Junji Nishihara
 
Oracle ZDM KamaleshRamasamy Sangam2020
Oracle ZDM KamaleshRamasamy Sangam2020Oracle ZDM KamaleshRamasamy Sangam2020
Oracle ZDM KamaleshRamasamy Sangam2020Kamalesh Ramasamy
 
Oracle Database Migration to Oracle Cloud Infrastructure
Oracle Database Migration to Oracle Cloud InfrastructureOracle Database Migration to Oracle Cloud Infrastructure
Oracle Database Migration to Oracle Cloud InfrastructureSinanPetrusToma
 
Getting Groovy with JHipster and Micronaut
Getting Groovy with JHipster and MicronautGetting Groovy with JHipster and Micronaut
Getting Groovy with JHipster and MicronautZachary Klein
 
RICOH THETA x IoT Developers Contest : Cloud API Seminar
 RICOH THETA x IoT Developers Contest : Cloud API Seminar RICOH THETA x IoT Developers Contest : Cloud API Seminar
RICOH THETA x IoT Developers Contest : Cloud API Seminarcontest-theta360
 
.NET and Kubernetes: Bringing Legacy .NET Into the Modern World with Pivotal ...
.NET and Kubernetes: Bringing Legacy .NET Into the Modern World with Pivotal ....NET and Kubernetes: Bringing Legacy .NET Into the Modern World with Pivotal ...
.NET and Kubernetes: Bringing Legacy .NET Into the Modern World with Pivotal ...VMware Tanzu
 
Introduction to GCCP - 2022.pptx
Introduction to GCCP - 2022.pptxIntroduction to GCCP - 2022.pptx
Introduction to GCCP - 2022.pptxRamSamarthBB
 
Gluecon 2017 - GoMake | Flying Dreams: Real-Time Communication from the Edge ...
Gluecon 2017 - GoMake | Flying Dreams: Real-Time Communication from the Edge ...Gluecon 2017 - GoMake | Flying Dreams: Real-Time Communication from the Edge ...
Gluecon 2017 - GoMake | Flying Dreams: Real-Time Communication from the Edge ...Jonathan Barton
 
Android Development Workshop
Android Development WorkshopAndroid Development Workshop
Android Development WorkshopPeter Robinett
 
Automate Behavior-driven Development (DrupalCon Portland 2022)
Automate Behavior-driven Development (DrupalCon Portland 2022)Automate Behavior-driven Development (DrupalCon Portland 2022)
Automate Behavior-driven Development (DrupalCon Portland 2022)DOCOMO Innovations, Inc.
 

Similar to Groovy-Powered Microservices with Micronaut (20)

Micronaut: Changing the Micro Future
Micronaut: Changing the Micro FutureMicronaut: Changing the Micro Future
Micronaut: Changing the Micro Future
 
Native Cloud-Native: Building Agile Microservices with the Micronaut Framework
Native Cloud-Native: Building Agile Microservices with the Micronaut FrameworkNative Cloud-Native: Building Agile Microservices with the Micronaut Framework
Native Cloud-Native: Building Agile Microservices with the Micronaut Framework
 
Protecting data with CSI Volume Snapshots on Kubernetes
Protecting data with CSI Volume Snapshots on KubernetesProtecting data with CSI Volume Snapshots on Kubernetes
Protecting data with CSI Volume Snapshots on Kubernetes
 
Quebec - 16 November 2022 - Canada CNCF Meetups.pdf
Quebec - 16 November 2022 - Canada CNCF Meetups.pdfQuebec - 16 November 2022 - Canada CNCF Meetups.pdf
Quebec - 16 November 2022 - Canada CNCF Meetups.pdf
 
Groovy for Java Devs
Groovy for Java DevsGroovy for Java Devs
Groovy for Java Devs
 
DevOps for Mainframe: Open Source Fast Track
DevOps for Mainframe: Open Source Fast TrackDevOps for Mainframe: Open Source Fast Track
DevOps for Mainframe: Open Source Fast Track
 
Grails 4: Upgrade your Game!
Grails 4: Upgrade your Game!Grails 4: Upgrade your Game!
Grails 4: Upgrade your Game!
 
Get the Exact Identity Solution You Need - In the Cloud - Overview
Get the Exact Identity Solution You Need - In the Cloud - OverviewGet the Exact Identity Solution You Need - In the Cloud - Overview
Get the Exact Identity Solution You Need - In the Cloud - Overview
 
Automate Behavior-driven Development (Stanford WebCamp 2022)
Automate Behavior-driven Development (Stanford WebCamp 2022)Automate Behavior-driven Development (Stanford WebCamp 2022)
Automate Behavior-driven Development (Stanford WebCamp 2022)
 
20160221 va interconnect_pub
20160221 va interconnect_pub20160221 va interconnect_pub
20160221 va interconnect_pub
 
Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編
Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編
Kong Academyを日本語でお届け!#4 ”はじめてのKong”オンラインミートアップKong Developer Portal編
 
Oracle ZDM KamaleshRamasamy Sangam2020
Oracle ZDM KamaleshRamasamy Sangam2020Oracle ZDM KamaleshRamasamy Sangam2020
Oracle ZDM KamaleshRamasamy Sangam2020
 
Oracle Database Migration to Oracle Cloud Infrastructure
Oracle Database Migration to Oracle Cloud InfrastructureOracle Database Migration to Oracle Cloud Infrastructure
Oracle Database Migration to Oracle Cloud Infrastructure
 
Getting Groovy with JHipster and Micronaut
Getting Groovy with JHipster and MicronautGetting Groovy with JHipster and Micronaut
Getting Groovy with JHipster and Micronaut
 
RICOH THETA x IoT Developers Contest : Cloud API Seminar
 RICOH THETA x IoT Developers Contest : Cloud API Seminar RICOH THETA x IoT Developers Contest : Cloud API Seminar
RICOH THETA x IoT Developers Contest : Cloud API Seminar
 
.NET and Kubernetes: Bringing Legacy .NET Into the Modern World with Pivotal ...
.NET and Kubernetes: Bringing Legacy .NET Into the Modern World with Pivotal ....NET and Kubernetes: Bringing Legacy .NET Into the Modern World with Pivotal ...
.NET and Kubernetes: Bringing Legacy .NET Into the Modern World with Pivotal ...
 
Introduction to GCCP - 2022.pptx
Introduction to GCCP - 2022.pptxIntroduction to GCCP - 2022.pptx
Introduction to GCCP - 2022.pptx
 
Gluecon 2017 - GoMake | Flying Dreams: Real-Time Communication from the Edge ...
Gluecon 2017 - GoMake | Flying Dreams: Real-Time Communication from the Edge ...Gluecon 2017 - GoMake | Flying Dreams: Real-Time Communication from the Edge ...
Gluecon 2017 - GoMake | Flying Dreams: Real-Time Communication from the Edge ...
 
Android Development Workshop
Android Development WorkshopAndroid Development Workshop
Android Development Workshop
 
Automate Behavior-driven Development (DrupalCon Portland 2022)
Automate Behavior-driven Development (DrupalCon Portland 2022)Automate Behavior-driven Development (DrupalCon Portland 2022)
Automate Behavior-driven Development (DrupalCon Portland 2022)
 

More from Zachary Klein

Micronaut For Single Page Apps
Micronaut For Single Page AppsMicronaut For Single Page Apps
Micronaut For Single Page AppsZachary Klein
 
Grails Launchpad - From Ground Zero to Orbit
Grails Launchpad - From Ground Zero to OrbitGrails Launchpad - From Ground Zero to Orbit
Grails Launchpad - From Ground Zero to OrbitZachary Klein
 
Room with a Vue - Introduction to Vue.js
Room with a Vue - Introduction to Vue.jsRoom with a Vue - Introduction to Vue.js
Room with a Vue - Introduction to Vue.jsZachary Klein
 
Shields Up! Securing React Apps
Shields Up! Securing React AppsShields Up! Securing React Apps
Shields Up! Securing React AppsZachary Klein
 
Using React with Grails 3
Using React with Grails 3Using React with Grails 3
Using React with Grails 3Zachary Klein
 

More from Zachary Klein (6)

Micronaut Launchpad
Micronaut LaunchpadMicronaut Launchpad
Micronaut Launchpad
 
Micronaut For Single Page Apps
Micronaut For Single Page AppsMicronaut For Single Page Apps
Micronaut For Single Page Apps
 
Grails Launchpad - From Ground Zero to Orbit
Grails Launchpad - From Ground Zero to OrbitGrails Launchpad - From Ground Zero to Orbit
Grails Launchpad - From Ground Zero to Orbit
 
Room with a Vue - Introduction to Vue.js
Room with a Vue - Introduction to Vue.jsRoom with a Vue - Introduction to Vue.js
Room with a Vue - Introduction to Vue.js
 
Shields Up! Securing React Apps
Shields Up! Securing React AppsShields Up! Securing React Apps
Shields Up! Securing React Apps
 
Using React with Grails 3
Using React with Grails 3Using React with Grails 3
Using React with Grails 3
 

Recently uploaded

Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 

Recently uploaded (20)

Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 

Groovy-Powered Microservices with Micronaut

  • 1. objectcomputing.com © 2022, Object Computing, Inc. (OCI). All rights reserved. No part of these notes may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior, written permission of Object Computing, Inc. (OCI) Groovy-Powered Microservices with Micronaut Zachary Klein, Principal Software Engineer, 2GM Team
  • 2. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com ❖ Zachary Klein - Developer & Architect ❖ Principal Software Engineer at Object Computing, Inc ❖ 12+ years of software development experience ❖ OSS contributor ❖ Training instructor 2 About me
  • 3. Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved. A modern, JVM-based, full-stack framework for building modular, easily testable microservice and serverless applications.
  • 4. Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved. https://micronaut.io/launch
  • 5. Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved. ❖ Controller with Dependency Injection
  • 6. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com ❖ Micronaut is language-agnostic ❖ 1st Class support for: ❖ Java ❖ Kotlin ❖ Groovy 6 Micronaut and Groovy
  • 7. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com ❖ Micronaut implements core framework components using Groovy language features ❖ E.g, Groovy AST transformations are used for AOT compilation support (vs Annotation Processors in Java/Kotlin) ❖ Support for Groovy configuration files, serverless functions, Spock/Geb tests, and GORM! 7 Micronaut and Groovy
  • 8. Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved. ❖ Controller with Dependency Injection ❖ New class files generated at compilation time (via AST Transformations) to implement the controller, instantiate & supply dependencies, etc
  • 9. Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved. ❖ Controller with Dependency Injection ❖ New class files generated at compilation time (via AST Transformations) to implement the controller, instantiate & supply dependencies, etc
  • 10. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com ❖ Micronaut Launch is the recommended method for creating Micronaut apps ❖ Choose Groovy as the Language (and Spock as testing framework, if desired) ❖ Using the CLI: 10 Getting Started
  • 11. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 11 Getting Started
  • 12. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 12 Getting Started
  • 13. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 13 Getting Started Groovy auto-imports the groovy.lang.singleton annotation - make sure you import from jakarta.inject !
  • 14. Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved. ❖ Dependency Injection via @Inject
  • 15. Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved. ❖ Micronaut’s HTTP Client (implemented through Groovy AST Transformations)
  • 16. Copyright © 2022 Object Computing, Inc. (OCI) All rights reserved. ❖ Dependency Injection via Constructor Injection
  • 17. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com ❖ YAML is the default, but Groovy is supported ❖ Groovy allows for powerful, expressive, programmatic configuration ❖ Can mix and match! 17 Configuration with Groovy
  • 18. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 18 Configuration with Groovy ❖ Micronaut accepts configuration in JSON, properties, YAML, and Groovy ConfigSlurper (also env variables, system properties) ❖ Note that properties cannot contain dashes - use camelCase or snake_case
  • 19. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com ❖ Micronaut Controllers (and Clients) express routes declaratively via annotation arguments: ❖ @Controller("/hello") ❖ @Get("/profile “) ❖ Optionally, routes can be expressed programmatically using the RouteBuilder interface ❖ GroovyRouteBuilder provides an expressive DSL for routes (similar to Grails UrlMappings) 19 Controller Routes
  • 20. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 20 Controller Routes ❖ Annotation-based routes
  • 21. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 21 Controller Routes ❖ GroovyRouteBuilder
  • 22. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 22 @MicronautTest & Spock ❖ Micronaut is test-framework agnostic - no special tooling required ❖ E.g, JUnit, Spock ❖ Because of Micronaut’s fast startup time, many developers prefer integration tests ❖ @MicronautTest automatically starts up the application context for the test run, and shuts it down cleanly
  • 23. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 23 @MicronautTest & Spock
  • 24. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 24 @MicronautTest & Spock
  • 25. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 25 @MicronautTest & Spock
  • 26. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 26 @MicronautTest & Spock
  • 27. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 27 @MicronautTest & Spock
  • 28. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 28 Micronaut and GORM ❖ GORM is the persistence framework pioneered by the Grails framework - https://gorm.grails.org ❖ GORM provides expressive querying, persistence and domain modeling features, including validation, multi-tenancy, and more ❖ When configured with Groovy support, Micronaut apps can leverage GORM’s powerful features in a comparatively lightweight manner
  • 29. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 29 Micronaut and GORM Dependency Description micronaut- hibernate-gorm Configures GORM for Hibernate for Groovy applications micronaut-mongo- gorm Configures GORM for Mongo DB for Groovy applications micronaut-neo4j- gorm Configures GORM for Mongo DB for Groovy applications
  • 30. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 30 Adding GORM to Micronaut ❖ Using Micronaut Launch or the CLI command feature-diff, you can generate a delta showing how to add a feature, like hibernate-gorm
  • 31. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 31 Adding GORM to Micronaut ❖ Add GORM and JDBC dependencies - also a database driver (H2 in this demo)
  • 32. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com Configuring Datasources ❖ Datasource configuration ❖ Standard Hibernate/JDBC configuration properties - database credentials, dialect, etc ❖ Can configure multiple datasources
  • 33. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com Enabling Entity-scanning ❖ Application class needs to be modified ❖ Application context is started up using the builder pattern - the packages() method species the package under which entities are defined
  • 34. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 34 Creating Domain Classes (aka Entities) ❖ A Domain Class / Entity can be a simple POGO annotated with @Entity ❖ Class name will be mapped as database table name (by convention) ❖ Properties of the class will be mapped to columns in the database table
  • 35. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 35 Creating Domain Classes (aka Entities) ❖ Additional data-mapping features (like validation) can be added by implementing the GormEntity<> trait
  • 36. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 36 GORM Data Services in Micronaut
  • 37. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 37 GORM Data Services in Micronaut
  • 38. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 38 GORM Multi-tenancy https://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy
  • 39. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 39 GORM Multi-tenancy https://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy
  • 40. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 40 GORM Multi-tenancy https://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy
  • 41. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 41 GORM Multi-tenancy https://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy
  • 42. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 42 GORM Multi-tenancy Modes https://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy Modes Description Isolation DATABASE Separate database with a separate connection pool is used to store each tenants data. HIGHEST SCHEMA The same database, but different schemas are used to store each tenants’ data. HIGH DISCRIMINATOR The same database is used with a discriminator used to partition and isolate data. LOW
  • 43. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 43 GORM Multi-tenancy Tenant Resolvers https://gorm.grails.org/latest/hibernate/manual/index.html#multiTenancy Name Description CookieTenantResolver Removes the current tenant from an HTTP cookie FixedTenantResolver Resolves against a fixed tenant id HttpHeaderTenantResolver Resolves the current tenant from the request HTTP Header PrincipalTenantResolver Resolves the current tenant from the authenticated username SessionTenantResolver Resolves the current tenant from the HTTP Session SubdomainTenantResolver Resolves the tenant id from the subdomain SystemPropertyTenantResolver Resolves the tenant id from a system property
  • 44. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 44 GORM Multi-tenancy: Specify tenantId
  • 45. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 45 GORM Multi-tenancy Transformations (Annotations) Transformation Description @CurrentTenant Resolve the current tenant for the context of a class or method @Tenant Use a specifc tenant for the context of a class or method @WithoutTenant Execute logic without a specific tentnat (using the default connection)
  • 46. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 46
  • 47. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 47 Micronaut and Grails ❖ Grails is a rapid-application Java web-framework, based on Groovy and Spring Boot ❖ Since Grails 4, Grails applications include a Micronaut application context, allowing Micronaut features and libraries to be integrated with Grails apps ❖ Micronaut HTTP Client & Grails: https://guides.grails.org/ grails-micronaut-http/guide/index.html ❖ Micronaut Kafka & Grails: https://guides.grails.org/grails- micronaut-kafka/guide/index.html
  • 48. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com ❖ Micronaut supports Groovy for writing serverless functions in environments like AWS Lambda, Oracle Cloud, Microsoft Azure, & Google Cloud Platform. ❖ You can deploy “pure” functions (invoked by events in the platform) or lightweight “HTTP functions” (with controllers, REST endpoints, etc) 48 Micronaut and Groovy: Serverless Functions
  • 49. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 49 Micronaut and Groovy: Serverless Functions https://micronaut-projects.github.io/ micronaut-gcp/latest/guide/
  • 50. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 50 Micronaut and Groovy: Serverless Functions https://micronaut-projects.github.io/ micronaut-aws/latest/guide/
  • 51. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 51 Micronaut and Groovy: Serverless Functions https://micronaut-projects.github.io/ micronaut-azure/latest/guide/
  • 52. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 52 Micronaut and Groovy: Serverless Functions https://micronaut-projects.github.io/ micronaut-oracle-cloud/latest/guide/
  • 53. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 53 Micronaut and Groovy: CLI Apps ❖ Micronaut supports creation of Command Line Applications using the picocli library (https://picocli.info/) ❖ CLI apps can be created using Groovy as well! ❖ Apps can utilize dependency injection, HTTP clients, & more ❖ Docs: https://micronaut-projects.github.io/micronaut- picocli/latest/guide/
  • 54. © 2022, Object Computing, Inc. (OCI). All rights reserved. objectcomputing.com 54 Micronaut and Groovy: CLI Apps
  • 55. objectcomputing.com © 2022, Object Computing, Inc. (OCI). All rights reserved. No part of these notes may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior, written permission of Object Computing, Inc. (OCI) Zachary Klein, Principal Software Engineer, 2GM Team