SlideShare a Scribd company logo
Effective JavaFX
Architecture with


                  Presented by
               Srikanth Shenoy
                  ObjectSource
         (Covers FxObjects 0.1)
Introduction
   Who am I?
       A hands-on architect
       Experienced and very knowledgeable in Java and
        Java EE
       Authored a book on Struts
       Several articles on Java EE for leading journals
       Director of Enterprise Java Practice at
        ObjectSource
       Creator of FxObjects framework
Introduction
   What is FxObjects? (Currently 0.1)
       An open source JavaFX application development
        framework (Apache License)
   Why FxObjects?
       Enterprise JavaFX architect/developer starts from
        scratch, reinventing the wheel, wasting time and
        repeating mistakes
       Enterprise JavaFX applications need a strategic
        and functional framework (not a point solution).
       FxObjects is that strategic functional framework !
   Learn FxObjects in 25 slides !
30K ft. Overview
Introduction
   FxObjects is the end to end application
    development framework in the UI tier.
   Designed to simplify large JavaFX application
    development
   Makes your application elegant by using
    proven patterns, principles and practices
   If you use FxObjects as defined in the user
    guide, your application becomes inherently
    test friendly
Introduction
   FxObjects is Dependency Injection (DI)
    friendly from the grounds-up.
   Tested with Spring 2.5
   Dependency Injection + FxObjects makes a
    very powerful and agile programming model
   FxObjects makes TDD possible with JavaFX
    by using Model-View-Presenter (MVP)
   FxObjects is NOT a UI component library
    (and never intends to be).
Model-View-Presenter
(Passive View)


   Note the sequence of events in MVP passive
    View
   Actual UI is lean, mean and clean 
   Presenter does the heavy lifting on the UI
    side. But Presenter is not really a UI !!
   Hence Presenter can be easily tested and
    asserted
MVP with FxObjects
   NodePresenter is the FxObjects class.
   MyNodePresenter and MyNode are app
    classes & hold reference to each other
   When a event occurs, the MyNode simply
    calls doOnSearchButtonClick()
Presenter Code
   doSearchButtonClick method
       Validates UI (for mandatory fields)
       Calls the service asynchronously using FxObjects
        Command classes
       That’s it!
   You will see FxObjects Commands next
       For aiding the async service calls
       Update the UI when async calls return data
       Show error message when service call fails
Challenges in Service
Invocation
   Async calls are fire and forget
   They should execute off the Event Dispatch
    Thread (EDT)
   All UI updates should then again occur ON
    the EDT.
   Can be confusing and errror-prone
   Swing provided SwingWorker
   JavaFX provides a async framework
       Slightly complex, but FXObjects simplifies this
JavaFX Async Framework
Challenges in Service
Invocation (contd.)
   HttpRequest (core JavaFX class) has some
    solution (async call is off-EDT & callbacks are
    on-EDT), but it is the foundation for a full
    solution
   FxObjects HttpCommands provide the
    missing pieces to make this simple
   How to easily go to another page v/s stay on
    same page after service invocation?
       FxObjects solves this, as we shall see soon
        (controller chain)
Command objects
   Command objects are configured first and
    then executed [with execute(..) method]
var cmd =   DefaultAsyncCommand      {
     runInBackground: function(modelObj:Object):Object {
         //call service here
     }
     onSuccess:   function(resultObj:Object):Void {
         //update ui widgets here OR navigate to another UI
     }
     onError: function(e:Exception):Void {
         //show the error
     }
}
Automating XML to JavaFX
   No Xml tag handling code necessary
   Use XmlResponseBuilder
   Called ResponseBuilder since it was initially
    built to construct JavaFX objects from XML
    content (returned by REST services)
   Can handle XML of any type and of any
    depth
       Scales well for all kinds of xml
       Best suited for small JavaFX apps though
   Larger apps can use JAXBResponseBuilder
Automating JavaFX to XML
   No code necessary
   Use XmlRequestBuilder
   Called RequestBuilder since it was initially
    built to construct XML from JavaFX objects to
    be sent as request body to REST services
   Can handle JavaFX objects of any type and
    of any depth
       Scales well for JavaFX objects of any kind
       Best suited for small JavaFX apps
   Larger apps can use JAXBRequestBuilder
HttpCommands and Builders
   Just like DefaultAsyncCommand
   No runInBackground necessary. [Http
    GET/POST themselves run in background !!]
   Url & query parameters are configurable with
    { } syntax
       e.g. http://server/app/search?zipCode={zipCode}
       The params in {} can be passed in a Map
       Otherwise reflection is used to query the object
   Need RequestBuilder and ResponseBuilder
       XML***Builder or JAXB***Builder
GetHttpCommand
var respBuilder = new MyJAXBResponseBuilder();
respBuilder.setSchema(…);
var cmd = GetHttpCommand {
    urlTemplate: “http://.../Search?output=xml&zip={zipCode}&..
    responseBuilder: respBuilder
    onSuccess: function(resultData:Object) {
      var result = resultData as ResultSet;
      //update UI components here OR navigate to another UI
    }
    onError: function(e:Exception) {
    ..
    }
}
..
function doSearchButtonClick() {
  var paramMap = new HashMap();
  paramMap.put(“zipCode”, node.zipCodeTxtBox.text);
  cmd.execute(paramMap);
}
Custom JAXB Response
Builder
public class CafeSearchResponseBuilder extends
   JAXBResponseBuilder<ResultSet> {
  @Override
  public ResultSet buildResponse(String serverResponse) {
    ResultSet rs =
               buildResponseObjectFromXml(serverResponse);
    return rs;
  }

    @Override
    public ResultSet buildResponse(InputStream inputStream) {
      ResultSet rs = buildResponseObjectFromXml(inputStream);
      return rs;
    }
}
BodyHttpCommand
   Use for PUT and POST
   Almost same as GetHttpCommand
   Additionally needs RequestBuilder
       To convert the presentation model object into
        format expected by server (Generaly XML)
   Optionally a content pre-processor
       To massage the output from the requestbuilder
        and before sending to server
Navigation challenges
   How to go to another page v/s stay on same
    page after service invocation succeeds?
   Default JavaFX model involves binding to a
    new scenegraph
       Couples the lower level UI to top level stage.
   No idioms for organizing the application into
    modules
   Who decides what is the default node to
    display?
   Solution: FxObjects ControllerChain
Controller Chain
Navigation with FxObjects
Controller Chain
   Each Application can hold many Presenters
   Each Application can have many Modules
   Each Module can hold many Presenters
   Application has a Application Controller
   Each Module has a Module Controller.
       Module Controller has a Id
   Each NodePresenter owns the Node
       Node Presenter has a Id
Navigation with FxObjects
Controller Chain (contd.)
public MyNodePresenter extends NodePresenter
  var cmd = DefaultAsyncCommand {
    runInBackground:function(modelObj:Object):Object {
      //call service here
    }
    onSuccess: function(resultObj:Object):Void {
      //update ui here OR go to another page
      this.changeNodePresenter(“someNodePresenterId”);
    }
    onError: function(e:Exception):Void {
      //show the error
    }
  }
changeNodePresenter(..) is defined in NodePresenter class (the parent)
FxObjects and Dependency
Injection
   FxObjects is built with Dependency Injection
    in mind.
       DI is optional, but recommended
   What can be wired
       ApplicationController, ModuleController
       NodePresenter (but not Nodes)
       Commands, Services (Service Proxies)
   Nodes should be maintained by Presenters.
       This lets presenters choose appropriate node
        handling strategy (cache, dispose after use etc.)
Bootstrapping FxObjects
var ctx = new ClassPathXmlApplicationContext(“/your-spring.xml");
var appController =
        ctx.getBean("appController") as ApplicationController;

Stage {
  title: "FxObjects Example“
  scene: Scene {
    width: 600
    height: 400
    content: bind [
        appController.currentNodePresenter.getNode()
    ]
  }
}
   Node presenter configured as default is shown at the beginning
   Every navigation call sets another NodePresenter as the “Current”
    NodePresenter and that gets bound to the scenegraph
What’s coming in 0.2?
   Lifecycle
   Event
   Event Bus
   Security
   JSON to JavaFX round-tripping
   Suggestions welcome (Please post in the
    discussion forums)
   Timeframe: September 2010
FxObjects Summary
   Enterprise JavaFX applications are inherently
    complex.
       Architecting such apps is art and science
       FxObjects can help
   The more complex the application, the more
    value you get from FxObjects
   End to end programming model for the UI
   Does not force any programming model for
    the server
Links
   Project site – https://fxobjects/dev.java.net
   Not a single person open source project
       FxObjects is developed and supported by
        ObjectSource (http://www.objectsource.com)
   Download, use, extend, redistribute, OEM
   Discussion Forums on project site
       We will answer your questions
   Participation welcome
       Post ideas, questions, concerns, comments
       Contribute code

More Related Content

PDF
Dart for Java Developers
PDF
Seven Versions of One Web Application
PDF
Intro to JavaScript
PDF
Speed up your Web applications with HTML5 WebSockets
PPTX
PDF
DataFX 8 (JavaOne 2014)
PDF
Test Driven Development with JavaFX
PPT
Mastering OmniFaces - A Problem to Solution Approach
Dart for Java Developers
Seven Versions of One Web Application
Intro to JavaScript
Speed up your Web applications with HTML5 WebSockets
DataFX 8 (JavaOne 2014)
Test Driven Development with JavaFX
Mastering OmniFaces - A Problem to Solution Approach

What's hot (19)

PPT
Understanding Framework Architecture using Eclipse
PDF
Struts2
PPTX
OmniFaces validators
PDF
Intro to node.js - Ran Mizrahi (28/8/14)
PDF
EJB Part-1
PDF
Intro To JavaScript Unit Testing - Ran Mizrahi
PDF
JavaFX8 TestFX - CDI
PDF
Signal Framework
PPT
Java interview-questions-and-answers
PDF
Java script Examples by Som
PPT
SMI - Introduction to Java
PPTX
Zend Studio Tips and Tricks
PDF
Commit University - Exploring Angular 2
PDF
Java 9 New Features
PPT
Java Tutorial
PDF
Core java introduction
PPTX
01 introduction to struts2
PDF
Advanced JavaScript - Internship Presentation - Week6
PPTX
Session 45 - Spring - Part 3 - AOP
Understanding Framework Architecture using Eclipse
Struts2
OmniFaces validators
Intro to node.js - Ran Mizrahi (28/8/14)
EJB Part-1
Intro To JavaScript Unit Testing - Ran Mizrahi
JavaFX8 TestFX - CDI
Signal Framework
Java interview-questions-and-answers
Java script Examples by Som
SMI - Introduction to Java
Zend Studio Tips and Tricks
Commit University - Exploring Angular 2
Java 9 New Features
Java Tutorial
Core java introduction
01 introduction to struts2
Advanced JavaScript - Internship Presentation - Week6
Session 45 - Spring - Part 3 - AOP
Ad

Viewers also liked (13)

PPTX
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
PDF
Introduction into JavaFX
PPTX
Neo4J and Grails
PDF
Getting your Grails on
PPTX
PPT
Play framework
PDF
JavaFX Uni Parthenope
PPTX
Message Driven Architecture in Grails
ODP
JavaFX in Action Part I
PPTX
OpenJFX on Android and Devices
PDF
Building Java Desktop Apps with JavaFX 8 and Java EE 7
PPTX
Introduction to Scala
PDF
Visual Design with Data
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
Introduction into JavaFX
Neo4J and Grails
Getting your Grails on
Play framework
JavaFX Uni Parthenope
Message Driven Architecture in Grails
JavaFX in Action Part I
OpenJFX on Android and Devices
Building Java Desktop Apps with JavaFX 8 and Java EE 7
Introduction to Scala
Visual Design with Data
Ad

Similar to Effective JavaFX architecture with FxObjects (20)

PDF
JavaFX Enterprise
PDF
JavaFX Dependency Injection with FxContainer
PDF
JavaOne - The JavaFX Community and Ecosystem
PPTX
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
PDF
DataFX - JavaOne 2013
PDF
Java FX Part2
ODP
Java Fx Overview Tech Tour
PDF
JavaFX Enterprise (JavaOne 2014)
PDF
JavaFX, because you're worth it
PDF
JavaFX for Java Developers
PPT
JavaFX - Next Generation Java UI
PDF
The Brainify App - JavaFx
PDF
JavaFX 2 Rich Desktop Platform
PDF
Programming with JavaFX
PPT
PPT
Unit 1 informatica en ingles
PPT
Unit i informatica en ingles
PDF
Javafx tutorial
PDF
Javafx tutorial
JavaFX Enterprise
JavaFX Dependency Injection with FxContainer
JavaOne - The JavaFX Community and Ecosystem
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
DataFX - JavaOne 2013
Java FX Part2
Java Fx Overview Tech Tour
JavaFX Enterprise (JavaOne 2014)
JavaFX, because you're worth it
JavaFX for Java Developers
JavaFX - Next Generation Java UI
The Brainify App - JavaFx
JavaFX 2 Rich Desktop Platform
Programming with JavaFX
Unit 1 informatica en ingles
Unit i informatica en ingles
Javafx tutorial
Javafx tutorial

Recently uploaded (20)

PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Electronic commerce courselecture one. Pdf
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
Empathic Computing: Creating Shared Understanding
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
Cloud computing and distributed systems.
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
A comparative analysis of optical character recognition models for extracting...
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
The AUB Centre for AI in Media Proposal.docx
Unlocking AI with Model Context Protocol (MCP)
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Assigned Numbers - 2025 - Bluetooth® Document
Electronic commerce courselecture one. Pdf
NewMind AI Weekly Chronicles - August'25-Week II
Empathic Computing: Creating Shared Understanding
Per capita expenditure prediction using model stacking based on satellite ima...
sap open course for s4hana steps from ECC to s4
Advanced methodologies resolving dimensionality complications for autism neur...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
Spectral efficient network and resource selection model in 5G networks
Cloud computing and distributed systems.
Network Security Unit 5.pdf for BCA BBA.
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
A comparative analysis of optical character recognition models for extracting...

Effective JavaFX architecture with FxObjects

  • 1. Effective JavaFX Architecture with Presented by Srikanth Shenoy ObjectSource (Covers FxObjects 0.1)
  • 2. Introduction  Who am I?  A hands-on architect  Experienced and very knowledgeable in Java and Java EE  Authored a book on Struts  Several articles on Java EE for leading journals  Director of Enterprise Java Practice at ObjectSource  Creator of FxObjects framework
  • 3. Introduction  What is FxObjects? (Currently 0.1)  An open source JavaFX application development framework (Apache License)  Why FxObjects?  Enterprise JavaFX architect/developer starts from scratch, reinventing the wheel, wasting time and repeating mistakes  Enterprise JavaFX applications need a strategic and functional framework (not a point solution).  FxObjects is that strategic functional framework !  Learn FxObjects in 25 slides !
  • 5. Introduction  FxObjects is the end to end application development framework in the UI tier.  Designed to simplify large JavaFX application development  Makes your application elegant by using proven patterns, principles and practices  If you use FxObjects as defined in the user guide, your application becomes inherently test friendly
  • 6. Introduction  FxObjects is Dependency Injection (DI) friendly from the grounds-up.  Tested with Spring 2.5  Dependency Injection + FxObjects makes a very powerful and agile programming model  FxObjects makes TDD possible with JavaFX by using Model-View-Presenter (MVP)  FxObjects is NOT a UI component library (and never intends to be).
  • 7. Model-View-Presenter (Passive View)  Note the sequence of events in MVP passive View  Actual UI is lean, mean and clean   Presenter does the heavy lifting on the UI side. But Presenter is not really a UI !!  Hence Presenter can be easily tested and asserted
  • 8. MVP with FxObjects  NodePresenter is the FxObjects class.  MyNodePresenter and MyNode are app classes & hold reference to each other  When a event occurs, the MyNode simply calls doOnSearchButtonClick()
  • 9. Presenter Code  doSearchButtonClick method  Validates UI (for mandatory fields)  Calls the service asynchronously using FxObjects Command classes  That’s it!  You will see FxObjects Commands next  For aiding the async service calls  Update the UI when async calls return data  Show error message when service call fails
  • 10. Challenges in Service Invocation  Async calls are fire and forget  They should execute off the Event Dispatch Thread (EDT)  All UI updates should then again occur ON the EDT.  Can be confusing and errror-prone  Swing provided SwingWorker  JavaFX provides a async framework  Slightly complex, but FXObjects simplifies this
  • 12. Challenges in Service Invocation (contd.)  HttpRequest (core JavaFX class) has some solution (async call is off-EDT & callbacks are on-EDT), but it is the foundation for a full solution  FxObjects HttpCommands provide the missing pieces to make this simple  How to easily go to another page v/s stay on same page after service invocation?  FxObjects solves this, as we shall see soon (controller chain)
  • 13. Command objects  Command objects are configured first and then executed [with execute(..) method] var cmd = DefaultAsyncCommand { runInBackground: function(modelObj:Object):Object { //call service here } onSuccess: function(resultObj:Object):Void { //update ui widgets here OR navigate to another UI } onError: function(e:Exception):Void { //show the error } }
  • 14. Automating XML to JavaFX  No Xml tag handling code necessary  Use XmlResponseBuilder  Called ResponseBuilder since it was initially built to construct JavaFX objects from XML content (returned by REST services)  Can handle XML of any type and of any depth  Scales well for all kinds of xml  Best suited for small JavaFX apps though  Larger apps can use JAXBResponseBuilder
  • 15. Automating JavaFX to XML  No code necessary  Use XmlRequestBuilder  Called RequestBuilder since it was initially built to construct XML from JavaFX objects to be sent as request body to REST services  Can handle JavaFX objects of any type and of any depth  Scales well for JavaFX objects of any kind  Best suited for small JavaFX apps  Larger apps can use JAXBRequestBuilder
  • 16. HttpCommands and Builders  Just like DefaultAsyncCommand  No runInBackground necessary. [Http GET/POST themselves run in background !!]  Url & query parameters are configurable with { } syntax  e.g. http://server/app/search?zipCode={zipCode}  The params in {} can be passed in a Map  Otherwise reflection is used to query the object  Need RequestBuilder and ResponseBuilder  XML***Builder or JAXB***Builder
  • 17. GetHttpCommand var respBuilder = new MyJAXBResponseBuilder(); respBuilder.setSchema(…); var cmd = GetHttpCommand { urlTemplate: “http://.../Search?output=xml&zip={zipCode}&.. responseBuilder: respBuilder onSuccess: function(resultData:Object) { var result = resultData as ResultSet; //update UI components here OR navigate to another UI } onError: function(e:Exception) { .. } } .. function doSearchButtonClick() { var paramMap = new HashMap(); paramMap.put(“zipCode”, node.zipCodeTxtBox.text); cmd.execute(paramMap); }
  • 18. Custom JAXB Response Builder public class CafeSearchResponseBuilder extends JAXBResponseBuilder<ResultSet> { @Override public ResultSet buildResponse(String serverResponse) { ResultSet rs = buildResponseObjectFromXml(serverResponse); return rs; } @Override public ResultSet buildResponse(InputStream inputStream) { ResultSet rs = buildResponseObjectFromXml(inputStream); return rs; } }
  • 19. BodyHttpCommand  Use for PUT and POST  Almost same as GetHttpCommand  Additionally needs RequestBuilder  To convert the presentation model object into format expected by server (Generaly XML)  Optionally a content pre-processor  To massage the output from the requestbuilder and before sending to server
  • 20. Navigation challenges  How to go to another page v/s stay on same page after service invocation succeeds?  Default JavaFX model involves binding to a new scenegraph  Couples the lower level UI to top level stage.  No idioms for organizing the application into modules  Who decides what is the default node to display?  Solution: FxObjects ControllerChain
  • 22. Navigation with FxObjects Controller Chain  Each Application can hold many Presenters  Each Application can have many Modules  Each Module can hold many Presenters  Application has a Application Controller  Each Module has a Module Controller.  Module Controller has a Id  Each NodePresenter owns the Node  Node Presenter has a Id
  • 23. Navigation with FxObjects Controller Chain (contd.) public MyNodePresenter extends NodePresenter var cmd = DefaultAsyncCommand { runInBackground:function(modelObj:Object):Object { //call service here } onSuccess: function(resultObj:Object):Void { //update ui here OR go to another page this.changeNodePresenter(“someNodePresenterId”); } onError: function(e:Exception):Void { //show the error } } changeNodePresenter(..) is defined in NodePresenter class (the parent)
  • 24. FxObjects and Dependency Injection  FxObjects is built with Dependency Injection in mind.  DI is optional, but recommended  What can be wired  ApplicationController, ModuleController  NodePresenter (but not Nodes)  Commands, Services (Service Proxies)  Nodes should be maintained by Presenters.  This lets presenters choose appropriate node handling strategy (cache, dispose after use etc.)
  • 25. Bootstrapping FxObjects var ctx = new ClassPathXmlApplicationContext(“/your-spring.xml"); var appController = ctx.getBean("appController") as ApplicationController; Stage { title: "FxObjects Example“ scene: Scene { width: 600 height: 400 content: bind [ appController.currentNodePresenter.getNode() ] } }  Node presenter configured as default is shown at the beginning  Every navigation call sets another NodePresenter as the “Current” NodePresenter and that gets bound to the scenegraph
  • 26. What’s coming in 0.2?  Lifecycle  Event  Event Bus  Security  JSON to JavaFX round-tripping  Suggestions welcome (Please post in the discussion forums)  Timeframe: September 2010
  • 27. FxObjects Summary  Enterprise JavaFX applications are inherently complex.  Architecting such apps is art and science  FxObjects can help  The more complex the application, the more value you get from FxObjects  End to end programming model for the UI  Does not force any programming model for the server
  • 28. Links  Project site – https://fxobjects/dev.java.net  Not a single person open source project  FxObjects is developed and supported by ObjectSource (http://www.objectsource.com)  Download, use, extend, redistribute, OEM  Discussion Forums on project site  We will answer your questions  Participation welcome  Post ideas, questions, concerns, comments  Contribute code