• Like
  • Save
XML-Free Programming
Upcoming SlideShare
Loading in...5
×
 

XML-Free Programming

on

  • 2,437 views

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.

Statistics

Views

Total Views
2,437
Views on SlideShare
2,387
Embed Views
50

Actions

Likes
0
Downloads
13
Comments
0

3 Embeds 50

http://a0.twimg.com 20
http://paper.li 17
http://us-w1.rockmelt.com 13

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

    XML-Free Programming XML-Free Programming Presentation Transcript

    • 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
    • Meet the Presenters
      Stephen Chin
      Arun Gupta
      Community Guy
      Family Man
      Motorcyclist
      Marathoner
    • 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
    • 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
      >
      >
      >
    • 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
      >
      >
      >
    • Exhibit C – Tim Bray, Co-Founder of XML
      Source: Linux.com
      http://www.linux.com/archive/feature/133149
      6
      >
      >
      >
      >
    • 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
    • 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
    • Design Goals Per Application
      9
    • Tenet 1
      Configuration Lives with the Code
      10
    • 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
    • Java EE 6 Annotations
      @Stateless
      @Path
      @WebServlet
      @Inject
      @Named
      @Entity
      12
    • 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
    • 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
    • Tenet 2
      Data Transfer Models the Domain
      15
    • 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
    • JSON Syntax in a Slide
      17
      Images courtesy: http://www.json.org/
    • 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);
      }
    • Tenet 3
      Design Programming Languages for Humans
      19
    • 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
    • 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
    • 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
    • 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
    • Simple Java
      class Replace {
      public String replace(String input, String from, String to) {
      return input.replaceAll(from, to)
      }
      }
      24
    • 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
      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
      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
      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
      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
      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}
      }
      }
      }
    • 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
    • Finished Application
      32
    • 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
      Stephen Chin
      steveonjava@gmail.com
      tweet: @steveonjava
      Arun Gupta
      arun.p.gupta@oracle.com
      tweet: @arungupta