Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Pure Java RAD and    Scaffolding Tools Race@Drorbr@jbaruch       #javarad
Your SpeakersDror Bereznitsky               Baruch Sadogursky@drorbr                        @jbaruchDevelopment Division M...
AgendaBla-bla-bla (AKA Overview)  1        Framework[] frameworks = new Framework[]{  2                seamForge, springRo...
Rapid Application Development
Rapid Application Development
Why Slow?                                                                      Integration == pain!Java Web Frwks suck!   ...
Scaffolding
Modules
Modules1    @Async2    public static void Talk.indexTalks(Collection<Talk> talks) {3        List<SolrInputDocument> docume...
Writing your own module
Convention…
Over…
Configuration
On the Left lane:JBOSS SEAM FORGE
Obvious and trivial jboss SEAM          FORGE FactsDeveloped by JBOSS (surprise!)Heavily based on JBOSS SEAM (surprise!)He...
Interesting stuff
Interesting stuff
Plugins (aka Modules)         Infrastructure       Javabean validation       Jboss as       Glassfish AS       Apache Maven
Developing Plugin Use standard java ee cdi TO    access container services
Demo!
Pros and Cons
On the Middle lane:SPRING ROO
Obvious and trivial Spring ROO Facts  Developed by springsource (surprise!)  Heavily based on the Spring framework (surpri...
Inter-type declarations1    @RooJavaBean2    @RooToString3    @RooEntity4    public class Speaker {56         @NotNull7   ...
Inter-type declarations1    @RooJavaBean2    @RooToString3    @RooEntity4    public class Speaker {                       ...
add-ons (AKA Modules)          InfrastructureJavabean validation        SOLRCloud Foundry and GAE      JUNIT and seleniumE...
Developing add-on
Demo!
Pros and Cons
On the Right lane:PLAY! FRAMEWORK
Obvious and trivial Play! FactsDeveloped by guillaume bort, supported by zenexityFirst signs of life from 12 may 2007lates...
Not your grandpa’s RAD Tool      So, what gives?
The other “rapid”
More unusual stuffNot using servlet APIBuild and deployment handled by Python scriptsStatic controllers“Share nothing” arc...
Modules                            Infrastructure                Scala                        ElasticSearch and Lucene    ...
Developing module
Developing module
Demo!
Pros and Cons
Feature             Seam Forge         Spring Roo          Play!Scaffolding        One-Time           Continuous         O...
Feature                       Seam Forge        Spring Roo          Play!     Backed up                       JBOss       ...
Pure Java RAD and Scaffolding Tools Race
Pure Java RAD and Scaffolding Tools Race
Pure Java RAD and Scaffolding Tools Race
Pure Java RAD and Scaffolding Tools Race
Upcoming SlideShare
Loading in …5
×

Pure Java RAD and Scaffolding Tools Race

10,634 views

Published on

Rapid application development techniques, favoring rapid prototyping over intensive planning, have become popular in the last few years. Although the "old-school" Java Web frameworks (such as Struts and JSF) are well suited for enterprise projects, their development cycle is often too slow and complicated for prototyping. Due to their nature, dynamic languages such as Ruby, Python, and Groovy are natural for fast prototyping and scaffolding. But is there a way to benefit the Java ecosystem without compromising simplicity and productivity? This presentation tries to answer this question by comparing, head-to-head, three leading Java RAD tools—SeamForge, Play, and Roo—by writing a full-blown Web application in each of them, comparing the pros and cons along the way.

Published in: Technology, Education
  • I like this service ⇒ www.WritePaper.info ⇐ from Academic Writers. I don't have enough time write it by myself.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2F7hN3u ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ❶❶❶ http://bit.ly/2F7hN3u ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Pure Java RAD and Scaffolding Tools Race

  1. 1. Pure Java RAD and Scaffolding Tools Race@Drorbr@jbaruch #javarad
  2. 2. Your SpeakersDror Bereznitsky Baruch Sadogursky@drorbr @jbaruchDevelopment Division Manager Innovation ExpertTangram-Soft BMC Software
  3. 3. AgendaBla-bla-bla (AKA Overview) 1 Framework[] frameworks = new Framework[]{ 2 seamForge, springRoo, playFramework}; 3 for (Framework fw : frameworks) { 4 fw.showOverview(); 5 fw.hightlightFeatures(); 6 fw.runDemo(); 7 fw.showProsAndCons(); 8 }Yadda-yadda-yadda (Aka Summary)
  4. 4. Rapid Application Development
  5. 5. Rapid Application Development
  6. 6. Why Slow? Integration == pain!Java Web Frwks suck! Java EE application – Map model to relational (JPA) – Write Session EJBs for DAOs and Services – Write JSF UI (E.g.JSP) – Write bunch of xmls (persistence, web, jsf, server specific) – Deploy to JEE server
  7. 7. Scaffolding
  8. 8. Modules
  9. 9. Modules1 @Async2 public static void Talk.indexTalks(Collection<Talk> talks) {3 List<SolrInputDocument> documents = new ArrayList<SolrInputDocument>();4 for (Talk talk : talks) {5 SolrInputDocument sid = new SolrInputDocument();6 sid.addField("id", "talk_" + talk.getId());7 sid.addField("talk.id_l", talk.getId());8 sid.addField("talk.code_l", talk.getCode());9 sid.addField("talk.title_s", talk.getTitle());10 sid.addField("talk.track_t", talk.getTrack());11 sid.addField("talk.category_t", talk.getCategory());12 sid.addField("talk.speaker_t", talk.getSpeaker());13 // Add summary field to allow searching documents14 sid.addField("talk_solrsummary_t", new StringBuilder().15 append(talk.getId()).append(" ").append(talk.getCode()).16 append(" ").append(talk.getTitle()).append(" ").17 append(talk.getTrack()).append(" ").18 append(talk.getCategory()).append(" ").19 append(talk.getSpeaker()));20 documents.add(sid);21 }22 try {23 SolrServer solrServer = solrServer();24 solrServer.add(documents);25 solrServer.commit();26 } catch (Exception e) {27 e.printStackTrace();28 }29 }
  10. 10. Writing your own module
  11. 11. Convention…
  12. 12. Over…
  13. 13. Configuration
  14. 14. On the Left lane:JBOSS SEAM FORGE
  15. 15. Obvious and trivial jboss SEAM FORGE FactsDeveloped by JBOSS (surprise!)Heavily based on JBOSS SEAM (surprise!)Heavily based on MavenUses standard java ee 6 featuresEvolved from seam-gen project in August 2010latest version 1.0.0-beta1
  16. 16. Interesting stuff
  17. 17. Interesting stuff
  18. 18. Plugins (aka Modules) Infrastructure Javabean validation Jboss as Glassfish AS Apache Maven
  19. 19. Developing Plugin Use standard java ee cdi TO access container services
  20. 20. Demo!
  21. 21. Pros and Cons
  22. 22. On the Middle lane:SPRING ROO
  23. 23. Obvious and trivial Spring ROO Facts Developed by springsource (surprise!) Heavily based on the Spring framework (surprise!) revealed @ SpringOne Europe on 27 April 2009 latest version 1.1.5
  24. 24. Inter-type declarations1 @RooJavaBean2 @RooToString3 @RooEntity4 public class Speaker {56 @NotNull7 private String firstName;89 @NotNull10 private String lastName;1112 private String email;1314 @ManyToMany(cascade = CascadeType.ALL)15 private Set<Talk> talks = new HashSet();16 } 1 privileged aspect Speaker_Roo_JavaBean { 2 3 public String Speaker.getFirstName() { 4 return this.firstName; 5 } 6 7 public void Speaker.setFirstName(String firstName) { 8 this.firstName = firstName; 9 } 10 … 11 }
  25. 25. Inter-type declarations1 @RooJavaBean2 @RooToString3 @RooEntity4 public class Speaker { 1 privileged aspect Speaker_Roo_Entity {5 26 @NotNull 3 declare @type: Speaker: @Entity;7 private String firstName; 48 5 @PersistenceContext9 @NotNull 6 transient EntityManager Speaker.entityManager;10 private String lastName; 711 8 @Id12 private String email; 9 @GeneratedValue(strategy = GenerationType.AUTO)13 10 @Column(name = "id")14 @ManyToMany(cascade = CascadeType.ALL) 11 private Long Speaker.id;15 private Set<Talk> talks = new HashSet(); 1216 } 13 @Version 14 @Column(name = "version") 15 private Integer Speaker.version; 16 17 @Transactional 18 public void Speaker.persist() { 19 this.entityManager.persist(this); 20 } 21 22 public static long Speaker.countSpeakers() { 23 return entityManager().createQuery( 24 "SELECT COUNT(o) FROM Speaker o", 25 Long.class).getSingleResult(); 26 } 27 … 28 }
  26. 26. add-ons (AKA Modules) InfrastructureJavabean validation SOLRCloud Foundry and GAE JUNIT and seleniumEmbedded Jetty OSGiApache MAVEN
  27. 27. Developing add-on
  28. 28. Demo!
  29. 29. Pros and Cons
  30. 30. On the Right lane:PLAY! FRAMEWORK
  31. 31. Obvious and trivial Play! FactsDeveloped by guillaume bort, supported by zenexityFirst signs of life from 12 may 2007latest version 1.2.3
  32. 32. Not your grandpa’s RAD Tool So, what gives?
  33. 33. The other “rapid”
  34. 34. More unusual stuffNot using servlet APIBuild and deployment handled by Python scriptsStatic controllers“Share nothing” architectureJSP-LIKE templating engine (based on Groovy)Admin area otf generationGraphical Test runner
  35. 35. Modules Infrastructure Scala ElasticSearch and Lucene Eclipse Compiler JUNIT and selenium GAE OAuth JBoss Netty*Yap, we lied
  36. 36. Developing module
  37. 37. Developing module
  38. 38. Demo!
  39. 39. Pros and Cons
  40. 40. Feature Seam Forge Spring Roo Play!Scaffolding One-Time Continuous One-time (as module)OTF compile No No YesPersistence JPA JPA JPA MorphiaUser interface JSF Spring-MVC HOME-Grown GWT (JSP-like)Full Text Search No Solr ElasticSearch LuceneREST support No Spring-rest Rest-easyDeployment JBOss AS Servlet container Embedded netty Glassfish AS GAE Gae Cloud Foundry Servlet container
  41. 41. Feature Seam Forge Spring Roo Play! Backed up JBOss Springsource zenexity Maturity Low High high Documentation Low Medium Medium Books NO “Roo in action” “Introducing the Early access Play Framework” License LGPL Apache 2 Apache 2 Mailing List 6 messages in 132 messages in ~550 messages in last month last month last month**Inc. announcements on usage, etc.

×