SlideShare a Scribd company logo
The Griffon Framework
An Investigation by
Jim Kirkbride
What is this Griffon thing anyway?
What Is Griffon?
● Desktop Application Framework
● Takes after Grails
● MVC-based
● Groovy-based
● Vastly simplifies writing Swing-based
applications
Why Not Just Use Swing?
● Complex widget hierarchy
● Difficult to separate out business logic from
view logic
● Difficult to properly manage threading
● Difficult to test
● Wouldn’t you rather write Groovy?
Getting Started
● gvm install griffon <version>
● set GRIFFON_HOME
● add GRIFFON_HOME/bin to path
● griffon create-app <app name>
● You’re in business!
Griffon Project Layout
● Application.groovy
○ App title
○ Start-up Groups
○ MVC Groups
● BuildConfig.groovy
○ Environment settings
○ Jar Signing
○ Dependency resolution
Configuration
Configuration Cont.
● Builder.groovy
○ SwingBuilder configuration
● Config.groovy
○ Log4j configuration
○ Global configuration
Application LifeCycle
● Initialize
● Startup
● Ready
● Shutdown
● Stop
About MVC...
MVC
Griffon MVC
● Nothing more than beans with “bindable”
properties
● Uses the @Bindable AST transformation
● Model != “Domain”!
● PropertyChange listeners
Model
View
● Uses the SwingBuilder library to create
layouts
● Uses model properties for two-way binding
● Converters
● Validators
Controller
● Actions defined as closures
● Manipulates model values
● Used to define threading
Services
● Just like Grails services
● Injectable
● No transactional capabilities
Application Events
● Built-in events
● Custom Events
What About Testing?
● GriffonUnitTestCase
● Access to Mock objects
● Integration and Unit testing
● Decidedly lacking in Acceptance Testing
○ FEST Plugin
Lets talk about everyone’s
favorite topic…
Threading!
Threading
● Swing uses the “Event Dispatch Thread”
● Makes you write ugly code using
SwingWorker
● Is completely simplified in Griffon!
Threading Cont.
● On the EDT:
○ execInsideUISync
○ execInsideUIAsync
● Outside the EDT:
○ execOutsideUI
● isUIThread
● execFuture
Eco System
● Griffon still in development
● Documentation is spotty at best, downright
wrong at worst
● Andres is very active
● Griffon team is really responsive
● Tons of plugins (very hit or miss)
Thanks!
Links
Griffon
http://griffon.codehaus.org/
Griffon Guide (Latest)
http://griffon.codehaus.org/guide/latest/guide/index.html
Jim Shingler's Presentation on Griffon
http://www.slideshare.net/jshingler/griffon-in-front-grails-in-
back-presentation
Griffon Demo
https://github.com/jameskbride/griffon-demo
Vending Machine Kata Implementation Example
https://github.com/jameskbride/vendingMachineGriffonDemo
Griffon Plugin Directory
http://artifacts.griffon-framework.org/category/all/plugins
Griffon ActiveJDBC Plugin
http://griffon.codehaus.org/Activejdbc+Plugin
Griffon GlazedLists Plugin
http://griffon.codehaus.org/Glazedlists+Plugin
Griffon FEST Plugin
http://griffon.codehaus.org/Fest+Plugin
https://github.com/griffon/griffon-fest-plugin/
Andres Almiray’s Blog
http://www.jroller.com/aalmiray/
Links Cont.
Books
Griffon In Action
http://www.amazon.com/Griffon-Action-Andres-
Almiray/dp/1935182234/ref=sr_1_1?
ie=UTF8&qid=1404053485&sr=8-1&keywords=griffon
Images
Griffon Logo
http://media.xircles.codehaus.
org/_projects/griffon/_logos/medium.png
Yarn Image
http://2.bp.blogspot.com/-
DwD6bi3l80E/TpeLW8T9XUI/AAAAAAAATi8/PiyqmV6YAEQ/
s1600/yarn.jpg

More Related Content

What's hot

WPE: Current Status and Future (Web Engines Hackfest 2018)
WPE: Current Status and Future (Web Engines Hackfest 2018)WPE: Current Status and Future (Web Engines Hackfest 2018)
WPE: Current Status and Future (Web Engines Hackfest 2018)
Igalia
 
It is easy contributing to open source - JCON 2020
It is easy contributing to open source - JCON 2020It is easy contributing to open source - JCON 2020
It is easy contributing to open source - JCON 2020
César Hernández
 
45 Tools to Boost Your Front-End
45 Tools to Boost Your Front-End45 Tools to Boost Your Front-End
45 Tools to Boost Your Front-End
Nicolas PENNEC
 
Ivan Pashko ITEM 2018
Ivan Pashko ITEM 2018Ivan Pashko ITEM 2018
Ivan Pashko ITEM 2018
ITEM
 
Angular intro
Angular introAngular intro
Angular intro
Janarthan Paramanandam
 
Build, deploy and scale: Django, GraphQL and SPA (DjangoCon EU 2021)
Build, deploy and scale: Django, GraphQL and SPA  (DjangoCon EU 2021)Build, deploy and scale: Django, GraphQL and SPA  (DjangoCon EU 2021)
Build, deploy and scale: Django, GraphQL and SPA (DjangoCon EU 2021)
Dhilipsiva DS
 
Introduction to Grails
Introduction to GrailsIntroduction to Grails
Introduction to Grails
Hiten Pratap Singh
 
Avoiding common pitfalls of datetime from a webapp's perspective
Avoiding common pitfalls of datetime from a webapp's perspectiveAvoiding common pitfalls of datetime from a webapp's perspective
Avoiding common pitfalls of datetime from a webapp's perspective
indradhanush92
 
The Self-Service Developer - GOTOCon CPH
The Self-Service Developer - GOTOCon CPHThe Self-Service Developer - GOTOCon CPH
The Self-Service Developer - GOTOCon CPH
Laszlo Fogas
 
Building GitLab
Building GitLabBuilding GitLab
Building GitLab
🌍 Job van der Voort
 
From a native app to a webapp using Node.js and emscripten
From a native app to a webapp using Node.js and emscriptenFrom a native app to a webapp using Node.js and emscripten
From a native app to a webapp using Node.js and emscripten
Florian Rival
 
BarCamp CR 2014 - Python para web
BarCamp CR 2014 - Python para webBarCamp CR 2014 - Python para web
BarCamp CR 2014 - Python para web
barcampcr
 
Contributing to Koha
Contributing to KohaContributing to Koha
Contributing to Koha
Libriotech
 
Atwix - Ярослав Рогоза
Atwix - Ярослав РогозаAtwix - Ярослав Рогоза
Atwix - Ярослав Рогоза
meet_magento
 
Introduction to DevOps with Visual Studio Team Services -.Net Conf Mx 2018
Introduction to DevOps with Visual Studio Team Services -.Net Conf Mx 2018Introduction to DevOps with Visual Studio Team Services -.Net Conf Mx 2018
Introduction to DevOps with Visual Studio Team Services -.Net Conf Mx 2018
Vicente Gerardo Guzman Lucio
 
Asynchronous programming with Functional Java and comparison with Scala
Asynchronous programming with Functional Java and comparison with ScalaAsynchronous programming with Functional Java and comparison with Scala
Asynchronous programming with Functional Java and comparison with Scala
Knoldus Inc.
 
GitLab: One Tool for Software Development (2018-02-06 @ SEIUM, Braga, Portugal)
GitLab: One Tool for Software Development (2018-02-06 @ SEIUM, Braga, Portugal)GitLab: One Tool for Software Development (2018-02-06 @ SEIUM, Braga, Portugal)
GitLab: One Tool for Software Development (2018-02-06 @ SEIUM, Braga, Portugal)
Pedro Moreira da Silva
 
Git Watch
Git WatchGit Watch
Towards component based web UI with ReactJS
Towards component based web UI with ReactJSTowards component based web UI with ReactJS
Towards component based web UI with ReactJS
Oliver Häger
 
Jump into React-Native (Class 6)
Jump into React-Native  (Class 6)Jump into React-Native  (Class 6)
Jump into React-Native (Class 6)
Waqqas Jabbar
 

What's hot (20)

WPE: Current Status and Future (Web Engines Hackfest 2018)
WPE: Current Status and Future (Web Engines Hackfest 2018)WPE: Current Status and Future (Web Engines Hackfest 2018)
WPE: Current Status and Future (Web Engines Hackfest 2018)
 
It is easy contributing to open source - JCON 2020
It is easy contributing to open source - JCON 2020It is easy contributing to open source - JCON 2020
It is easy contributing to open source - JCON 2020
 
45 Tools to Boost Your Front-End
45 Tools to Boost Your Front-End45 Tools to Boost Your Front-End
45 Tools to Boost Your Front-End
 
Ivan Pashko ITEM 2018
Ivan Pashko ITEM 2018Ivan Pashko ITEM 2018
Ivan Pashko ITEM 2018
 
Angular intro
Angular introAngular intro
Angular intro
 
Build, deploy and scale: Django, GraphQL and SPA (DjangoCon EU 2021)
Build, deploy and scale: Django, GraphQL and SPA  (DjangoCon EU 2021)Build, deploy and scale: Django, GraphQL and SPA  (DjangoCon EU 2021)
Build, deploy and scale: Django, GraphQL and SPA (DjangoCon EU 2021)
 
Introduction to Grails
Introduction to GrailsIntroduction to Grails
Introduction to Grails
 
Avoiding common pitfalls of datetime from a webapp's perspective
Avoiding common pitfalls of datetime from a webapp's perspectiveAvoiding common pitfalls of datetime from a webapp's perspective
Avoiding common pitfalls of datetime from a webapp's perspective
 
The Self-Service Developer - GOTOCon CPH
The Self-Service Developer - GOTOCon CPHThe Self-Service Developer - GOTOCon CPH
The Self-Service Developer - GOTOCon CPH
 
Building GitLab
Building GitLabBuilding GitLab
Building GitLab
 
From a native app to a webapp using Node.js and emscripten
From a native app to a webapp using Node.js and emscriptenFrom a native app to a webapp using Node.js and emscripten
From a native app to a webapp using Node.js and emscripten
 
BarCamp CR 2014 - Python para web
BarCamp CR 2014 - Python para webBarCamp CR 2014 - Python para web
BarCamp CR 2014 - Python para web
 
Contributing to Koha
Contributing to KohaContributing to Koha
Contributing to Koha
 
Atwix - Ярослав Рогоза
Atwix - Ярослав РогозаAtwix - Ярослав Рогоза
Atwix - Ярослав Рогоза
 
Introduction to DevOps with Visual Studio Team Services -.Net Conf Mx 2018
Introduction to DevOps with Visual Studio Team Services -.Net Conf Mx 2018Introduction to DevOps with Visual Studio Team Services -.Net Conf Mx 2018
Introduction to DevOps with Visual Studio Team Services -.Net Conf Mx 2018
 
Asynchronous programming with Functional Java and comparison with Scala
Asynchronous programming with Functional Java and comparison with ScalaAsynchronous programming with Functional Java and comparison with Scala
Asynchronous programming with Functional Java and comparison with Scala
 
GitLab: One Tool for Software Development (2018-02-06 @ SEIUM, Braga, Portugal)
GitLab: One Tool for Software Development (2018-02-06 @ SEIUM, Braga, Portugal)GitLab: One Tool for Software Development (2018-02-06 @ SEIUM, Braga, Portugal)
GitLab: One Tool for Software Development (2018-02-06 @ SEIUM, Braga, Portugal)
 
Git Watch
Git WatchGit Watch
Git Watch
 
Towards component based web UI with ReactJS
Towards component based web UI with ReactJSTowards component based web UI with ReactJS
Towards component based web UI with ReactJS
 
Jump into React-Native (Class 6)
Jump into React-Native  (Class 6)Jump into React-Native  (Class 6)
Jump into React-Native (Class 6)
 

Similar to Griffon demo

Griffon for the Enterprise
Griffon for the EnterpriseGriffon for the Enterprise
Griffon for the Enterprise
James Williams
 
Behaviour Testing and Continuous Integration with Drupal
Behaviour Testing and Continuous Integration with DrupalBehaviour Testing and Continuous Integration with Drupal
Behaviour Testing and Continuous Integration with Drupal
smithmilner
 
Passing the Joel Test in the PHP World (phpbnl10)
Passing the Joel Test in the PHP World (phpbnl10)Passing the Joel Test in the PHP World (phpbnl10)
Passing the Joel Test in the PHP World (phpbnl10)
Lorna Mitchell
 
Evolving to Cloud-Native - Anand Rao
Evolving to Cloud-Native - Anand RaoEvolving to Cloud-Native - Anand Rao
Evolving to Cloud-Native - Anand Rao
VMware Tanzu
 
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
Haggai Philip Zagury
 
Monitoring in the cloud with Puppet
Monitoring in the cloud with PuppetMonitoring in the cloud with Puppet
Monitoring in the cloud with Puppet
Kris Buytaert
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
Gbolahan Alli
 
CI and other tools for feature branch development
CI and other tools for feature branch developmentCI and other tools for feature branch development
CI and other tools for feature branch development
Yuriy Gerasimov
 
An intro to git
An intro to gitAn intro to git
An intro to git
Dan Shrader
 
How to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipelineHow to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipeline
ElasTest Project
 
Grails 101
Grails 101Grails 101
Grails 101
Lim Kin
 
Multiplier Effect: Case Studies in Distributions for Publishers
Multiplier Effect: Case Studies in Distributions for PublishersMultiplier Effect: Case Studies in Distributions for Publishers
Multiplier Effect: Case Studies in Distributions for Publishers
Jon Peck
 
Creating a reasonable project boilerplate
Creating a reasonable project boilerplateCreating a reasonable project boilerplate
Creating a reasonable project boilerplate
Stanislav Petrov
 
Plone Intranet under the hood
Plone Intranet under the hoodPlone Intranet under the hood
Plone Intranet under the hood
Guido Stevens
 
Xamarin.android memory management gotchas
Xamarin.android memory management gotchasXamarin.android memory management gotchas
Xamarin.android memory management gotchas
Alec Tucker
 
Best Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentBest Practices in PHP Application Deployment
Best Practices in PHP Application Deployment
Shahar Evron
 
GWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO ToolsGWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO Tools
barciszewski
 
Griffon: Swing just got fun again
Griffon: Swing just got fun againGriffon: Swing just got fun again
Griffon: Swing just got fun again
James Williams
 
You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)
Igalia
 
Ext GWT - Overview and Implementation Case Study
Ext GWT - Overview and Implementation Case StudyExt GWT - Overview and Implementation Case Study
Ext GWT - Overview and Implementation Case Study
Avi Perez
 

Similar to Griffon demo (20)

Griffon for the Enterprise
Griffon for the EnterpriseGriffon for the Enterprise
Griffon for the Enterprise
 
Behaviour Testing and Continuous Integration with Drupal
Behaviour Testing and Continuous Integration with DrupalBehaviour Testing and Continuous Integration with Drupal
Behaviour Testing and Continuous Integration with Drupal
 
Passing the Joel Test in the PHP World (phpbnl10)
Passing the Joel Test in the PHP World (phpbnl10)Passing the Joel Test in the PHP World (phpbnl10)
Passing the Joel Test in the PHP World (phpbnl10)
 
Evolving to Cloud-Native - Anand Rao
Evolving to Cloud-Native - Anand RaoEvolving to Cloud-Native - Anand Rao
Evolving to Cloud-Native - Anand Rao
 
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
DevOpsDays Tel Aviv DEC 2022 | Building A Cloud-Native Platform Brick by Bric...
 
Monitoring in the cloud with Puppet
Monitoring in the cloud with PuppetMonitoring in the cloud with Puppet
Monitoring in the cloud with Puppet
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
CI and other tools for feature branch development
CI and other tools for feature branch developmentCI and other tools for feature branch development
CI and other tools for feature branch development
 
An intro to git
An intro to gitAn intro to git
An intro to git
 
How to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipelineHow to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipeline
 
Grails 101
Grails 101Grails 101
Grails 101
 
Multiplier Effect: Case Studies in Distributions for Publishers
Multiplier Effect: Case Studies in Distributions for PublishersMultiplier Effect: Case Studies in Distributions for Publishers
Multiplier Effect: Case Studies in Distributions for Publishers
 
Creating a reasonable project boilerplate
Creating a reasonable project boilerplateCreating a reasonable project boilerplate
Creating a reasonable project boilerplate
 
Plone Intranet under the hood
Plone Intranet under the hoodPlone Intranet under the hood
Plone Intranet under the hood
 
Xamarin.android memory management gotchas
Xamarin.android memory management gotchasXamarin.android memory management gotchas
Xamarin.android memory management gotchas
 
Best Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentBest Practices in PHP Application Deployment
Best Practices in PHP Application Deployment
 
GWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO ToolsGWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO Tools
 
Griffon: Swing just got fun again
Griffon: Swing just got fun againGriffon: Swing just got fun again
Griffon: Swing just got fun again
 
You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)
 
Ext GWT - Overview and Implementation Case Study
Ext GWT - Overview and Implementation Case StudyExt GWT - Overview and Implementation Case Study
Ext GWT - Overview and Implementation Case Study
 

Recently uploaded

The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
operationspcvita
 
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance PanelsNorthern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving
 
Call Girls Chandigarh🔥7023059433🔥Agency Profile Escorts in Chandigarh Availab...
Call Girls Chandigarh🔥7023059433🔥Agency Profile Escorts in Chandigarh Availab...Call Girls Chandigarh🔥7023059433🔥Agency Profile Escorts in Chandigarh Availab...
Call Girls Chandigarh🔥7023059433🔥Agency Profile Escorts in Chandigarh Availab...
manji sharman06
 
What is an RPA CoE? Session 2 – CoE Roles
What is an RPA CoE?  Session 2 – CoE RolesWhat is an RPA CoE?  Session 2 – CoE Roles
What is an RPA CoE? Session 2 – CoE Roles
DianaGray10
 
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
Fwdays
 
Day 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio FundamentalsDay 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio Fundamentals
UiPathCommunity
 
Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!
Ortus Solutions, Corp
 
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
DanBrown980551
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
Mydbops
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
Fwdays
 
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeckPoznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
FilipTomaszewski5
 
AI in the Workplace Reskilling, Upskilling, and Future Work.pptx
AI in the Workplace Reskilling, Upskilling, and Future Work.pptxAI in the Workplace Reskilling, Upskilling, and Future Work.pptx
AI in the Workplace Reskilling, Upskilling, and Future Work.pptx
Sunil Jagani
 
ScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking ReplicationScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking Replication
ScyllaDB
 
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham HillinQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
LizaNolte
 
MySQL InnoDB Storage Engine: Deep Dive - Mydbops
MySQL InnoDB Storage Engine: Deep Dive - MydbopsMySQL InnoDB Storage Engine: Deep Dive - Mydbops
MySQL InnoDB Storage Engine: Deep Dive - Mydbops
Mydbops
 
From Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMsFrom Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMs
Sease
 
AWS Certified Solutions Architect Associate (SAA-C03)
AWS Certified Solutions Architect Associate (SAA-C03)AWS Certified Solutions Architect Associate (SAA-C03)
AWS Certified Solutions Architect Associate (SAA-C03)
HarpalGohil4
 
Essentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation ParametersEssentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation Parameters
Safe Software
 
QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...
QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...
QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...
AlexanderRichford
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
DianaGray10
 

Recently uploaded (20)

The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
 
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance PanelsNorthern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
 
Call Girls Chandigarh🔥7023059433🔥Agency Profile Escorts in Chandigarh Availab...
Call Girls Chandigarh🔥7023059433🔥Agency Profile Escorts in Chandigarh Availab...Call Girls Chandigarh🔥7023059433🔥Agency Profile Escorts in Chandigarh Availab...
Call Girls Chandigarh🔥7023059433🔥Agency Profile Escorts in Chandigarh Availab...
 
What is an RPA CoE? Session 2 – CoE Roles
What is an RPA CoE?  Session 2 – CoE RolesWhat is an RPA CoE?  Session 2 – CoE Roles
What is an RPA CoE? Session 2 – CoE Roles
 
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
 
Day 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio FundamentalsDay 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio Fundamentals
 
Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!
 
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
 
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeckPoznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
 
AI in the Workplace Reskilling, Upskilling, and Future Work.pptx
AI in the Workplace Reskilling, Upskilling, and Future Work.pptxAI in the Workplace Reskilling, Upskilling, and Future Work.pptx
AI in the Workplace Reskilling, Upskilling, and Future Work.pptx
 
ScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking ReplicationScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking Replication
 
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham HillinQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
inQuba Webinar Mastering Customer Journey Management with Dr Graham Hill
 
MySQL InnoDB Storage Engine: Deep Dive - Mydbops
MySQL InnoDB Storage Engine: Deep Dive - MydbopsMySQL InnoDB Storage Engine: Deep Dive - Mydbops
MySQL InnoDB Storage Engine: Deep Dive - Mydbops
 
From Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMsFrom Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMs
 
AWS Certified Solutions Architect Associate (SAA-C03)
AWS Certified Solutions Architect Associate (SAA-C03)AWS Certified Solutions Architect Associate (SAA-C03)
AWS Certified Solutions Architect Associate (SAA-C03)
 
Essentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation ParametersEssentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation Parameters
 
QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...
QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...
QR Secure: A Hybrid Approach Using Machine Learning and Security Validation F...
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
 

Griffon demo

  • 1. The Griffon Framework An Investigation by Jim Kirkbride
  • 2. What is this Griffon thing anyway?
  • 3. What Is Griffon? ● Desktop Application Framework ● Takes after Grails ● MVC-based ● Groovy-based ● Vastly simplifies writing Swing-based applications
  • 4. Why Not Just Use Swing? ● Complex widget hierarchy ● Difficult to separate out business logic from view logic ● Difficult to properly manage threading ● Difficult to test ● Wouldn’t you rather write Groovy?
  • 5. Getting Started ● gvm install griffon <version> ● set GRIFFON_HOME ● add GRIFFON_HOME/bin to path ● griffon create-app <app name> ● You’re in business!
  • 7. ● Application.groovy ○ App title ○ Start-up Groups ○ MVC Groups ● BuildConfig.groovy ○ Environment settings ○ Jar Signing ○ Dependency resolution Configuration
  • 8. Configuration Cont. ● Builder.groovy ○ SwingBuilder configuration ● Config.groovy ○ Log4j configuration ○ Global configuration
  • 9. Application LifeCycle ● Initialize ● Startup ● Ready ● Shutdown ● Stop
  • 11. MVC
  • 13. ● Nothing more than beans with “bindable” properties ● Uses the @Bindable AST transformation ● Model != “Domain”! ● PropertyChange listeners Model
  • 14. View ● Uses the SwingBuilder library to create layouts ● Uses model properties for two-way binding ● Converters ● Validators
  • 15. Controller ● Actions defined as closures ● Manipulates model values ● Used to define threading
  • 16. Services ● Just like Grails services ● Injectable ● No transactional capabilities
  • 17. Application Events ● Built-in events ● Custom Events
  • 18. What About Testing? ● GriffonUnitTestCase ● Access to Mock objects ● Integration and Unit testing ● Decidedly lacking in Acceptance Testing ○ FEST Plugin
  • 19. Lets talk about everyone’s favorite topic…
  • 21. Threading ● Swing uses the “Event Dispatch Thread” ● Makes you write ugly code using SwingWorker ● Is completely simplified in Griffon!
  • 22. Threading Cont. ● On the EDT: ○ execInsideUISync ○ execInsideUIAsync ● Outside the EDT: ○ execOutsideUI ● isUIThread ● execFuture
  • 23. Eco System ● Griffon still in development ● Documentation is spotty at best, downright wrong at worst ● Andres is very active ● Griffon team is really responsive ● Tons of plugins (very hit or miss)
  • 25. Links Griffon http://griffon.codehaus.org/ Griffon Guide (Latest) http://griffon.codehaus.org/guide/latest/guide/index.html Jim Shingler's Presentation on Griffon http://www.slideshare.net/jshingler/griffon-in-front-grails-in- back-presentation Griffon Demo https://github.com/jameskbride/griffon-demo Vending Machine Kata Implementation Example https://github.com/jameskbride/vendingMachineGriffonDemo Griffon Plugin Directory http://artifacts.griffon-framework.org/category/all/plugins Griffon ActiveJDBC Plugin http://griffon.codehaus.org/Activejdbc+Plugin Griffon GlazedLists Plugin http://griffon.codehaus.org/Glazedlists+Plugin Griffon FEST Plugin http://griffon.codehaus.org/Fest+Plugin https://github.com/griffon/griffon-fest-plugin/ Andres Almiray’s Blog http://www.jroller.com/aalmiray/
  • 26. Links Cont. Books Griffon In Action http://www.amazon.com/Griffon-Action-Andres- Almiray/dp/1935182234/ref=sr_1_1? ie=UTF8&qid=1404053485&sr=8-1&keywords=griffon Images Griffon Logo http://media.xircles.codehaus. org/_projects/griffon/_logos/medium.png Yarn Image http://2.bp.blogspot.com/- DwD6bi3l80E/TpeLW8T9XUI/AAAAAAAATi8/PiyqmV6YAEQ/ s1600/yarn.jpg