Your SlideShare is downloading. ×
XML-Free Programming
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

XML-Free Programming

2,541
views

Published on

Talk on using JavaEE 6 and JavaFX 2 together to write applications without XML. Given at JavaOne 2011 with Arun Gupta.

Talk on using JavaEE 6 and JavaFX 2 together to write applications without XML. Given at JavaOne 2011 with Arun Gupta.

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,541
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. XML-Free Programming : Java Server and Client Development Without <>
    Stephen Chin
    Chief Agile Methodologist, GXS
    steveonjava@gmail.com
    tweet: @steveonjava
    Arun Gupta
    Oracle Corporation
    arun.p.gupta@oracle.com
    tweet: @arungupta
  • 2. Meet the Presenters
    Stephen Chin
    Arun Gupta
    Community Guy
    Family Man
    Motorcyclist
    Marathoner
  • 3. Our Plan
    Quick (Humorous) History of Angle Brackets
    XML-Free Programming
    Configuration Lives with the Code
    Data Transfer Models the Domain
    Design Programming Languages for Humans
    JavaOne Speakers Application <Demo>
    3
  • 4. Exhibit A – Angle Bracket Sighting in Virginia, 1922
    Source: Library of Congress, Prints and Photographs Collection – Public Domain
    http://www.flickr.com/photos/pingnews/434444310/
    4
    >
    >
    >
  • 5. Exhibit B - Bermuda Tri-Angle Brackets
    Source: NOAA National Ocean Service – CC licensed
    http://www.flickr.com/photos/usoceangov/4276194691/sizes/o/in/photostream/
    5
    >
    >
    >
  • 6. Exhibit C – Tim Bray, Co-Founder of XML
    Source: Linux.com
    http://www.linux.com/archive/feature/133149
    6
    >
    >
    >
    >
  • 7. History of XML
    Based on Standard Generalized Markup Language (SGML)
    Created by a W3C working group of eleven members
    Version History:
    XML 1.0 (1998) – Widely adopted with 5 subsequent revisions
    XML 1.1 (2004) – Limited adoption
    7
  • 8. XML Design Goals (a.k.a. problems with SGML)
    Usable Over the Internet
    Support a Wide Variety of Applications
    Compatible with SGML
    Easy to Write Programs to Process XML Documents
    Minimum Number of Optional Features
    Documents Should be Human-Legible and Reasonably Clear
    Design Should be Prepared Quickly
    Design Should be Formal and Concise
    Documents Should be Easy to Create
    Terseness in Markup is of Minimal Importance
    8
  • 9. Design Goals Per Application
    9
  • 10. Tenet 1
    Configuration Lives with the Code
    10
  • 11. Letting Go of XML is Hard!
    11
    This is not intended as a replacement for Spring's XML format.
    Rod Johnson on Spring’s Annotations-based Configuration
    “A Java configuration option for Spring,” 11/28/06
  • 12. Java EE 6 Annotations
    @Stateless
    @Path
    @WebServlet
    @Inject
    @Named
    @Entity
    12
  • 13. But There is Hope!
    13
    You can have a Groovy DSL … it is as short as can be.
    Dierk Koenig on Canoo Web Test
    “Interview with Dierk Koenig,” ThirstyHead.com 6/3/2009
  • 14. Canoo Web Test Comparison
    XML
    Groovy Builder
    <project default="test">
    <target name="test">
    <webtest        name="Google WebTest Search">    <invoke url="http://www.google.com/ncr" />    <verifyTitle text="Google" />    <setInputField name="q" value="WebTest" />    <clickButton label="I'm Feeling Lucky" />    <verifyTitle text="Canoo WebTest" />  </webtest> </target></project>
    class SimpleTest extends WebtestCase { void testWebtestOnGoogle() {  webtest("Google WebTestSearch") {   invoke "http://www.google.com/ncr"   verifyTitle "Google"   setInputField name: "q", value: "WebTest"   clickButton "I'm Feeling Lucky"   verifyTitle "CanooWebTest"  } }}
    14
  • 15. Tenet 2
    Data Transfer Models the Domain
    15
  • 16. JavaScript Object Notation (JSON)
    Matches Relational/Object-Oriented Structures
    Easy to Read and Write
    Simple to Parse and Generate
    Familiar to Programmers of the C-family of languages:
    C, C++, C#, Java, JavaScript, Perl, Python, etc.
    Very Simple Specification
    16
  • 17. JSON Syntax in a Slide
    17
    Images courtesy: http://www.json.org/
  • 18. JAX-RS Sample
    18
    @GET
    @Produces({"application/json", "application/xml"})
    public List<Sezzion> findAll() {
    return super.findAll();
    }
    @GET
    @Path("{from}/{to}")
    @Produces({"application/xml", "application/json"})
    public List<Sezzion> findRange(@PathParam("from") Integer from, @PathParam("to") Integer to) {
    return super.findRange(new int[]{from, to});
    }
    @Stateless
    @Path("sezzion")
    public class SezzionFacadeREST extends AbstractFacade<Sezzion> {
    @PersistenceContext
    private EntityManagerem;
    @POST
    @Consumes({"application/json", "application/xml"})
    public void create(Sezzion entity) {
    super.create(entity);
    }
  • 19. Tenet 3
    Design Programming Languages for Humans
    19
  • 20. Counter Example – o:XML
    Created By Martin Klang in 2002
    Object Oriented Language
    Features:
    Poymorphism
    Function Overloading
    Exception Handling
    Threads
    20
    Diagram from: http://www.o-xml.org/documentation/o-xml-tool-chain.html
  • 21. String Replacement in o:XML vs. Java
    <?xml-stylesheethref="../xsl/default.xsl" type="text/xsl"?>
    <program>
    <o:function name="ex:replace">
    <o:param name="input" type="String"/>
    <o:param name="from" type="String"/>
    <o:param name="to" type="String"/>
    <o:do>
    <o:variable name="result"/>
    <o:while test="contains($input, $from)">
    <o:set result="concat($result, substring-before($input, $from), $to)"/>
    <o:set input="substring-after($input, $from)"/>
    </o:while>
    <o:return select="concat($result, $input)"/>
    </o:do>
    </o:function>
    </program>
    class Replace {
    public String replace(String input, String from, String to) {
    StringBuilder result = new StringBuilder();
    int last = 0;
    int index = 0;
    while ((index = input.indexOf(from, last)) != -1) {
    result.append(input.substring(last, index));
    result.append(to);
    last = index + from.length()
    }
    result.append(input.substring(last));
    return result.toString();
    }
    }
    21
    16 Lines
    461 Characters
    14 Lines
    319 Characters
  • 22. String Replacement in o:XML
    <?xml-stylesheethref="../xsl/default.xsl" type="text/xsl"?>
    <program>
    <o:function name="ex:replace">
    <o:param name="input" type="String"/>
    <o:param name="from" type="String"/>
    <o:param name="to" type="String"/>
    <o:do>
    <o:variable name="result"/>
    <o:while test="contains($input, $from)">
    <o:set result="concat($result, substring-before($input, $from), $to)"/>
    <o:set input="substring-after($input, $from)"/>
    </o:while>
    <o:return select="concat($result, $input)"/>
    </o:do>
    </o:function>
    </program>
    22
  • 23. Equivalent Java
    class Replace {
    public String replace(String input, String from, String to) {
    StringBuilder result = new StringBuilder();
    int last = 0;
    int index = 0;
    while ((index = input.indexOf(from, last)) != -1) {
    result.append(input.substring(last, index));
    result.append(to);
    last = index + from.length()
    }
    result.append(input.substring(last));
    return result.toString();
    }
    }
    23
  • 24. Simple Java
    class Replace {
    public String replace(String input, String from, String to) {
    return input.replaceAll(from, to)
    }
    }
    24
  • 25. JavaFX 2.0
    Powerful graphics, animation, and media capabilities
    Deploys in the browser or on desktop
    Includes builders for declarative construction
    Alternative languages can also be used for simpler UI creation
    GroovyFX
    ScalaFX
    Visage
    25
  • 26. 26
    Hello JavaOne (Java Version)
    public class HelloJavaOne extends Application {
    public static void main(String[] args) {
    launch(HelloJavaOne.class, args);
    }
    @Override
    public void start(Stage primaryStage) {
    primaryStage.setTitle("Hello JavaOne");
    Group root = new Group();
    Scene scene = new Scene(root, 400, 250, Color.ALICEBLUE);
    Text text = new Text();
    text.setX(105);
    text.setY(120);
    text.setFont(new Font(30));
    text.setText("Hello JavaOne");
    root.getChildren().add(text);
    primaryStage.setScene(scene);
    primaryStage.show();
    }
    }
  • 27. 27
    Hello JavaOne(Builder Version)
    public void start(Stage primaryStage) {
    primaryStage.setTitle("Hello JavaOne");
    primaryStage.setScene(SceneBuilder.create()
    .width(400)
    .height(250)
    .fill(Color.ALICEBLUE)
    .root(
    GroupBuilder.create().children(
    TextBuilder.create()
    .x(105)
    .y(120)
    .text("Hello JavaOne")
    .font(new Font(30))
    .build()
    ).build()
    )
    .build());
    primaryStage.show();
    }
  • 28. 28
    Hello JavaOne (GroovyFX Version)
    GroovyFX.start { primaryStage ->
    defsg = new SceneGraphBuilder()
    sg.stage(
    title: 'Hello JavaOne',
    show: true) {
    scene(
    fill: aliceblue,
    width: 400,
    height: 250) {
    text(
    x: 105,
    y: 120,
    text: "Hello JavaOne"
    font: "30pt")
    }
    }
    }
  • 29. 29
    Hello JavaOne (ScalaFX Version)
    object HelloJavaOne extends JFXApp {
    stage = new Stage {
    title = "Hello JavaFX"
    width = 400
    height = 250
    scene = new Scene {
    fill = BLUE
    Text {
    x = 105
    y = 120
    text = "Hello JavaOne"
    font = Font(size: 30)
    }
    }
    }
    }
  • 30. 30
    Hello JavaOne (Visage Version)
    Stage {
    title: "Hello JavaOne"
    width: 400
    height: 250
    scene: Scene {
    fill: BLUE
    content: Text {
    x: 105
    y: 120
    text: "Hello JavaOne"
    font: Font {size: 30pt}
    }
    }
    }
  • 31. JavaOne Speakers Application
    End-to-end application with no XML coding
    Server written using JavaEE 6 annotations
    Data transfer uses JSON
    Client written in JavaFX 2.0
    31
  • 32. Finished Application
    32
  • 33. Support the Freedom From XML Petition
    http://steveonjava.com/freedom-from-xml/
    Provide Non-XML Alternatives For:
    Declarative Programming
    Configuration
    Data Transfer
    33
    </>
    Sign the Petition Today!
  • 34. 34
    Stephen Chin
    steveonjava@gmail.com
    tweet: @steveonjava
    Arun Gupta
    arun.p.gupta@oracle.com
    tweet: @arungupta