Pro Java Fx – Developing Enterprise Applications
Upcoming SlideShare
Loading in...5
×
 

Pro Java Fx – Developing Enterprise Applications

on

  • 6,104 views

Pro JavaFX - Developing Enterprise Applications talk given at Devoxx 2009 in Antwerp, Belgium.

Pro JavaFX - Developing Enterprise Applications talk given at Devoxx 2009 in Antwerp, Belgium.

Statistics

Views

Total Views
6,104
Slideshare-icon Views on SlideShare
3,100
Embed Views
3,004

Actions

Likes
0
Downloads
40
Comments
0

9 Embeds 3,004

http://steveonjava.wordpress.com 2399
http://steveonjava.com 417
http://javafx.steveonjava.com 152
http://www.slideshare.net 15
http://translate.googleusercontent.com 11
https://steveonjava.wordpress.com 5
http://www.linkedin.com 3
http://209.85.129.132 1
url_unknown 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Pro Java Fx – Developing Enterprise Applications Pro Java Fx – Developing Enterprise Applications Presentation Transcript

    • Pro JavaFX – Developing Enterprise Applications
      Stephen Chin
      Inovis, Inc.
    • About the Presenter
      Director SWE, Inovis, Inc.
      Open-Source JavaFX Hacker
      MBA
      Belotti Award
      UberScrumMaster
      XP Coach
      Agile Evangelist
      WidgetFX
      JFXtras
      FEST-JavaFX
      Piccolo2D
      Java Champion
      JavaOneRockstar
      JUG Leader
      Pro JavaFX Author
      2
      Family Man
      Motorcyclist
    • LearnFX and Win at Devoxx
      Tweet to answer:
      @projavafxcourse your-answer-here
      3
    • Enterprise JavaFX Agenda
      JFXtras Layouts and Controls
      Automated JavaFX Testing
      Sample Enterprise Applications
      4
      HttpRequest {
      location: http://steveonjava.com/
      onResponseMessage: function(m) {
      println(m); FX.exit()
      }}.start();
      @projavafxcourse answer
      4
    • 5
      JFXtras Layouts and Controls
      HttpRequest {
      location: http://steveonjava.com/
      onResponseMessage: function(m) {
      println(m); FX.exit()
      }}.start();
      @projavafxcourse answer
    • JFXtras 0.6 Controls
      XCalendarPicker
      XMenu
      XMultiLineTextBox
      XPane
      XPasswordPane
      XPicker
      XScrollView
      XShelfView
      XSpinnerWheel
      XTableView
      XTreeView
      6
    • XPicker
      Multiple Picker Types
      Side Scroll
      Drop Down
      Thumb Wheel
      Side/Thumb Nudge
      Supports All Events
      Mouse Clicks
      Mouse Wheel
      Keyboard
      7
    • XCalendarPicker
      Configurable Locale
      Multiple Selection Modes
      Single
      Multiple
      Range
      Completely Skinnable
      8
    • JFXtras Data Providers
      9
    • XShelfView
      High Performance
      Features:
      Scrollbar
      Image Title
      Reflection Effect
      Aspect Ratio
      Infinite Repeat
      Integrates With JFXtras Data Providers
      Automatically Updates on Model Changes
      10
    • XTreeView
      Hierarchical data representation
      Supports JFXtras Data Model
      Can add arbitrary nodes
      Vertical and horizontal scrollbars
      Mouse wheel navigation
      11
    • XTableView
      Insanely Scalable
      Up to 16 million rows
      Extreme Performance
      Pools rendered nodes
      Caches images
      Optimized scene graph
      Features:
      Drag-and-Drop Column Reordering
      Dynamic Updating from Model
      Automatically Populates Column Headers
      Fully Styleablevia CSS
      12
    • SpeedReaderFX
      Written by Jim Weaver
      Read News, Twitter, and RSS in one place!
      Showcases use of JFXtras Layouts and Controls
      XMenu
      XTableView
      XPicker
      Contributed back to the JFXtras Samples Project
      13
    • JFXtras 0.6 Release Date: 11/23/2009
      14
      Open Source Project (BSD License)
      Join and help us out at:
      http://jfxtras.org/
    • 15
      Testing With FEST-JavaFX
      HttpRequest {
      location: http://steveonjava.com/
      onResponseMessage: function(m) {
      println(m); FX.exit()
      }}.start();
      @projavafxcourse answer
    • 16
      Mike Cohn’s Testing Pyramid
      Robot
      (coming soon)
      BDD
      Fluent
      Assertions
    • Basic Test Format
      Test {
      say: "A sequence should initially be empty"
      do: function() {
      varsequence:String[];
      return sequence.size();
      }
      expect: equalTo(0)
      }.perform();
      17
    • Fluent Assertions
      lessThanOrCloseTo
      greaterThanOrCloseTo
      lessThanOrEqualTo
      greaterThanorEqualTo
      typeIs
      instanceOf
      anything
      is
      isNot
      equalTo
      closeTo
      greaterThan
      18
      Make sure to include this static import:
      • import org.jfxtras.test.Expect.*;
      And then chain any of these assertions:
    • Fluent Assertion Examples
      isNot(null)
      isNot(closeTo(floor(i*1.5)))
      lessThanOrEqualTo(2.0)
      greaterThanOrCloseTo(123.10, 0.0100000)
      isNot(lessThanOrCloseTo(2.1435, 0.00011))
      typeIs("org.jfxtras.test.UserXException")
      instanceOf(UserXException{}.getJFXClass())
      19
    • Testing Quiz: Which test will fail?
      20
      varseq = [1, 3, 5, 7, 9];
      Test {
      say: "ranges"
      do: function() {
      seq[0..2]
      }
      expect: equalTo([1, 3, 5])
      }
      Test {
      say: "exclusive ends"
      do: function() {
      seq[0..<2]
      }
      expect: equalTo([1, 3])
      }
      Test {
      say: "open ends"
      do: function() {
      seq[2..]
      }
      expect: equalTo([5])
      }
      Test {
      say: "open exclusive ends"
      do: function() {
      seq[2..<]
      }
      expect: equalTo([5, 7])
      }
      1
      2
      3
      4
    • Parameterized Testing
      Test {
      say: "A Calculator should"
      var calculator = Calculator {}
      test: [
      for (a in [0..9], b in [0..9]) {
      Test {
      say: "add {a} + {b}"
      do: function() {calculator.add(a, b)}
      expect: equalTo("{a + b}")
      }
      }
      ]
      }.perform();
      21
    • Parameterized Testing - Output
      test: A Calculator should add 0 + 0.
      test: A Calculator should add 0 + 1.
      test: A Calculator should add 0 + 2.
      test: A Calculator should add 0 + 3.
      test: A Calculator should add 0 + 4.
      test: A Calculator should add 0 + 5.
      test: A Calculator should add 0 + 6.
      test: A Calculator should add 0 + 7.
      test: A Calculator should add 0 + 8.
      test: A Calculator should add 0 + 9.
      test: A Calculator should add 1 + 0.
      ...
      Test Results: 100 passed, 0 failed, 0 skipped.
      Test run was successful!
      22
    • Parameterized Testing with Assume
      Test {
      say: "A Calculator should"
      var calculator = Calculator {}
      test: [
      for (aInt in [0..9], bInt in [1..9]) {
      var a = aInt as Number;
      var b = bInt as Number;
      [
      Test {
      assume: that(a / b, closeTo(floor(a / b)))
      say: "divide {a} / {b} without a decimal"
      do: function() {calculator.divide(a, b)}
      expect: equalTo("{(a / b) as Integer}")
      },
      Test {
      assume: that(a / b, isNot(closeTo(floor(a / b))))
      say: "divide {a} / {b} with a decimal"
      do: function() {calculator.divide(a, b)}
      expect: equalTo("{a / b}")
      }
      ]
      }
      ]
      }.perform();
      23
    • Parameterized Testing with Assume - Output
      test: A Calculator should divide 0.0 / 1.0 without a decimal.
      test: A Calculator should divide 0.0 / 2.0 without a decimal.
      test: A Calculator should divide 0.0 / 3.0 without a decimal.
      test: A Calculator should divide 0.0 / 4.0 without a decimal.
      test: A Calculator should divide 0.0 / 5.0 without a decimal.
      test: A Calculator should divide 0.0 / 6.0 without a decimal.
      test: A Calculator should divide 0.0 / 7.0 without a decimal.
      test: A Calculator should divide 0.0 / 8.0 without a decimal.
      test: A Calculator should divide 0.0 / 9.0 without a decimal.
      test: A Calculator should divide 1.0 / 1.0 without a decimal.
      test: A Calculator should divide 1.0 / 2.0 with a decimal.
      test: A Calculator should divide 1.0 / 3.0 with a decimal.
      test: A Calculator should divide 1.0 / 4.0 with a decimal.
      test: A Calculator should divide 1.0 / 5.0 with a decimal.
      test: A Calculator should divide 1.0 / 6.0 with a decimal.
      test: A Calculator should divide 1.0 / 7.0 with a decimal.
      test: A Calculator should divide 1.0 / 8.0 with a decimal.
      test: A Calculator should divide 1.0 / 9.0 with a decimal.
      ...
      Test Results: 90 passed, 0 failed, 90 skipped.
      Test run was successful!
      24
    • Run Tests in JUnitPart 1: Extend Test
      public class BasicTest extends Test {}
      public function run() {
      Test {
      say: "A sequence should initially be empty"
      do: function() {
      varsequence:String[];
      return sequence.size();
      }
      expect: equalTo(0)
      }.perform();
      }
      25
    • Run Tests in JUnitPart 2: Create Ant Target
      26
      Run off classes dir
      Exclude inner classes
      <junitdir="${work.dir}"fork="true"showoutput="true">
      <batchtesttodir="${build.test.results.dir}">
      <filesetdir="${build.classes.dir}"excludes="**/*$*.class"
      includes=" **/*?Test.class"/>
      </batchtest>
      <classpathrefid="test.classpath"/>
      <formattertype="brief"usefile="false"/>
      <formattertype="xml"/>
      </junit>
      Include class files ending in Test
    • Run Tests in JUnitPart 3: Execute Ant Script
      27
    • REST or SOAP – Have it your way!
      28
      Sample Enterprise Applications
      Soap bars in Lille, Northern France. 
      http://www.flickr.com/photos/gpwarlow/ / CC BY 2.0
    • Calling a REST Service
      REST URL:
      http://api.meetup.com/rsvps.json/event_id={eventId}&key={apiKey}
      Output:
      { "results": [
      {"zip":"94044","lon":"-122.48999786376953","photo_url":"http://photos1.meetupstatic.com/photos/member/1/4/b/a/member_5333306.jpeg","response":"no","name":"Andres Almiray","comment":"Can't make it :-("}
      ]}
      29
    • JUG Spinner - JSONHandler in 3 Steps
      public class Member {
      public varplace:Integer;
      public varphotoUrl:String;
      public varname:String;
      public varcomment:String;
      }
      varmemberParser:JSONHandler = JSONHandler {
        rootClass: "org.jfxtras.jugspinner.data.MemberSearch “
        onDone: function(obj, isSequence): Void {
          members = (obj as MemberSearch).results;
      }}
      req = HttpRequest {
      location: rsvpQuery
      onInput: function(is: java.io.InputStream) {
      memberParser.parse(is);
      }}
      30
      1
      POJfxO
      2
      JSONHandler
      3
      HttpRequest
    • JUG Prize Spinner Demo
      31
      Featured in:
      Enterprise Web 2.0 Fundamentals
      By Oswald Campesato& Kevin Nilson
    • 32
      Enterprise Widget Tutorial
    • Use Case: Tracking Agile Development
      33
    • Architecture: WidgetFX Framework
      Reasons for choosing WidgetFX:
      Supports Widgets in JavaFX and Java
      Commercial Friendly Open-Source
      Robust Security Model
      Cross-platform Support
      34
    • Design: Using the Production Suite 1
      35
    • Design: Using the Production Suite 2
      36
    • Develop: Binding the Code to Graphics
      Add the FXZ to your project
      Right click and Generate UI stub
      Choose a filename and generate
      Construct a UI Node and add it to the Scene:
      varrallyWidgetUI:RallyWidgetUI = RallyWidgetUI{}
      37
    • Develop: Calling SOAP From JavaFX
      Generate SOAP Stubs off WSDL:
      WSDL2Java -uriRally.wsdl-o src-p rallyws.api
      Create a new Service:
      rallyService= new RallyServiceServiceLocator().getRallyService();
      Invoke the Service from Java or JavaFX:
      QueryResult result = rallyService.query(null, "Iteration", queryString, "Name", true, 0, 100); or JavaFX code:
      38
    • RallyWidget Demo
      39
    • JavaFXpert RIA Exemplar Challenge
      "Create an application in JavaFX that exemplifies the appearance and behavior of a next-generation enterprise RIA (rich internet application)".
      Grand Prize: $2,000 USD
      (split between a two-man graphics artist and application developer team)
      Deadline: 10 January, 2010
      For more info: http://learnjavafx.typepad.com/
      40
    • LearnFX and Win at Devoxx
      41
    • 42
      Thank You
      Stephen Chin
      http://steveonjava.com/
      Tweet: steveonjava