SlideShare a Scribd company logo
Making Swing Fun Again
Agenda A Brief History of Desktop Java Groovy’s Improvements for Swing Grails + Swing -> Griffon Griffon’s Unique Values Q&A / Live Demo
History of Desktop Java Java 1.0 January 1996 AWT Native Peers Subclass to Add Behavior
History of Desktop Java Java 1.1    February 1997 Inner and Anonymous Classes JavaBeans Events Listener Interfaces and Event Objects Properties getters/setters and BeanInfos AWT reworked with JavaBeans Lightweight Peers Swing as an External Library
History of Desktop Java
History of Desktop Java Java 1.3    May 2000 HotSpot JIT JavaSound Java WebStart as External Download
History of Desktop Java Java 1.4    February 2002 Java WebStart  Reworked Focus and Drag and Drop JSpinner and JFormattedTextField Java 1.4.2    September 2003 Windows XP Look and Feel GTK+ Look and Feel
History of Desktop Java Java 5.0   September 2004 Synth Look and Feel Ocean Theme for Metal Pack 200 Generics AutoBoxing Annotations Enumerations Varargs
History of Desktop Java Java 6.0    December 2006 SwingWorker API Scripting Language support (JSR-223) Improved Java2D Rendering Pipeline No More Grey Rectangles System Tray and Notifications Support
History of Desktop Java Java 6u10    October 2008 Kernel Installer Nimbus Look and Feel Improved Java Plug-In JNLP Integration New Process Model Patch in Place Updating
History of Desktop Java JavaFX Desktop 1.0   December 2008 New Node Based Graphics Engine Interop APIs for Swing New Programming Language Java Interop on par with JRuby / Jython / Rhino Should You Forget Most of the Last 8 Slides?
Groovy’s Improvements  Groovy Addresses Developer Pain Points JavaBeans Events JavaBeans Properties Declarative Structure Groovy Language Features Closures Concise Syntax Meta Object Protocol
Groovy’s Improvements Java Beans Event Listener Java JButton myButton = new JButton("Hello World"); myButton.addActionListener(new ActionListener() {   public void actionPerformed(ActionEvent ae) {   System.out.println("Hello World");   } }); Groovy JButton myButton = new JButton("Hello World") myButton.actionPerformed = { println "Hello World" }
Groovy’s Improvements Properties Java String field; public String getField() {   return field; } public void setField(String field) {   this.field = field; } Groovy String field
Groovy’s Improvements Declarative Structure def swing = new SwingBuilder() swing.frame(size:[400, 300], show:true) {   borderLayout()   scrollPane(constraints:CENTER) {   textArea(text: bind { model.script })   }   hbox(constraints:SOUTH) {   hglue()   button("OK", actionPerformed: controller.&okPressed)   button("Cancel", actionPerformed: controller.&canceled)   } }
Groovy’s Improvements Closures Can be cast to Interfaces Directly Usable for Single Method Interfaces (Runnable et. al.) Concise Syntax Boilerplate Code is Removed Lots of Closure Sensitive Methods Added to Core Classes Meta Object Protocol – i.e. Dynamic Language Allows Any Method to be Called on Any Object Allows Methods to be Intercepted Allows Missing Methods to be Handled Allows Magic to Happen
Grails + Swing -> Griffon Grails Inspired by Rails Groovy as the Language Web as the Domain Java as the Platform Spring Custom Value Added by Framework GORM GSPs
Grails + Swing -> Griffon Griffon Deeply Inspired by Grails Groovy as the Language Desktop/Rich Client as the Domain Java as the Platform Swing Custom Value Added by Framework MVC Groups Packaging
Grails + Swing -> Griffon Differences Fairly Strict Runtime/CLI Separation No Spring at Runtime No J2EE Servlets , EJB, JSP, JMS
Grails + Swing -> Griffon Similarities View Scripts – JSP Pages EDT Event Loop – HTTP Request Loop Source Tree is Partitioned by Role
Griffon’s Unique Values Builders MVC Groups Application Lifecycle Pattern Build Time Packaging
Builders MyBuilder builder = new MyBuilder() builder.parent {   child(attr:value, attr2:value, id:'a')   favoriteChild(arg) {   spoiledGrandchild(inheritance:a)   } } bequethKingdom(builder.a) Builders are Groovy Code Nesting Contexts are Closures Nodes are Method Calls Attributes and Arguments are Method Arguments
Builders SwingBuilder One of the Original Builder Samples Re-factored as a FactoryBuilderSupport Builder SwingXBuilder First Builder for a Non-Core Widget Set JideBuilder GraphicsBuilder
Builders UberBuilder Composites Other Builders Intercepts Calls and Dispatches to Approptiate Builder Can Prefix Nodes griffon-app/conf/Builder.groovy – root {   'groovy.swing.SwingBuilder' {   controller = ['Threading', 'SupportNodes', 'Binding']   }   'griffon.app.ApplicationBuilder' {   view = "*"   } } jx {   'groovy.swing.SwingXBuilder' { } }
MVC Groups The MVC Pattern is Great… But Swing Provides a Low Effort to Reward Ratio Lower the Effort Language Level Support for Data Binding Framework Level Support for MVC Triads Increase the Reward Reusability of  Triads
MVC Groups – Binding JavaBeans Bound Properties protected PropertyChangeSupport pcs = new    PropertyChangeSupport(this) private String myProperty; public String getMyProperty() {   return myProperty; } public void setMyProperty(String myProperty) {   pcs.firePropertyChange(“myProperty”,   this.myProperty,   this.myProperty = myProperty); } Groovy Bound Properties @Bindable String myProperty
MVC Groups – View Scripts Views are Groovy Scripts No Class Declarations Looks Like Free-Form Code Compiles to .class Method Contexts are Implied No Required Swing Imports Method Meanings are Provided by the Builder
MVC Groups – Data Injection Methods and Fields are Injected Global Imports createMVCGroup()  Method model ,   view ,   controller ,   builder   Fields/Properties On a per-builder basis SwingBuilder provides  edt ,  doLater ,  doOutside Other Builders Can Provide Their Own Methods Injection Controlled by  Builder.groovy
Application Lifecycle Follows the JSR-296 Lifecycle stages griffon-app/lifecycle/Initialize.groovy Before Any GUI Work Good Place for Look and Feel Setup griffon-app/lifecycle/Startup.groovy After Startup MVC Groups are Initialized griffon-app/lifecycle/Ready.groovy After the EDT Calms Down griffon-app/lifecycle/Shutdown.groovy After a Shutdown is Successfully Initiated
Packaging How do you… Keep an Applet From Thrashing the Server for BeanInfos? Create a Self-Signed Certificate? Use Pack200 On a Signed Jar? Over 1 MB? Create a Draggable Applet? Write a JNLP file? Switch Between the Applet and Object Tags? When do you Use Applet or Object?
Packaging Griffon Handles Standard Packaging Issues Pack 200 quirks Useful Applet Parameters JNLP Generation Uses Sun Java Deployment Toolkit JavaScripts
Room to Grow Plug-ins (Deeply Inspired by Grails 1.1 plug-ins) Existing Plug-ins swingx-builder – SwingX Components jide-builder – Jide-oss Components fest – Swing GUI Testing easyb – Behavior Driven Testing installer – Packages (deb, dmg, rpm) and IzPack
 
More Information Web links http://griffon.codehaus.org/   [email_address]   Creators' blogs Danno Ferrin  http://shemnon.com/speling Andres Almiray  http://jroller.com/aalmiray   James Williams  http://jameswilliams.be/blog

More Related Content

What's hot (20)

PDF
Gearman work queue in php
Bo-Yi Wu
 
PDF
Mac ruby deployment
Thilo Utke
 
PDF
Real Life Groovy
Paul Bakker
 
PDF
Concurrent Ruby Application Servers
Lin Jen-Shin
 
PDF
Drone CI/CD Platform
Bo-Yi Wu
 
PDF
How to integrate front end tool via gruntjs
Bo-Yi Wu
 
PDF
Kubernetes
DONGJIN KIM
 
PDF
Kubernetes Scheduler deep dive
DONGJIN KIM
 
PDF
Javascript as a target language - GWT KickOff - Part 2/2
JooinK
 
PDF
【コードレビューLT資料】コード規約の策定会を実施した話
虎の穴 開発室
 
PPT
Introduction To Ant1
Rajesh Kumar
 
PDF
NanoSec Conference 2019: Code Execution Analysis in Mobile Apps - Abdullah Jo...
Hafez Kamal
 
PDF
Killer R10K Workflow - PuppetConf 2014
Puppet
 
PDF
Ať se z kódu nepráší! 2013
Juraj Michálek
 
PPTX
2018 RubyHACK: put git to work - increase the quality of your rails project...
Rodrigo Urubatan
 
PDF
Rest, sockets em golang
jefferson Otoni Lima
 
PDF
2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle
garrett honeycutt
 
KEY
Introduction To Grails
Eric Berry
 
PDF
Drone 1.0 Feature
Bo-Yi Wu
 
PDF
GraphQL in Apache Sling - but isn't it the opposite of REST?
Bertrand Delacretaz
 
Gearman work queue in php
Bo-Yi Wu
 
Mac ruby deployment
Thilo Utke
 
Real Life Groovy
Paul Bakker
 
Concurrent Ruby Application Servers
Lin Jen-Shin
 
Drone CI/CD Platform
Bo-Yi Wu
 
How to integrate front end tool via gruntjs
Bo-Yi Wu
 
Kubernetes
DONGJIN KIM
 
Kubernetes Scheduler deep dive
DONGJIN KIM
 
Javascript as a target language - GWT KickOff - Part 2/2
JooinK
 
【コードレビューLT資料】コード規約の策定会を実施した話
虎の穴 開発室
 
Introduction To Ant1
Rajesh Kumar
 
NanoSec Conference 2019: Code Execution Analysis in Mobile Apps - Abdullah Jo...
Hafez Kamal
 
Killer R10K Workflow - PuppetConf 2014
Puppet
 
Ať se z kódu nepráší! 2013
Juraj Michálek
 
2018 RubyHACK: put git to work - increase the quality of your rails project...
Rodrigo Urubatan
 
Rest, sockets em golang
jefferson Otoni Lima
 
2014-11-11 Multiple Approaches to Managing Puppet Modules @ Puppet Camp Seattle
garrett honeycutt
 
Introduction To Grails
Eric Berry
 
Drone 1.0 Feature
Bo-Yi Wu
 
GraphQL in Apache Sling - but isn't it the opposite of REST?
Bertrand Delacretaz
 

Viewers also liked (7)

PPTX
Swing Dance Society at Colorado State University
Jennifer Aldrich
 
PPT
Swing era
sandy schaefer
 
PPTX
Swing And Big Band Music
Breanne
 
PDF
Structural musicality in swing dancing
Byron Alley
 
PPTX
Swing dance
Lilith Tamm
 
PPTX
Swing Dancing: History and Culture
crywhite
 
PPTX
Lainey's Jazz Music and Dance History Lecture Slides
"Elaine \"Lainey\"" Silver
 
Swing Dance Society at Colorado State University
Jennifer Aldrich
 
Swing era
sandy schaefer
 
Swing And Big Band Music
Breanne
 
Structural musicality in swing dancing
Byron Alley
 
Swing dance
Lilith Tamm
 
Swing Dancing: History and Culture
crywhite
 
Lainey's Jazz Music and Dance History Lecture Slides
"Elaine \"Lainey\"" Silver
 
Ad

Similar to Griffon - Making Swing Fun Again (20)

ODP
Griffon: Re-imaging Desktop Java Technology
James Williams
 
PPT
What's New in Groovy 1.6?
Guillaume Laforge
 
PPS
Groovy & Grails
Michael Yan
 
PPT
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
Fred Sauer
 
PPT
GWT Extreme!
cromwellian
 
PPT
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
Guillaume Laforge
 
ODP
Groovy and Grails intro
Miguel Pastor
 
PPT
Griffon Presentation
Kelly Robinson
 
PPTX
Building native Android applications with Mirah and Pindah
Nick Plante
 
ODP
JavaOne 2009 BOF-5189 Griffon In Depth
Danno Ferrin
 
PPTX
Playframework + Twitter Bootstrap
Kevingo Tsai
 
PDF
Web polyglot programming
Dmitry Buzdin
 
PDF
Zepto and the rise of the JavaScript Micro-Frameworks
Thomas Fuchs
 
PDF
Groovy - Grails as a modern scripting language for Web applications
IndicThreads
 
PPT
Griffon: Swing just got fun again
James Williams
 
PPT
JavaOne TS-5098 Groovy SwingBuilder
Andres Almiray
 
PPT
Groovy Update - JavaPolis 2007
Guillaume Laforge
 
PDF
Deep dive into serverless on Google Cloud
Bret McGowen - NYC Google Developer Advocate
 
PDF
Whats New In Groovy 1.6?
Guillaume Laforge
 
PPTX
Java 7 - New Features - by Mihail Stoynov and Svetlin Nakov
Svetlin Nakov
 
Griffon: Re-imaging Desktop Java Technology
James Williams
 
What's New in Groovy 1.6?
Guillaume Laforge
 
Groovy & Grails
Michael Yan
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
Fred Sauer
 
GWT Extreme!
cromwellian
 
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
Guillaume Laforge
 
Groovy and Grails intro
Miguel Pastor
 
Griffon Presentation
Kelly Robinson
 
Building native Android applications with Mirah and Pindah
Nick Plante
 
JavaOne 2009 BOF-5189 Griffon In Depth
Danno Ferrin
 
Playframework + Twitter Bootstrap
Kevingo Tsai
 
Web polyglot programming
Dmitry Buzdin
 
Zepto and the rise of the JavaScript Micro-Frameworks
Thomas Fuchs
 
Groovy - Grails as a modern scripting language for Web applications
IndicThreads
 
Griffon: Swing just got fun again
James Williams
 
JavaOne TS-5098 Groovy SwingBuilder
Andres Almiray
 
Groovy Update - JavaPolis 2007
Guillaume Laforge
 
Deep dive into serverless on Google Cloud
Bret McGowen - NYC Google Developer Advocate
 
Whats New In Groovy 1.6?
Guillaume Laforge
 
Java 7 - New Features - by Mihail Stoynov and Svetlin Nakov
Svetlin Nakov
 
Ad

Recently uploaded (20)

PPTX
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
PDF
RAT Builders - How to Catch Them All [DeepSec 2024]
malmoeb
 
PDF
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
PPTX
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
PDF
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
PPTX
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
PDF
Brief History of Internet - Early Days of Internet
sutharharshit158
 
PPTX
AVL ( audio, visuals or led ), technology.
Rajeshwri Panchal
 
PDF
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
PDF
introduction to computer hardware and sofeware
chauhanshraddha2007
 
PDF
The Future of Mobile Is Context-Aware—Are You Ready?
iProgrammer Solutions Private Limited
 
PDF
NewMind AI Weekly Chronicles – July’25, Week III
NewMind AI
 
PDF
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
PDF
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
PPTX
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
PDF
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
PDF
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
PDF
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
PDF
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
PPTX
The Future of AI & Machine Learning.pptx
pritsen4700
 
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
RAT Builders - How to Catch Them All [DeepSec 2024]
malmoeb
 
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
Brief History of Internet - Early Days of Internet
sutharharshit158
 
AVL ( audio, visuals or led ), technology.
Rajeshwri Panchal
 
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
introduction to computer hardware and sofeware
chauhanshraddha2007
 
The Future of Mobile Is Context-Aware—Are You Ready?
iProgrammer Solutions Private Limited
 
NewMind AI Weekly Chronicles – July’25, Week III
NewMind AI
 
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
The Future of AI & Machine Learning.pptx
pritsen4700
 

Griffon - Making Swing Fun Again

  • 2. Agenda A Brief History of Desktop Java Groovy’s Improvements for Swing Grails + Swing -> Griffon Griffon’s Unique Values Q&A / Live Demo
  • 3. History of Desktop Java Java 1.0 January 1996 AWT Native Peers Subclass to Add Behavior
  • 4. History of Desktop Java Java 1.1 February 1997 Inner and Anonymous Classes JavaBeans Events Listener Interfaces and Event Objects Properties getters/setters and BeanInfos AWT reworked with JavaBeans Lightweight Peers Swing as an External Library
  • 6. History of Desktop Java Java 1.3 May 2000 HotSpot JIT JavaSound Java WebStart as External Download
  • 7. History of Desktop Java Java 1.4 February 2002 Java WebStart Reworked Focus and Drag and Drop JSpinner and JFormattedTextField Java 1.4.2 September 2003 Windows XP Look and Feel GTK+ Look and Feel
  • 8. History of Desktop Java Java 5.0 September 2004 Synth Look and Feel Ocean Theme for Metal Pack 200 Generics AutoBoxing Annotations Enumerations Varargs
  • 9. History of Desktop Java Java 6.0 December 2006 SwingWorker API Scripting Language support (JSR-223) Improved Java2D Rendering Pipeline No More Grey Rectangles System Tray and Notifications Support
  • 10. History of Desktop Java Java 6u10 October 2008 Kernel Installer Nimbus Look and Feel Improved Java Plug-In JNLP Integration New Process Model Patch in Place Updating
  • 11. History of Desktop Java JavaFX Desktop 1.0 December 2008 New Node Based Graphics Engine Interop APIs for Swing New Programming Language Java Interop on par with JRuby / Jython / Rhino Should You Forget Most of the Last 8 Slides?
  • 12. Groovy’s Improvements Groovy Addresses Developer Pain Points JavaBeans Events JavaBeans Properties Declarative Structure Groovy Language Features Closures Concise Syntax Meta Object Protocol
  • 13. Groovy’s Improvements Java Beans Event Listener Java JButton myButton = new JButton("Hello World"); myButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { System.out.println("Hello World"); } }); Groovy JButton myButton = new JButton("Hello World") myButton.actionPerformed = { println "Hello World" }
  • 14. Groovy’s Improvements Properties Java String field; public String getField() { return field; } public void setField(String field) { this.field = field; } Groovy String field
  • 15. Groovy’s Improvements Declarative Structure def swing = new SwingBuilder() swing.frame(size:[400, 300], show:true) { borderLayout() scrollPane(constraints:CENTER) { textArea(text: bind { model.script }) } hbox(constraints:SOUTH) { hglue() button("OK", actionPerformed: controller.&okPressed) button("Cancel", actionPerformed: controller.&canceled) } }
  • 16. Groovy’s Improvements Closures Can be cast to Interfaces Directly Usable for Single Method Interfaces (Runnable et. al.) Concise Syntax Boilerplate Code is Removed Lots of Closure Sensitive Methods Added to Core Classes Meta Object Protocol – i.e. Dynamic Language Allows Any Method to be Called on Any Object Allows Methods to be Intercepted Allows Missing Methods to be Handled Allows Magic to Happen
  • 17. Grails + Swing -> Griffon Grails Inspired by Rails Groovy as the Language Web as the Domain Java as the Platform Spring Custom Value Added by Framework GORM GSPs
  • 18. Grails + Swing -> Griffon Griffon Deeply Inspired by Grails Groovy as the Language Desktop/Rich Client as the Domain Java as the Platform Swing Custom Value Added by Framework MVC Groups Packaging
  • 19. Grails + Swing -> Griffon Differences Fairly Strict Runtime/CLI Separation No Spring at Runtime No J2EE Servlets , EJB, JSP, JMS
  • 20. Grails + Swing -> Griffon Similarities View Scripts – JSP Pages EDT Event Loop – HTTP Request Loop Source Tree is Partitioned by Role
  • 21. Griffon’s Unique Values Builders MVC Groups Application Lifecycle Pattern Build Time Packaging
  • 22. Builders MyBuilder builder = new MyBuilder() builder.parent { child(attr:value, attr2:value, id:'a') favoriteChild(arg) { spoiledGrandchild(inheritance:a) } } bequethKingdom(builder.a) Builders are Groovy Code Nesting Contexts are Closures Nodes are Method Calls Attributes and Arguments are Method Arguments
  • 23. Builders SwingBuilder One of the Original Builder Samples Re-factored as a FactoryBuilderSupport Builder SwingXBuilder First Builder for a Non-Core Widget Set JideBuilder GraphicsBuilder
  • 24. Builders UberBuilder Composites Other Builders Intercepts Calls and Dispatches to Approptiate Builder Can Prefix Nodes griffon-app/conf/Builder.groovy – root { 'groovy.swing.SwingBuilder' { controller = ['Threading', 'SupportNodes', 'Binding'] } 'griffon.app.ApplicationBuilder' { view = "*" } } jx { 'groovy.swing.SwingXBuilder' { } }
  • 25. MVC Groups The MVC Pattern is Great… But Swing Provides a Low Effort to Reward Ratio Lower the Effort Language Level Support for Data Binding Framework Level Support for MVC Triads Increase the Reward Reusability of Triads
  • 26. MVC Groups – Binding JavaBeans Bound Properties protected PropertyChangeSupport pcs = new PropertyChangeSupport(this) private String myProperty; public String getMyProperty() { return myProperty; } public void setMyProperty(String myProperty) { pcs.firePropertyChange(“myProperty”, this.myProperty, this.myProperty = myProperty); } Groovy Bound Properties @Bindable String myProperty
  • 27. MVC Groups – View Scripts Views are Groovy Scripts No Class Declarations Looks Like Free-Form Code Compiles to .class Method Contexts are Implied No Required Swing Imports Method Meanings are Provided by the Builder
  • 28. MVC Groups – Data Injection Methods and Fields are Injected Global Imports createMVCGroup() Method model , view , controller , builder Fields/Properties On a per-builder basis SwingBuilder provides edt , doLater , doOutside Other Builders Can Provide Their Own Methods Injection Controlled by Builder.groovy
  • 29. Application Lifecycle Follows the JSR-296 Lifecycle stages griffon-app/lifecycle/Initialize.groovy Before Any GUI Work Good Place for Look and Feel Setup griffon-app/lifecycle/Startup.groovy After Startup MVC Groups are Initialized griffon-app/lifecycle/Ready.groovy After the EDT Calms Down griffon-app/lifecycle/Shutdown.groovy After a Shutdown is Successfully Initiated
  • 30. Packaging How do you… Keep an Applet From Thrashing the Server for BeanInfos? Create a Self-Signed Certificate? Use Pack200 On a Signed Jar? Over 1 MB? Create a Draggable Applet? Write a JNLP file? Switch Between the Applet and Object Tags? When do you Use Applet or Object?
  • 31. Packaging Griffon Handles Standard Packaging Issues Pack 200 quirks Useful Applet Parameters JNLP Generation Uses Sun Java Deployment Toolkit JavaScripts
  • 32. Room to Grow Plug-ins (Deeply Inspired by Grails 1.1 plug-ins) Existing Plug-ins swingx-builder – SwingX Components jide-builder – Jide-oss Components fest – Swing GUI Testing easyb – Behavior Driven Testing installer – Packages (deb, dmg, rpm) and IzPack
  • 33.  
  • 34. More Information Web links http://griffon.codehaus.org/ [email_address] Creators' blogs Danno Ferrin http://shemnon.com/speling Andres Almiray http://jroller.com/aalmiray James Williams http://jameswilliams.be/blog