SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle
-
Upload
adaptivecomputing -
Category
Documents
-
view
226 -
download
0
Transcript of SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle
![Page 1: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/1.jpg)
© 2012 ADAPTIVE COMPUTING, INC. 1
Building an Integration Platform with Grails and Gradle
Brian Saville
Adaptive Computing
18 Oct 2012
![Page 2: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/2.jpg)
© 2012 ADAPTIVE COMPUTING, INC. 2 © 2012 ADAPTIVE COMPUTING, INC. 2
Me
Brian Saville
Twitter: @bksaville
Plugins:
▪ External Config Reload
▪ Spring Security OAuth2 Provider
▪ New Doc
▪ Artefact Messaging
▪ Contributor on Others
![Page 3: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/3.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/4.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/5.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/6.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/7.jpg)
© 2012 ADAPTIVE COMPUTING, INC. 7 © 2012 ADAPTIVE COMPUTING, INC. 7
![Page 8: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/8.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/9.jpg)
© 2012 ADAPTIVE COMPUTING, INC. 9
Integration Platform Pattern
![Page 10: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/10.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/11.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/12.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/13.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/14.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/15.jpg)
© 2012 ADAPTIVE COMPUTING, INC. 15 © 2012 ADAPTIVE COMPUTING, INC. 15
Services
▪ Stateless Services
▪ Control services
▪ Logging
▪ Dependent Services
▪ Configuration
▪ Data persistence
![Page 16: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/16.jpg)
© 2012 ADAPTIVE COMPUTING, INC. 16 © 2012 ADAPTIVE COMPUTING, INC. 16
Configuration Management
▪ Access Application Configuration
▪ (Optional) Access Private Configuration
▪ Preferences
![Page 17: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/17.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/18.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/19.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/20.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/21.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/22.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/23.jpg)
© 2012 ADAPTIVE COMPUTING, INC. 23
MWS Integration Platform
![Page 24: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/24.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/25.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/26.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/27.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/28.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/29.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/30.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/31.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/32.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/33.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/34.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/35.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/36.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/37.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/38.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/39.jpg)
© 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: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/40.jpg)
© 2012 ADAPTIVE COMPUTING, INC. 40 © 2012 ADAPTIVE COMPUTING, INC. 40
Demo
![Page 41: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/41.jpg)
© 2012 ADAPTIVE COMPUTING, INC. 41
Problems Encountered
![Page 42: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/42.jpg)
© 2012 ADAPTIVE COMPUTING, INC. 42 © 2012 ADAPTIVE COMPUTING, INC. 42
JVM ClassLoaders
▪ Separating ClassLoaders
▪ Locking JARs
▪ Fat JARs
▪ Unresolved: Reloading Typed References
![Page 43: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/43.jpg)
© 2012 ADAPTIVE COMPUTING, INC. 43 © 2012 ADAPTIVE COMPUTING, INC. 43
Language Support
▪ Groovy – Works Great
▪ Java – Interfaces and Metaclass Issues
![Page 44: SpringOne 2GX 2012 - Building an Integration Platform with Grails and Gradle](https://reader034.fdocuments.in/reader034/viewer/2022042611/58eedb5a1a28ab8b718b4571/html5/thumbnails/44.jpg)
© 2012 ADAPTIVE COMPUTING, INC. 44
Questions?