O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Chicago, October 19 - 22,
2010
Griffon for the Enterprise
James Williams – BT/Ribbit
About Me
• Co-creator of Griffon
• Creator of SwingXBuilder
• Sofware Engineer at BT/Ribbit
Griffon Team and Contributors
●
Andres Almiray
●
Danno Ferrin
●
Josh Reed
●
Jim Shingler
• Hamlet D'Arcy
• Nick Zhu
Agenda
●
Overview of Griffon
●
Griffon MVC
●
Plugins and Addons
●
Application Packaging
●
Griffon Competitors
●
Sample App...
What is Griffon?
●
Open source desktop rapid development framework
●
Leverages Java Swing and the Groovy language
●
Apache...
Structure of a Griffon Application
Structure of a Griffon Application
Yes, all of em.
Griffon MVC
Provides a separation of concerns
●
Models
●
Views
●
Controllers
Griffon Lifecycle
●
Bootstrap
●
Initialize
●
Startup
●
Shutdown
●
Stop
Plugins and Addons
Extend existing features in Griffon applications
• Plugins
• Addons
Provide features like
• UI toolkits...
Services and Dependency Injection
Griffon has supports the following
• Guice
• Spring
• First-class services when DI is no...
Application Packaging
●
Can easily be deployed as
– Fat JARs or collection of JARs
– Java WebStart
– Applets
– Zip file
●
...
Griffon's Competitors
●
Apache Pivot
●
Eclipse RCP
●
Netbeans Platform
●
Many wannabes
Apache Pivot
Rapid application framework including:
• WTK user interface elements
• Web libraries
• Charts
• LOTS of XML
•...
Code Sample
<Window title="Hello WTKX!" maximized="true"
xmlns:wtkx="http://pivot.apache.org/wtkx"
xmlns="org.apache.pivot...
Eclipse RCP
Rapid application framework including:
• Eclipse Runtime
• SWT
• JFace
• Workbench
• Plugins
• Base footprint:...
Netbeans Platform
Toolkit powering Netbeans providing:
• Java Swing
• OSGI or Netbeans Modules
• Advanced multi-Window sys...
Dependency Handling in Griffon
●
Gradle is built in under the covers providing
●
Compile, Test, and Runtime dependency
●
I...
Using Eclipse UIs in Griffon
WindowsBuilder Pro
• A GUI designer product from Instantiations
• Recently released as a free...
Using Netbeans Matisse with Griffon
Netbeans Matisse ...
• Uses GroupLayout for the UIs
• Code is not humanly editable
• N...
Demo
Use Case #1 - Databases
Scenario: Create a database viewer application
Requirements:
• Use MongoDB
• Have the ability to d...
What is MongoDB?
●
Document-oriented database
• Documents can be nested
• Supports MapReduce
• Used by NYT, SourceForge, f...
Demo
Code Sample
jxtitledPanel(title:'Settings', border:new
DropShadowBorder(Color.BLACK,15), constraints:'w 30%, h 100%') {
jx...
Code Sample
package griffonmongo
import net.miginfocom.swing.MigLayout
frame (title:'Add a Connection', id:'conx', size:[2...
Use Case #2 – Websockets / Net
Comms
Scenario: Use websockets for communication in a chat and
slideware app
Requirements:
...
What are Web Sockets?
Web Sockets ...
• Address the issues of long polling
• Supported natively by Chrome, Opera, and Fire...
How Websockets work
Griffon Talk Android App
●
Had to play nice with websockets
●
Needed to display information about the current slide
●
Need...
Demo
Code Sample
def listener = [
processToken:{aEvent, aToken ->
def json = new JSONObject(aToken.toString())
switch(json.getS...
Code Sample
scrollPane(id:'screenshot', constraints:'w 700px , h 100%')
panel (layout:new MigLayout(), constraints:'w 200p...
Use Case #3 – Converting an app
Scenario: A legacy application that has fallen into disrepair
Requirements:
• Most origina...
NeoeEdit
●
Lightweight BSD licensed text editor
●
Similar to JEdit
• Built using Java and Swing
• Keyword syntax highlight...
Live coding
Stock Tracker App
●
Ported from Apache Pivot to Griffon
●
Reads stock information from Yahoo! Finance
●
Track changes in s...
Demo
Summary
●
UI designer support
●
Work incrementally with your assets.
●
Griffon has a small footprint.
●
Extensible with pl...
Links
●
Griffon project: http://griffon.codehaus.org
• Code samples:
http://github.com/jwill/SpringOne2GXDemos
• jWebSocke...
Q&A
Próximos SlideShares
Carregando em…5
×

Griffon for the Enterprise

Presented at SpringOne2GX 2010
October 21, 2010
Chicago, IL

  • Entre para ver os comentários

Griffon for the Enterprise

  1. 1. Chicago, October 19 - 22, 2010 Griffon for the Enterprise James Williams – BT/Ribbit
  2. 2. About Me • Co-creator of Griffon • Creator of SwingXBuilder • Sofware Engineer at BT/Ribbit
  3. 3. Griffon Team and Contributors ● Andres Almiray ● Danno Ferrin ● Josh Reed ● Jim Shingler • Hamlet D'Arcy • Nick Zhu
  4. 4. Agenda ● Overview of Griffon ● Griffon MVC ● Plugins and Addons ● Application Packaging ● Griffon Competitors ● Sample Applications and Demos ● Summary
  5. 5. What is Griffon? ● Open source desktop rapid development framework ● Leverages Java Swing and the Groovy language ● Apache 2 Licensed ● Extensible using Plugins and Add-ons ● Brings a Grails-inspired experience to the desktop
  6. 6. Structure of a Griffon Application
  7. 7. Structure of a Griffon Application Yes, all of em.
  8. 8. Griffon MVC Provides a separation of concerns ● Models ● Views ● Controllers
  9. 9. Griffon Lifecycle ● Bootstrap ● Initialize ● Startup ● Shutdown ● Stop
  10. 10. Plugins and Addons Extend existing features in Griffon applications • Plugins • Addons Provide features like • UI toolkits • Databases • XMPP/REST/RPC • Testing • Layout Managers • Bling
  11. 11. Services and Dependency Injection Griffon has supports the following • Guice • Spring • First-class services when DI is not needed
  12. 12. Application Packaging ● Can easily be deployed as – Fat JARs or collection of JARs – Java WebStart – Applets – Zip file ● The Installer plugin can also provide the following – OS specific executables – Izpack – JSmooth
  13. 13. Griffon's Competitors ● Apache Pivot ● Eclipse RCP ● Netbeans Platform ● Many wannabes
  14. 14. Apache Pivot Rapid application framework including: • WTK user interface elements • Web libraries • Charts • LOTS of XML • Base footprint: Unknown but very small
  15. 15. Code Sample <Window title="Hello WTKX!" maximized="true" xmlns:wtkx="http://pivot.apache.org/wtkx" xmlns="org.apache.pivot.wtk"> <content> <Label text="Hello WTKX!" styles="{font:'Arial bold 24', color:'#ff0000', horizontalAlignment:'center', verticalAlignment:'center'}"/> </content> </Window>
  16. 16. Eclipse RCP Rapid application framework including: • Eclipse Runtime • SWT • JFace • Workbench • Plugins • Base footprint: 12MB
  17. 17. Netbeans Platform Toolkit powering Netbeans providing: • Java Swing • OSGI or Netbeans Modules • Advanced multi-Window system • Base footprint: 7-8.5MB
  18. 18. Dependency Handling in Griffon ● Gradle is built in under the covers providing ● Compile, Test, and Runtime dependency ● Integration with Maven repositories ● Integration with Griffon plugin repositories ● No OSGI support yet
  19. 19. Using Eclipse UIs in Griffon WindowsBuilder Pro • A GUI designer product from Instantiations • Recently released as a free product • Provides a competitor to Netbeans Matisse • Creates human-editable code • Generated UIs can be dropped into a Griffon app
  20. 20. Using Netbeans Matisse with Griffon Netbeans Matisse ... • Uses GroupLayout for the UIs • Code is not humanly editable • No alternate LayoutManagers • griffon generate-view-script <Qualified UI class name>
  21. 21. Demo
  22. 22. Use Case #1 - Databases Scenario: Create a database viewer application Requirements: • Use MongoDB • Have the ability to do basic functions like: – CRUD operations – Simple and advanced query – Retrieve DB statistics
  23. 23. What is MongoDB? ● Document-oriented database • Documents can be nested • Supports MapReduce • Used by NYT, SourceForge, foursquare, and others • Libraries for many programming languages
  24. 24. Demo
  25. 25. Code Sample jxtitledPanel(title:'Settings', border:new DropShadowBorder(Color.BLACK,15), constraints:'w 30%, h 100%') { jxtaskPaneContainer() { taskPane(id:'conxPane', title:'Connections', layout:new MigLayout()) { scrollPane() { panel(id:'conxIcons', layout: new MigLayout()) } button(text:'Add', constraints:'newline, cell 0 1 ', ...) button(text:'Remove', constraints:'cell 0 1') } taskPane(id:'dbPane', title:'Databases', layout:new MigLayout()) taskPane(id:'collPane', title:'Collections', layout:new MigLayout()) } }
  26. 26. Code Sample package griffonmongo import net.miginfocom.swing.MigLayout frame (title:'Add a Connection', id:'conx', size:[200,200], layout:new MigLayout()) { label(text:'Name') textField(id:'txtName', columns:15, constraints:'wrap') label(text:'Host') textField(id:'txtHost', columns:15, constraints:'wrap') label(text:'Port') textField(id:'txtPort', columns:4, constraints:'wrap') button('Add') button('Cancel') }
  27. 27. Use Case #2 – Websockets / Net Comms Scenario: Use websockets for communication in a chat and slideware app Requirements: • Use WebSockets • Provide simple chat functions • Allow controlling slideware app with Websockets
  28. 28. What are Web Sockets? Web Sockets ... • Address the issues of long polling • Supported natively by Chrome, Opera, and Firefox • Enabled with Flash in non-compliant browsers • Enable bi-directional communication between – Web sites – Web Services
  29. 29. How Websockets work
  30. 30. Griffon Talk Android App ● Had to play nice with websockets ● Needed to display information about the current slide ● Needed to control the presentation via Wifi ● Had to be Android Cupcake (1.5) compatible
  31. 31. Demo
  32. 32. Code Sample def listener = [ processToken:{aEvent, aToken -> def json = new JSONObject(aToken.toString()) switch(json.getString("operation")) { ... case "broadcast": def sender = json.getString("user") def msg = json.getString("data") model.msgEventList.add("$sender: $msg") break } }, processOpened:{aEvent -> println aEvent}, processPacket:{evt, pkt -> }] as WebSocketClientTokenListener
  33. 33. Code Sample scrollPane(id:'screenshot', constraints:'w 700px , h 100%') panel (layout:new MigLayout(), constraints:'w 200px, h 100%') { scrollPane(id:'scroll', constraints:'h 90%, w 200px, wrap'){ jxlist(model:model.msgModel, highlighters: [HighlighterFactory.createSimpleStriping()]) } panel (layout:new MigLayout(), constraints:'w 200px'){ comboBox(id:'cbox', items:['Send Message', 'Send Question'], constraints:'wrap') textArea(id:'msgText', columns:15, lineWrap:true, constraints:'wrap') button(text:'Send', actionPerformed:{ controller.sendMessage(msgText?.text)}) } }
  34. 34. Use Case #3 – Converting an app Scenario: A legacy application that has fallen into disrepair Requirements: • Most original functionality must be preserved • A total rewrite has to be optional
  35. 35. NeoeEdit ● Lightweight BSD licensed text editor ● Similar to JEdit • Built using Java and Swing • Keyword syntax highlighting
  36. 36. Live coding
  37. 37. Stock Tracker App ● Ported from Apache Pivot to Griffon ● Reads stock information from Yahoo! Finance ● Track changes in stock information in real-time
  38. 38. Demo
  39. 39. Summary ● UI designer support ● Work incrementally with your assets. ● Griffon has a small footprint. ● Extensible with plugins and addons ● You don't have to give up your favorite GUI designer.
  40. 40. Links ● Griffon project: http://griffon.codehaus.org • Code samples: http://github.com/jwill/SpringOne2GXDemos • jWebSocket: http://jwebsocket.org/ • websocket4j: https://launchpad.net/websocket4j • NeoeEdit: http://code.google.com/p/neoeedit/
  41. 41. Q&A

×