SlideShare a Scribd company logo
1 of 42
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: ,[object Object],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.comphotosmember14bamember_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

More Related Content

What's hot

Beginning PHPUnit
Beginning PHPUnitBeginning PHPUnit
Beginning PHPUnit
Jace Ju
 
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STMConcurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
Mario Fusco
 

What's hot (20)

How to fake_properly
How to fake_properlyHow to fake_properly
How to fake_properly
 
ZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in ScalaZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in Scala
 
Testing My Patience
Testing My PatienceTesting My Patience
Testing My Patience
 
Java_practical_handbook
Java_practical_handbookJava_practical_handbook
Java_practical_handbook
 
Spring hibernate jsf_primefaces_intergration
Spring hibernate jsf_primefaces_intergrationSpring hibernate jsf_primefaces_intergration
Spring hibernate jsf_primefaces_intergration
 
Asynchronous JS in Odoo
Asynchronous JS in OdooAsynchronous JS in Odoo
Asynchronous JS in Odoo
 
Creating Lazy stream in CSharp
Creating Lazy stream in CSharpCreating Lazy stream in CSharp
Creating Lazy stream in CSharp
 
Java PRACTICAL file
Java PRACTICAL fileJava PRACTICAL file
Java PRACTICAL file
 
Beginning PHPUnit
Beginning PHPUnitBeginning PHPUnit
Beginning PHPUnit
 
Spock framework
Spock frameworkSpock framework
Spock framework
 
Meck at erlang factory, london 2011
Meck at erlang factory, london 2011Meck at erlang factory, london 2011
Meck at erlang factory, london 2011
 
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STMConcurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
 
Ad java prac sol set
Ad java prac sol setAd java prac sol set
Ad java prac sol set
 
inception.docx
inception.docxinception.docx
inception.docx
 
jframe, jtextarea and jscrollpane
  jframe, jtextarea and jscrollpane  jframe, jtextarea and jscrollpane
jframe, jtextarea and jscrollpane
 
Chat application in java using swing and socket programming.
Chat application in java using swing and socket programming.Chat application in java using swing and socket programming.
Chat application in java using swing and socket programming.
 
Zio from Home
Zio from Home Zio from Home
Zio from Home
 
Advanced PHPUnit Testing
Advanced PHPUnit TestingAdvanced PHPUnit Testing
Advanced PHPUnit Testing
 
Advanced Java - Praticals
Advanced Java - PraticalsAdvanced Java - Praticals
Advanced Java - Praticals
 
Finagle and Java Service Framework at Pinterest
Finagle and Java Service Framework at PinterestFinagle and Java Service Framework at Pinterest
Finagle and Java Service Framework at Pinterest
 

Viewers also liked

JFXtras - JavaFX Controls, Layout, Services, and More
JFXtras - JavaFX Controls, Layout, Services, and MoreJFXtras - JavaFX Controls, Layout, Services, and More
JFXtras - JavaFX Controls, Layout, Services, and More
Stephen Chin
 

Viewers also liked (7)

Raspberry Pi Gaming 4 Kids (Devoxx4Kids)
Raspberry Pi Gaming 4 Kids (Devoxx4Kids)Raspberry Pi Gaming 4 Kids (Devoxx4Kids)
Raspberry Pi Gaming 4 Kids (Devoxx4Kids)
 
Confessions of a Former Agile Methodologist (JFrog Edition)
Confessions of a Former Agile Methodologist (JFrog Edition)Confessions of a Former Agile Methodologist (JFrog Edition)
Confessions of a Former Agile Methodologist (JFrog Edition)
 
Oracle IoT Kids Workshop
Oracle IoT Kids WorkshopOracle IoT Kids Workshop
Oracle IoT Kids Workshop
 
Devoxx4Kids NAO Workshop
Devoxx4Kids NAO WorkshopDevoxx4Kids NAO Workshop
Devoxx4Kids NAO Workshop
 
Devoxx4Kids Lego Workshop
Devoxx4Kids Lego WorkshopDevoxx4Kids Lego Workshop
Devoxx4Kids Lego Workshop
 
JavaFX and WidgetFX at SVCodeCamp
JavaFX and WidgetFX at SVCodeCampJavaFX and WidgetFX at SVCodeCamp
JavaFX and WidgetFX at SVCodeCamp
 
JFXtras - JavaFX Controls, Layout, Services, and More
JFXtras - JavaFX Controls, Layout, Services, and MoreJFXtras - JavaFX Controls, Layout, Services, and More
JFXtras - JavaFX Controls, Layout, Services, and More
 

Similar to Pro Java Fx – Developing Enterprise Applications

Tdd for BT E2E test community
Tdd for BT E2E test communityTdd for BT E2E test community
Tdd for BT E2E test community
Kerry Buckley
 
Java căn bản - Chapter5
Java căn bản - Chapter5Java căn bản - Chapter5
Java căn bản - Chapter5
Vince Vo
 
C-Sharp Arithmatic Expression Calculator
C-Sharp Arithmatic Expression CalculatorC-Sharp Arithmatic Expression Calculator
C-Sharp Arithmatic Expression Calculator
Neeraj Kaushik
 
Software Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW SydneySoftware Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW Sydney
julien.ponge
 
J unit presentation
J unit presentationJ unit presentation
J unit presentation
Priya Sharma
 

Similar to Pro Java Fx – Developing Enterprise Applications (20)

J Unit
J UnitJ Unit
J Unit
 
Tdd for BT E2E test community
Tdd for BT E2E test communityTdd for BT E2E test community
Tdd for BT E2E test community
 
Pi j1.3 operators
Pi j1.3 operatorsPi j1.3 operators
Pi j1.3 operators
 
Developer Tests - Things to Know (Vilnius JUG)
Developer Tests - Things to Know (Vilnius JUG)Developer Tests - Things to Know (Vilnius JUG)
Developer Tests - Things to Know (Vilnius JUG)
 
GeeCON 2012 Bad Tests, Good Tests
GeeCON 2012 Bad Tests, Good TestsGeeCON 2012 Bad Tests, Good Tests
GeeCON 2012 Bad Tests, Good Tests
 
Java căn bản - Chapter5
Java căn bản - Chapter5Java căn bản - Chapter5
Java căn bản - Chapter5
 
Confitura 2012 Bad Tests, Good Tests
Confitura 2012 Bad Tests, Good TestsConfitura 2012 Bad Tests, Good Tests
Confitura 2012 Bad Tests, Good Tests
 
How to write clean tests
How to write clean testsHow to write clean tests
How to write clean tests
 
Simple Java Programs
Simple Java ProgramsSimple Java Programs
Simple Java Programs
 
Simple Java Programs
Simple Java ProgramsSimple Java Programs
Simple Java Programs
 
C-Sharp Arithmatic Expression Calculator
C-Sharp Arithmatic Expression CalculatorC-Sharp Arithmatic Expression Calculator
C-Sharp Arithmatic Expression Calculator
 
ParallelProgrammingBasics_v2.pdf
ParallelProgrammingBasics_v2.pdfParallelProgrammingBasics_v2.pdf
ParallelProgrammingBasics_v2.pdf
 
Code igniter unittest-part1
Code igniter unittest-part1Code igniter unittest-part1
Code igniter unittest-part1
 
From typing the test to testing the type
From typing the test to testing the typeFrom typing the test to testing the type
From typing the test to testing the type
 
Developer Test - Things to Know
Developer Test - Things to KnowDeveloper Test - Things to Know
Developer Test - Things to Know
 
Test Infected Presentation
Test Infected PresentationTest Infected Presentation
Test Infected Presentation
 
Software Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW SydneySoftware Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW Sydney
 
J unit presentation
J unit presentationJ unit presentation
J unit presentation
 
JUnit Presentation
JUnit PresentationJUnit Presentation
JUnit Presentation
 
How To Test Everything
How To Test EverythingHow To Test Everything
How To Test Everything
 

More from Stephen Chin

Raspberry pi gaming 4 kids
Raspberry pi gaming 4 kidsRaspberry pi gaming 4 kids
Raspberry pi gaming 4 kids
Stephen Chin
 

More from Stephen Chin (20)

DevOps Tools for Java Developers v2
DevOps Tools for Java Developers v2DevOps Tools for Java Developers v2
DevOps Tools for Java Developers v2
 
10 Ways Everyone Can Support the Java Community
10 Ways Everyone Can Support the Java Community10 Ways Everyone Can Support the Java Community
10 Ways Everyone Can Support the Java Community
 
Java Clients and JavaFX: The Definitive Guide
Java Clients and JavaFX: The Definitive GuideJava Clients and JavaFX: The Definitive Guide
Java Clients and JavaFX: The Definitive Guide
 
DevOps Tools for Java Developers
DevOps Tools for Java DevelopersDevOps Tools for Java Developers
DevOps Tools for Java Developers
 
Java Clients and JavaFX - Presented to LJC
Java Clients and JavaFX - Presented to LJCJava Clients and JavaFX - Presented to LJC
Java Clients and JavaFX - Presented to LJC
 
RetroPi Handheld Raspberry Pi Gaming Console
RetroPi Handheld Raspberry Pi Gaming ConsoleRetroPi Handheld Raspberry Pi Gaming Console
RetroPi Handheld Raspberry Pi Gaming Console
 
JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)
 
Raspberry Pi with Java (JJUG)
Raspberry Pi with Java (JJUG)Raspberry Pi with Java (JJUG)
Raspberry Pi with Java (JJUG)
 
Confessions of a Former Agile Methodologist
Confessions of a Former Agile MethodologistConfessions of a Former Agile Methodologist
Confessions of a Former Agile Methodologist
 
Internet of Things Magic Show
Internet of Things Magic ShowInternet of Things Magic Show
Internet of Things Magic Show
 
Zombie Time - JSR 310 for the Undead
Zombie Time - JSR 310 for the UndeadZombie Time - JSR 310 for the Undead
Zombie Time - JSR 310 for the Undead
 
JCrete Embedded Java Workshop
JCrete Embedded Java WorkshopJCrete Embedded Java Workshop
JCrete Embedded Java Workshop
 
OpenJFX on Android and Devices
OpenJFX on Android and DevicesOpenJFX on Android and Devices
OpenJFX on Android and Devices
 
Java on Raspberry Pi Lab
Java on Raspberry Pi LabJava on Raspberry Pi Lab
Java on Raspberry Pi Lab
 
Java 8 for Tablets, Pis, and Legos
Java 8 for Tablets, Pis, and LegosJava 8 for Tablets, Pis, and Legos
Java 8 for Tablets, Pis, and Legos
 
DukeScript
DukeScriptDukeScript
DukeScript
 
Raspberry Pi Gaming 4 Kids - Dutch Version
Raspberry Pi Gaming 4 Kids - Dutch VersionRaspberry Pi Gaming 4 Kids - Dutch Version
Raspberry Pi Gaming 4 Kids - Dutch Version
 
Raspberry pi gaming 4 kids
Raspberry pi gaming 4 kidsRaspberry pi gaming 4 kids
Raspberry pi gaming 4 kids
 
Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)
 
Raspberry Pi à la GroovyFX
Raspberry Pi à la GroovyFXRaspberry Pi à la GroovyFX
Raspberry Pi à la GroovyFX
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 

Pro Java Fx – Developing Enterprise Applications

  • 1. Pro JavaFX – Developing Enterprise Applications Stephen Chin Inovis, Inc.
  • 2. 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
  • 3. LearnFX and Win at Devoxx Tweet to answer: @projavafxcourse your-answer-here 3
  • 4. 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. 5 JFXtras Layouts and Controls HttpRequest { location: http://steveonjava.com/ onResponseMessage: function(m) { println(m); FX.exit() }}.start(); @projavafxcourse answer
  • 6. JFXtras 0.6 Controls XCalendarPicker XMenu XMultiLineTextBox XPane XPasswordPane XPicker XScrollView XShelfView XSpinnerWheel XTableView XTreeView 6
  • 7. XPicker Multiple Picker Types Side Scroll Drop Down Thumb Wheel Side/Thumb Nudge Supports All Events Mouse Clicks Mouse Wheel Keyboard 7
  • 8. XCalendarPicker Configurable Locale Multiple Selection Modes Single Multiple Range Completely Skinnable 8
  • 10. XShelfView High Performance Features: Scrollbar Image Title Reflection Effect Aspect Ratio Infinite Repeat Integrates With JFXtras Data Providers Automatically Updates on Model Changes 10
  • 11. XTreeView Hierarchical data representation Supports JFXtras Data Model Can add arbitrary nodes Vertical and horizontal scrollbars Mouse wheel navigation 11
  • 12. 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
  • 13. 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
  • 14. JFXtras 0.6 Release Date: 11/23/2009 14 Open Source Project (BSD License) Join and help us out at: http://jfxtras.org/
  • 15. 15 Testing With FEST-JavaFX HttpRequest { location: http://steveonjava.com/ onResponseMessage: function(m) { println(m); FX.exit() }}.start(); @projavafxcourse answer
  • 16. 16 Mike Cohn’s Testing Pyramid Robot (coming soon) BDD Fluent Assertions
  • 17. Basic Test Format Test { say: "A sequence should initially be empty" do: function() { varsequence:String[]; return sequence.size(); } expect: equalTo(0) }.perform(); 17
  • 18.
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. Run Tests in JUnitPart 3: Execute Ant Script 27
  • 28. 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
  • 29. 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.comphotosmember14bamember_5333306.jpeg","response":"no","name":"Andres Almiray","comment":"Can't make it :-("} ]} 29
  • 30. 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
  • 31. JUG Prize Spinner Demo 31 Featured in: Enterprise Web 2.0 Fundamentals By Oswald Campesato& Kevin Nilson
  • 33. Use Case: Tracking Agile Development 33
  • 34. Architecture: WidgetFX Framework Reasons for choosing WidgetFX: Supports Widgets in JavaFX and Java Commercial Friendly Open-Source Robust Security Model Cross-platform Support 34
  • 35. Design: Using the Production Suite 1 35
  • 36. Design: Using the Production Suite 2 36
  • 37. 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
  • 38. 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
  • 40. 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
  • 41. LearnFX and Win at Devoxx 41
  • 42. 42 Thank You Stephen Chin http://steveonjava.com/ Tweet: steveonjava