Top Banner
© 2012 ADAPTIVE COMPUTING, INC. 1 Building an Integration Platform with Grails and Gradle Brian Saville Adaptive Computing 18 Oct 2012
44

Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

May 17, 2015

Download

Technology

bksaville

In this presentation (given at SpringOne 2GX in October 2012), I present a pattern to use for plugin frameworks as well as our own pattern we used in developing a plugin framework for our grails application, Moab Web Services. The integration platform consists of a plugin framework in MWS, and a rapid SDK developed in Gradle.
http://adaptivecomputing.com/
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 1

Building an Integration Platform with Grails and Gradle

Brian Saville

Adaptive Computing

18 Oct 2012

Page 2: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 2 © 2012 ADAPTIVE COMPUTING, INC. 2

Me

Brian Saville

[email protected]

Twitter: @bksaville

Plugins:

▪ External Config Reload

▪ Spring Security OAuth2 Provider

▪ New Doc

▪ Artefact Messaging

▪ Contributor on Others

Page 3: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 3 © 2012 ADAPTIVE COMPUTING, INC. 3

Adaptive Computing Highlights

▪ Leaders in cloud and HPC software

▪ 10+ years developing Moab® technology

▪ Leadership team w/ $1.5B+ in exits

▪ 15 issued patents, 34 pending

▪ Backed by top-tier investors:

▪ Global Partnerships: HP, IBM, SGI, Cray, Microsoft, etc.

▪ Over 200 customers such as:

Page 4: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 4 © 2012 ADAPTIVE COMPUTING, INC. 4

Moab Web Services

▪ What is it?

▪ Grails 2.0.3

▪ RESTful Web Services

▪ Business Logic

▪ Plugin Framework (Beta)

▪ What does it do?

▪ Wraps C Core Product

▪ Integrates “old world” non-standardized API with “new world” APIs

Page 5: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 5 © 2012 ADAPTIVE COMPUTING, INC. 5

Atypical Grails Deployment

▪ MWS Deployed on Client Servers

▪ WAR file

▪ Tomcat 6

▪ Oracle/Sun JDK 6

▪ MongoDB 2.0+

▪ Customization on Client Sites

Page 6: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 6 © 2012 ADAPTIVE COMPUTING, INC. 6

Integration Platform

▪ Reasons

▪ Extensibility

▪ In-House Developers

▪ External Developers

▪ Dynamic Updates to Application Behavior

▪ Why Create Our Own?

▪ Consists of Plugin Framework (Grails) and SDK (Gradle)

Page 7: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 7 © 2012 ADAPTIVE COMPUTING, INC. 7

Page 8: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 8 © 2012 ADAPTIVE COMPUTING, INC. 8

Why Do We Care?

▪ Integration Platform Developers

1) Provides a standard pattern to follow

2) Identifies required and optional framework components

3) Treads ground for new integration platforms

4) Identifies hurdles and potential problems

▪ Grails/Gradle Users

1) New advanced application of Grails and Gradle

2) Grails plugin framework can be evaluated with the pattern

3) Gradle plugin framework can be evaluated with the pattern

Page 9: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 9

Integration Platform Pattern

Page 10: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 10 © 2012 ADAPTIVE COMPUTING, INC. 10

The Pattern

▪ Plugin Identification

▪ Lifecycle and State Management

▪ Dependency Management

▪ Extend Application

▪ Services

▪ Configuration Management

▪ Lifecycle Hooks

▪ Metadata

▪ Development (SDK)

Page 11: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 11 © 2012 ADAPTIVE COMPUTING, INC. 11

Plugin Identification

▪ By Convention

▪ Class names

▪ Packaging (JAR, Java or Groovy file)

▪ By Interface(s)

▪ IPlugin

▪ Activator (OSGI)

▪ By Configuration

▪ MANIFEST.MF

Page 12: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 12 © 2012 ADAPTIVE COMPUTING, INC. 12

Lifecycle and State Management

▪ Concept of State

▪ Stopped and started

▪ More states optional

▪ Control Over State

▪ How to stop, how to start?

▪ How to add plugin? (Removal not required)

Page 13: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 13 © 2012 ADAPTIVE COMPUTING, INC. 13

Dependency Management

▪ Internal Dependencies

▪ Build process

▪ Consider IDE

▪ External Dependencies

▪ Fat JARs

▪ Dependency resolution when adding

Page 14: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 14 © 2012 ADAPTIVE COMPUTING, INC. 14

Extend Application

▪ Different in Each Case

▪ Custom Services

▪ Web services

▪ Internal services

▪ Provide Resources

▪ Report or Persist Data

▪ …

Page 15: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 15 © 2012 ADAPTIVE COMPUTING, INC. 15

Services

▪ Stateless Services

▪ Control services

▪ Logging

▪ Dependent Services

▪ Configuration

▪ Data persistence

Page 16: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 16 © 2012 ADAPTIVE COMPUTING, INC. 16

Configuration Management

▪ Access Application Configuration

▪ (Optional) Access Private Configuration

▪ Preferences

Page 17: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 17 © 2012 ADAPTIVE COMPUTING, INC. 17

Lifecycle Hooks

▪ State Transition Hooks

▪ Starting and stopping

▪ Before, after, and/or during transition?

▪ Other Hooks

▪ Setup and configuration

▪ How Are They Defined?

▪ Convention

▪ Interfaces (Configuration)

Page 18: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 18 © 2012 ADAPTIVE COMPUTING, INC. 18

Development (SDK)

▪ Dependency Management

▪ Build with internal dependencies

▪ Include external dependencies

▪ Testing

▪ Unit

▪ Integration

▪ Deployment

▪ (Optional) RAD Tool

Page 19: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 19 © 2012 ADAPTIVE COMPUTING, INC. 19

Metadata

▪ By Convention

▪ By Configuration

▪ Types of Metadata

▪ Project/Plugin information

▪ Author information

▪ (Optional) Configuration constraints

▪ (Optional) Dependency information

Page 20: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 20 © 2012 ADAPTIVE COMPUTING, INC. 20

Non-Essential Pattern Elements

▪ Security

▪ Deployment System/Central Repository

▪ Inversion of Control (IoC) Container

▪ Data Persistence

▪ Individual to Plugin

▪ Application Aware

▪ Common Clients and Parsers

▪ XML/JSON

Page 21: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 21 © 2012 ADAPTIVE COMPUTING, INC. 21

Non-Essential Pattern Elements Cont.

▪ Events – Built-In and Custom

▪ Decomposition of Logic

▪ Messaging (i18n)

▪ Startup/Shutdown Concerns

▪ Scheduled Jobs

▪ Inter-Project Dependencies

▪ Environment Handling

Page 22: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 22 © 2012 ADAPTIVE COMPUTING, INC. 22

Grails Plugins

▪ What is Missing?

▪ Standardized configuration management

▪ Platform core is addressing this

▪ Framework is Mature

Page 23: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 23

MWS Integration Platform

Page 24: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 24 © 2012 ADAPTIVE COMPUTING, INC. 24

Introduction

▪ Plugin Type – Plugin Definition Class

▪ One per Class

▪ Stored as Groovy or JAR files

▪ Internally is a Grails artefact

▪ Plugin Instance

▪ Multiple instances for a single plugin type possible

▪ Internally is DB entry and Spring Bean

▪ Dynamic (Running Application)

Page 25: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 25 © 2012 ADAPTIVE COMPUTING, INC. 25

Plugin Identification

▪ “Ends With” Class Names

▪ Plugin Types

▪ Translators

▪ Autowired Classes

▪ Spring Annotated Classes

▪ @Component

▪ @Autowired

▪ @Resource

▪ @Scope

Page 26: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 26 © 2012 ADAPTIVE COMPUTING, INC. 26

Lifecycle and State Management

▪ States

▪ Started, Stopped, Paused

▪ Plugin Control Service

▪ Start, stop, pause, resume

▪ Adding Plugins

▪ User Interface

▪ REST API

Page 27: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 27 © 2012 ADAPTIVE COMPUTING, INC. 27

Dependency Management

▪ SDK for Build Dependencies

▪ Grails JARs

▪ Spring JARs

▪ Support Fat JARs

▪ Dependencies Resolved Before Adding

Page 28: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 28 © 2012 ADAPTIVE COMPUTING, INC. 28

Extend Application

▪ Reporting – Application Aware Data Persistence

▪ Expose Custom Web Services

▪ Methods by convention

▪ Almost full REST API

▪ Unsecured annotation

▪ Routed by URL mappings

▪ Built-In Events by Convention

Page 29: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 29 © 2012 ADAPTIVE COMPUTING, INC. 29

Services

▪ Logging (Similar to Grails)

▪ Data Persistence Services

▪ Control Service

▪ Individual Datastore Service

▪ SSL Service - SSLSocketFactory

▪ not-yet-commons-ssl with PEM files

▪ In memory keystore

▪ Internal REST Service

▪ Request and response with optional attributes

▪ Returns object with response, easy access properties, parsed data

Page 30: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 30 © 2012 ADAPTIVE COMPUTING, INC. 30

Configuration Management

▪ Application Configuration

▪ Grails application bean

▪ Plugin Private Configuration

▪ Metaclass injected “config” property

Page 31: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 31 © 2012 ADAPTIVE COMPUTING, INC. 31

Lifecycle Hooks

▪ Implemented as Methods on Plugin Types

▪ beforeStart, afterStart, beforeStop, afterStop

▪ configure

▪ If Not Implemented, Inject Empty Methods

▪ Called from Control Service

Page 32: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 32 © 2012 ADAPTIVE COMPUTING, INC. 32

Metadata

▪ Convention

▪ Plugin project compiled class included in JAR

▪ Ends with “Project”

▪ Configuration

▪ Properties on plugin project class

▪ =~ Grails Plugin Class

Page 33: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 33 © 2012 ADAPTIVE COMPUTING, INC. 33

Metadata – Dynamic Configuration Constraints

▪ Configuration is Dynamic Map

▪ Utilize Grails Constraints and Conventions

▪ Redo min/max to remove value checking

▪ Add custom plugin constrained property (CP)

▪ Add custom plugin CP builder

▪ Add Custom Constraints

▪ Type (Class) – Infer if not specified

▪ Default value

▪ Required (nullable)

▪ Scriptable URL (exec, file, http)

▪ Customized validator with additional methods

Page 34: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 34 © 2012 ADAPTIVE COMPUTING, INC. 34

i18n Messaging

▪ Message Property Files

▪ Included in JAR

▪ Loaded with individual message source per project

▪ Message Method Injected on Plugins

▪ Used to Resolve Constraint Errors

▪ Not quite multi-lingual

Page 35: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 35 © 2012 ADAPTIVE COMPUTING, INC. 35

Development (SDK)

▪ Commons JAR

▪ Interfaces, classes, constants, annotations

▪ Testing JAR – TestFor

▪ Gradle Project

▪ Dependencies

▪ Testing and Commons

▪ Creates fat JARs (lib and resolved deps)

▪ Additional build tasks

▪ Handles i18n property files

▪ Cobertura code coverage reports

▪ Unit testing with Spock

Page 36: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 36 © 2012 ADAPTIVE COMPUTING, INC. 36

Development (SDK) - Commands

▪ Gradle

▪ create-project -Pproject-name=MyProject

▪ create-plugin -Pplugin-name=sample.MyPlugin

▪ test

▪ upload-test -Pmws.url=http://localhost/mws

▪ (Eventually) Python CLI Wrapper

▪ mplugin create-project MyProject

▪ mplugin create-plugin sample.MyPlugin

▪ mplugin test

▪ mplugin upload --url=http://localhost:8080/mws

Page 37: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 37 © 2012 ADAPTIVE COMPUTING, INC. 37

Non-Essential Pattern Elements Status

▪ Security - Yes

▪ Central Repository – No

▪ IoC Container – Spring

▪ Data Persistence – Individual Datastore and Application Aware

▪ Common Clients and Parsers – Client Decided and Groovy

▪ Events – Built-In Only

▪ Decomposition – IoC with Conventions and Annotations

Page 38: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 38 © 2012 ADAPTIVE COMPUTING, INC. 38

Non-Essential Pattern Elements Status Cont.

▪ Startup/Shutdown Concerns – Initial Plugins

▪ Scheduled Jobs – Quartz

▪ Inter-Project Dependencies – No

▪ Environment Handling – Application Configuration Parameter

Page 39: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 39 © 2012 ADAPTIVE COMPUTING, INC. 39

Comparison to Grails Plugins

Concept MWS Plugins Grails Plugins

RAD Tool Partial X

Configuration X No Standard

Integration Tests X

Multiple Instances

X

Custom REST Partial X

Metadata Partial X

Languages Groovy Groovy & Java

Dynamic X

Lifecycle X X

i18n Partial X

Page 40: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 40 © 2012 ADAPTIVE COMPUTING, INC. 40

Demo

Page 41: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 41

Problems Encountered

Page 42: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 42 © 2012 ADAPTIVE COMPUTING, INC. 42

JVM ClassLoaders

▪ Separating ClassLoaders

▪ Locking JARs

▪ Fat JARs

▪ Unresolved: Reloading Typed References

Page 43: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 43 © 2012 ADAPTIVE COMPUTING, INC. 43

Language Support

▪ Groovy – Works Great

▪ Java – Interfaces and Metaclass Issues

Page 44: Building an Integration Platform with Gradle/Grails - Spring 2GX 2012

© 2012 ADAPTIVE COMPUTING, INC. 44

Questions?