1   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
How Wicket, Scala, andJava EE Can ImproveWeb DevelopmentBruno BorgesOracle Product Manager for Latin AmericaJava EE, Glass...
Who am I?        Bruno Borges           Java developer since 2000           Speaker at Conferences                    – ...
Agenda         All about Web Development         Apache Wicket Overview         Introducing Scala and the Gamboa Wicket...
All About Web        Development5   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
6   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Web designing process and tools        Mock, draw, code7   Copyright © 2012, Oracle and/or its affiliates. All rights rese...
PREVIEW                                                                           IN THE            BROWSER8   Copyright ©...
All about Web Development        How do we build web sites and applications?           There are two ways to build web ap...
Outside the Java Web Framework Land         What are the technologies people use to build pixel-perfect sites?           ...
What about functional websites?         Component-based frameworks work better            Java Server Faces            G...
Java Frameworks for Pixel Perfect Websites         Frameworks that are good for pixel-perfect websites            JSP / S...
What if we could have a framework that doesn’t force us         to totally modify the work of a Web Designer for         p...
Imperative vs Declarative HTML Markup         What is the best HTML markup for pixel-perfect websites?            Pixel-p...
Imperative Markup          Before          <form action=”save”>            <input type=”text” name=”name” />            <i...
Does it run on the browser?         Not really…            Imperative frameworks that modify the prototype               ...
Declarative Markup          Before          <form action=”save”>            <input type=”text” name=”name” />            <...
Programmers and Developers         Happily Ever After…            Programmers focused on server-side programming         ...
Apache Wicket         Quick overview19   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
HTML Prototype         The final product from the Web Designer            /MyHomePage.html                      <html>    ...
HTML Prototype         The final product from the Web Designer            /MyHomePage.html                      <html>    ...
Java side         Where all the magic happens, object oriented           /MyHomePage.java            public class MyHomePa...
Easily Extensible                 Just add the JAR with extra                components to the classpath            Gmap2...
Apache Wicket         And so many other features            jQuery as its client-side engine for                     – Co...
Scala Language25   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Scala Language         Quick introduction            Object Oriented and Functional Language                             ...
Scala Language         Functions            They are objects as well                val func = () ⇒ println(“functional p...
Scala Language         Very smart constructions            They may seem complex, but you get used to them               ...
Scala Language         Very smart constructions               val listA =                                                 ...
Scala Language         Very smart constructions            val map = new HashMap[Int, String]              map += 1 → "Num...
Back to Wicket         Strong use of anonymous classes            Wicket programming model resembles Swing            Pu...
Wicket + Scala: perfect combination         Before, in Java           /MyHomePage.java            public class MyHomePage ...
Wicket + Scala: perfect combination         Now, with Scala            /MyHomePage.scala               class MyHomePage ex...
Wicket + Scala: perfect combination         Now with specific Scala DSL for Wicket            /MyHomePage.scala           ...
Java EE         for everything else35   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java EE 6         Filling the necessary gaps, extraordinarily well            Enterprise Java Beans            Contexts ...
And more stuff         Like…            GlassFish Maven Embedded Plugin            Derby DB            No more web.xml ...
No more web.xml         Servlet 3 and Scala                package code.webapp                import javax.servlet.annotat...
Getters/Setters generated         Scala’s @BeanProperty annotation           package code.data           import scala.refl...
Getters/Setters generated         Scala’s @BeanProperty annotation                package code.data                import ...
Gamboa Project         Great architecture, written an archetype must be!                                                  ...
Gamboa Project         Maven archetypes            Scala DSL for Wicket            3 archetypes                     – Ja...
Gamboa Project         Directory Structure: simplified for Web development           myproject $> tree            |-- src ...
Gamboa Demo         Group Birthday44   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Next time you choose a web framework, think not only          about features, but also about the web development          ...
QUESTIONS?46   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
THANK YOU!         @brunoborges         blogs.oracle.com/brunoborges47   Copyright © 2012, Oracle and/or its affiliates. A...
The preceding is intended to outline our general product direction. It is intended         for information purposes only, ...
49   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Upcoming SlideShare
Loading in...5
×

How Scala, Wicket, and Java EE Can Improve Web Development

3,642

Published on

1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total Views
3,642
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
25
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "How Scala, Wicket, and Java EE Can Improve Web Development"

  1. 1. 1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  2. 2. How Wicket, Scala, andJava EE Can ImproveWeb DevelopmentBruno BorgesOracle Product Manager for Latin AmericaJava EE, GlassFish, WebLogic, Coherence2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  3. 3. Who am I? Bruno Borges  Java developer since 2000  Speaker at Conferences – JustJava, JavaOne Brazil, The Developers Conference, ApacheCon  Evangelized Apache Camel and Apache Wicket in Brazil  Joined Oracle on July 2012 – Product Manager for Java EE, GlassFish and WebLogic  Married, lives in Sao Paulo, has a Golden Retriever, hiker and gamer3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  4. 4. Agenda  All about Web Development  Apache Wicket Overview  Introducing Scala and the Gamboa Wicket DSL  Java EE for everything  The Gamboa Project4 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  5. 5. All About Web Development5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  6. 6. 6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  7. 7. Web designing process and tools Mock, draw, code7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  8. 8. PREVIEW IN THE BROWSER8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  9. 9. All about Web Development How do we build web sites and applications?  There are two ways to build web applications – bottom-up  Mock up interfaces, develop using a web framework, apply design – top-down  Design pixel-perfect prototype, adapt prototype to a web framework,  There’s no web framework able to do both… productively speaking  Pixel-perfect websites vs functional websites9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  10. 10. Outside the Java Web Framework Land What are the technologies people use to build pixel-perfect sites?  Ruby on Rails  PHP  Python – Django Framework  JavaScript + REST – ExtJS – jQuery10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  11. 11. What about functional websites? Component-based frameworks work better  Java Server Faces  GWT, Vaadin  Apache Wicket  others  Better use the bottom up design strategy11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  12. 12. Java Frameworks for Pixel Perfect Websites Frameworks that are good for pixel-perfect websites  JSP / Servlets  Struts 2, Tapestry, Wicket  Java Server Faces, specifically Facelets  Play!, Lift  others  Better use the top down design strategy12 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  13. 13. What if we could have a framework that doesn’t force us to totally modify the work of a Web Designer for prototype?13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  14. 14. Imperative vs Declarative HTML Markup What is the best HTML markup for pixel-perfect websites?  Pixel-perfect websites are always top-down – A lot of work to add server-side code to the prototype – And it would be good for web designers to continue to have a functional prototype after server-side code is added  Imperative – Must change from raw HTML markup to specific web framework markup  Declarative – Annotates markup to be accessed, and modified, later by the framework14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  15. 15. Imperative Markup Before <form action=”save”> <input type=”text” name=”name” /> <input type=”submit” value=”Save” /> </form> After, using Apache Struts <s:form action=”save”> <s:input property=”name” /> <s:submit value=”Save” /> </s:form>15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  16. 16. Does it run on the browser? Not really…  Imperative frameworks that modify the prototype – Web designers loose ability to preview in the browser – They must install, configure and run  Servlet containers, Ruby, or PHP servers  You really don’t want web designers touching server-side code  Specially programmers modifying HTML or CSS elements to fix things16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  17. 17. Declarative Markup Before <form action=”save”> <input type=”text” name=”name” /> <input type=”submit” value=”Save” /> </form> After, using Apache Wicket <form wicket:id=”form”> <input type=”text” wicket:id=”name” /> <input type=”submit” value=”Save” wicket:id=”save” /> </form>17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  18. 18. Programmers and Developers Happily Ever After…  Programmers focused on server-side programming  Web Designers able to modify client-side without messing server-side  Preview in the browser  Customer happy to see (statically) how the application is progressing – Open Firefox, go to file:///home/customer/project/web/index.html18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  19. 19. Apache Wicket Quick overview19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  20. 20. HTML Prototype The final product from the Web Designer /MyHomePage.html <html> <head><title>Apache Wicket</title></head> <body> <span>some message</span> <form> Name: <input type=”text” /> Email: <input type=”text” /> <input type=”submit” value=”Send” /> </form> </body> </html>20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  21. 21. HTML Prototype The final product from the Web Designer /MyHomePage.html <html> <head><title>Apache Wicket</title></head> <body> <span wicket:id=”msg”>some message</span> <form wicket:id=”form”> Name: <input type=”text” wicket:id=”name” /> Email: <input type=”text” wicket:id=”email” /> <input type=”submit” value=”Send” /> </form> </body> </html>21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  22. 22. Java side Where all the magic happens, object oriented /MyHomePage.java public class MyHomePage extends WebPage { public HomePage() { add(new Label(“msg”, “JavaOne”)); Form form = new Form(“form”) { public void onSubmit() { usrBean.salvar(getModelObject()); }}; form.add(new TextField(“name”)); form.add(new TextField(“email”)); form.setModel(new CompoundPropertyModel(new User())); add(form); } }22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  23. 23. Easily Extensible  Just add the JAR with extra components to the classpath Gmap2 gmap = new Gmap2(“map”); page.add(gmap); <div wicket:id=”map”> Google Maps </div>23 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  24. 24. Apache Wicket And so many other features  jQuery as its client-side engine for – Core components – Ajax – WebSockets  Page composition by: Inheritance, Borders and Panels  Integration with CDI  Back button support  Several components, and also the WicketStuff Community24 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  25. 25. Scala Language25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  26. 26. Scala Language Quick introduction  Object Oriented and Functional Language var foo = 8  Runs on JVM foo = “bar”  Statically typed  Compiles to Java byte code (sweeeet)  Extensible Type mismatch; found: String(“bar”)  Easy to define custom DSLs required: Int26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  27. 27. Scala Language Functions  They are objects as well val func = () ⇒ println(“functional programming”) def callF(paramF: () ⇒ Unit) = paramF() callF(func)27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  28. 28. Scala Language Very smart constructions  They may seem complex, but you get used to them val list1to9 = 1 to 9 toList for (i ← list1to9) { print(i) } list1to9.foreach(i ⇒ print(i))28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  29. 29. Scala Language Very smart constructions val listA = List(1, 2) val listB = List(3, 4) val listC = listA :: listB // listC is a new List object val listD = listC :: 5 print(listD) // output: List(1,2,3,4,5)29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  30. 30. Scala Language Very smart constructions val map = new HashMap[Int, String] map += 1 → "Number 1" map += 2 → "Number 2" map += 3 → "Number 3" println(map(2)) // 2 is the key, not the index! val romans = Map(1 → "I", 2 → "II", 3 → "III", 4 → "IV", 5 → "V") println(romanNumeral(4)) // outputs: "IV"30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  31. 31. Back to Wicket Strong use of anonymous classes  Wicket programming model resembles Swing  Pushes developers to use anonymous, inner classes  Functional programming fits quite well into this model  Less code, less verbosity  Scala #win31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  32. 32. Wicket + Scala: perfect combination Before, in Java /MyHomePage.java public class MyHomePage extends WebPage { @Inject private MyService service; public MyHomePage() { add(new Label(“msg”, “JavaOne”)); Form form = new Form(“form”, new CompoudPropertyModel(new User())){ public void onSubmit() { service.update(getModelObject()); } }; form.add(new TextField(“name”)); form.add(new TextField(“email”)); add(form); } }32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  33. 33. Wicket + Scala: perfect combination Now, with Scala /MyHomePage.scala class MyHomePage extends WebPage { @Inject var service: MyService = _ add(new Label(“msg”, “JavaOne”)) object form extends Form(“form”, new CompoundPropertyModel(new User())) { add(new TextField(“name”)) add(new TextField(“email”)) override def onSubmit() = { service.update(getModelObject()) } } add(form) }33 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  34. 34. Wicket + Scala: perfect combination Now with specific Scala DSL for Wicket /MyHomePage.scala class MyHomePage extends WebPage with DSLWicket { @Inject var service: MyService = _ label(“msg”, “JavaOne”) val f = form(“form”, () ⇒ service.update(f.mobject)) f.scmodel(new User()) f.textField[String](“name”) f.textField[String](“email”) }34 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  35. 35. Java EE for everything else35 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  36. 36. Java EE 6 Filling the necessary gaps, extraordinarily well  Enterprise Java Beans  Contexts and Dependency Injection  Java Persistent API  Java Transaction API  Bean Validation  JAX-RS36 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  37. 37. And more stuff Like…  GlassFish Maven Embedded Plugin  Derby DB  No more web.xml – Servlet 3.0 is awesome  Getters/Setters generated – Scala’s @BeanProperty annotation37 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  38. 38. No more web.xml Servlet 3 and Scala package code.webapp import javax.servlet.annotation.{ WebFilter, WebInitParam } import org.apache.wicket.protocol.http.WicketFilter @WebFilter(value = Array("/*"), initParams = Array( new WebInitParam(name="applicationClassName", value="code.webapp.Application"), new WebInitParam(name="filterMappingUrlPattern", value = "/*“) )) class GamboaApplication extends WicketFilter38 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  39. 39. Getters/Setters generated Scala’s @BeanProperty annotation package code.data import scala.reflect.BeanProperty import javax.persistence.{ Id, GeneratedValue } trait Identifiable extends Serializable { @Id @GeneratedValue @BeanProperty var id: String = _ }39 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  40. 40. Getters/Setters generated Scala’s @BeanProperty annotation package code.data import scala.reflect.BeanProperty import javax.persistence.{ Entity, Table } @Entity @Table(name = “USERS”) class User extends Identifiable { @BeanProperty var name: String = _ @BeanProperty var email: String = _ }40 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  41. 41. Gamboa Project Great architecture, written an archetype must be! Apache Wicket + Java EE 6 + Scala Gamboa Project www.gamboa-project.org41 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  42. 42. Gamboa Project Maven archetypes  Scala DSL for Wicket  3 archetypes – Java EE archetype  JPA, CDI, EJB3, GlassFish Maven Plugin integrated – Spring with CouchDB – Spring with MongoDB  Both integrated with Jetty plugin  Directory structure simplified for Web development – Not really “Maven convention”, for good reason42 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  43. 43. Gamboa Project Directory Structure: simplified for Web development myproject $> tree |-- src --> .scala files | `-- code | |-- web | |-- services | `-- email |-- config --> configuration files | `-- email |-- layout --> .html files and presentation | |-- css | `-- js | `-- libs `-- pom.xml43 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  44. 44. Gamboa Demo Group Birthday44 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  45. 45. Next time you choose a web framework, think not only about features, but also about the web development process and the type of website you are going to build.45 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  46. 46. QUESTIONS?46 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  47. 47. THANK YOU! @brunoborges blogs.oracle.com/brunoborges47 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  48. 48. The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.48 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  49. 49. 49 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×