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.
THE 2014 DECISION 
MAKER'S GUIDE TO 
JAVA WEB FRAMEWORKS 
SPRING MVC, GRAILS, VAADIN, GWT, WICKET, 
PLAY, STRUTS AND JSF 
...
TABLE OF CONTENTS 
INTRODUCTION 
LET'S GET EVEN MORE CURIOUS... 1-3 
CHAPTER I 
WHERE POOH AND PIGLET RANK FRAMEWORKS 
FOR...
INTRODUCTION 
LET'S GET EVEN MORE CURIOUS... 
Our first report looked individually at the top 8 
most popular Java Web Fra...
What did I read/miss in the first report report? 
At the end of the first report we compiled the scores for each framework...
So what are the application types we care about in this report, you ask? We wanted to pick a selection of real-world 
appl...
CHAPTER I: 
WHERE POOH AND PIGLET 
RANK FRAMEWORKS FOR 
TESTABILITY AND SECURITY 
After we launched the first Java Web Fra...
Testability 
Testing… the last line of defense before throwing your code to the user-den! We have many tools available to ...
VAADIN 
Vaadin application testing is split into three different categories: JUnit 
tests, TestBench browser based tests, ...
PLAY 
Play is kind of cool in the way that it approaches testing. Play by default 
uses JUnit and will spawn a new process...
SCORE SUMMARY - TESTABILITY 
All rights reserved. 2013 © ZeroTurnaround OÜ 8
Security 
In the words of the infamous John McAfee, “Ignorance and confidence are constant companions”. Let’s be honest, w...
VAADIN 
Vaadin does provide some ways to integrate security into an application 
and has a decent step by step walkthrough...
WICKET 
The way applications implement security has become pretty standard over 
the years and Wicket does not really dive...
STRUTS 
Struts itself does not try to implement yet another security framework. 
Instead, it hands it over to some other f...
SCORE SUMMARY - SECURITY 
All rights reserved. 2013 © ZeroTurnaround OÜ 13
The Results 
Now we have the scores in for both Testability and Security, we can total these up with the numbers in our pr...
Let’s now put this into a pretty graph 
so we can see how they fare against 
one another. 
So we can see that Grails, Vaad...
CHAPTER II: 
FRAMEWORK RANKINGS 
BASED ON APPLICATION TYPE 
Now we bring the scores for each of the frameworks 
into the r...
What types of applications do developers make? 
We tried to come up with all sorts of different types of applications, whi...
App Type: CRUD 
This use case focuses on a typical CRUD (Create, Read, Update, Delete) 
application. These applications fo...
The Results: CRUD 
Rapid 
Application 
Development 
Framework 
Complexity 
Ease 
of Use 
Documentation 
& Community 
Frame...
Our Analysis: CRUD 
The two frameworks that came ahead of others for this application type- 
-Play and Grails--are there b...
Feature Ranking 
Framework Ecosystem H 
UX, Look and Feel H 
Throughput/Scalability H 
Security H 
Framework Complexity M ...
The Results: eCommerce 
Rapid 
Application 
Development 
Framework 
Complexity 
Ease 
of Use 
Documentation 
& Community 
...
Our Analysis: eCommerce 
After an arduous scoring process, the frameworks with feature sets that best 
match to an eCommer...
App Type: Video Streaming 
Feature Ranking 
UX, Look and Feel H 
Throughput/Scalability H 
Rapid Application Prototyping M...
The Results: Video Streaming 
Rapid 
Application 
Development 
Framework 
Complexity 
Ease 
of Use 
Documentation 
& Commu...
Our Analysis: Video Streaming 
The two aspects we rank highly here are UX, look and feel and throughput/ 
scalability, and...
App Type: Desktop App Port 
Feature Ranking 
Security H 
Code Maintenance/Updates H 
UX, Look and Feel H 
Framework Comple...
The Results: Desktop App Port 
Rapid 
Application 
Development 
Framework 
Complexity 
Ease 
of Use 
Documentation 
& Comm...
Our Analysis: Desktop App Port 
One of the main things that developers need to be concerned with while 
writing ports of d...
App Type: Mobile App 
Feature Ranking 
Security H 
UX, Look and Feel H 
Throughput/Scalability M 
Code Maintenance/Updates...
The Results: Mobile App 
Rapid 
Application 
Development 
Framework 
Complexity 
Ease 
of Use 
Documentation 
& Community ...
Our Analysis: Mobile App 
Although it is possible to develop good REST-based API-s with Spring MVC, 
it is still hard to b...
App Type: Multi-user App 
Feature Ranking 
Throughput/Scalability H 
Code Maintenance/Updates H 
UX, Look and Feel H 
Secu...
The Results: Multi-user App 
Rapid 
Application 
Development 
Framework 
Complexity 
Ease 
of Use 
Documentation 
& Commun...
Our Analysis: Multi-user App 
Building a multi-user app can be intimidating--you want your users to have 
a positive exper...
App Type: Prototyping App 
Feature Ranking 
Rapid Application Prototyping H 
Framework Complexity H 
Ease of Use H 
Docume...
The Results: Prototyping App 
Rapid 
Application 
Development 
Framework 
Complexity 
Ease 
of Use 
Documentation 
& Commu...
Our Analysis: Prototyping App 
When building a prototype for an application, the frameworks that came 
on top in our revie...
CHAPTER III: 
LET’S SEE THE RESULTS! 
It’s been a fun and eventful ride looking at each 
of the frameworks and we sure did...
The Overall Results 
Really quickly, let’s remind ourselves of the scores of the combined results of the 10 feature catego...
Now, for the fun of it, lets plot the average scores based on Application Type against the original scores in the Feature ...
All rights reserved. 2013 © ZeroTurnaround OÜ 42
Spring MVC: For when you need an extra shot in your coffee 
Picture the scene. It’s early on Saturday morning and your hea...
SUMMARY OF FINDINGS 
AND GOODBYE COMIC :-) 
Here’s the “too-long; didn’t read” (TL;DR) version of the 
report, where you c...
Summary 
the comic: http://xkcd.com/292/ 
If we had to consolidate this entire report into one [long] sentence, it would b...
CHAPTER II - FRAMEWORK RANKINGS BASED 
ON APPLICATION TYPE 
CRUD (Create, Read, Update, Delete) app - e.g. Evernote 
For o...
CHAPTER III - THE RESULTS 
As the results show, Vaadin, Grails and Play are the first, second and third 
place winners not...
All rights reserved. 2013 © ZeroTurnaround OÜ 48
This report is brought to you by: 
Simon Maple, Adam Koblentz, Sigmar Muuga, 
Cas Thomas, Sven Laanela, Oliver White, 
Lad...
Upcoming SlideShare
Loading in …5
×

The 2014 Decision Makers Guide to Java Web Frameworks

7,841 views

Published on

THE 2014 DECISION MAKER'S GUIDE TO JAVA WEB FRAMEWORKS: SPRING MVC, GRAILS, VAADIN, GWT, WICKET, PLAY, STRUTS AND JSF

Published in: Software, Technology
  • Get paid to send out tweets - $25 per hour ■■■ http://t.cn/AieXiXbg
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Greek Ritual REVERSES Diabetes (do this before bed) Before you go to bed tonight, do this ONE "stupidly simple" Greek ritual to reverse your diabetes... ■■■ http://t.cn/AiBhrtGG
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • What if you had a printing press that could spit out hundred dollar bills on demand? Do you think that would change your life? ■■■ http://scamcb.com/ezpayjobs/pdf
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Looking For A Job? Positions available now. FT or PT. $10-$30/hr. No exp required. ➤➤ http://t.cn/AieX6y8B
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • D0WNL0AD FULL ▶ ▶ ▶ ▶ http://1url.pw/BQsJR ◀ ◀ ◀ ◀
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

The 2014 Decision Makers Guide to Java Web Frameworks

  1. 1. THE 2014 DECISION MAKER'S GUIDE TO JAVA WEB FRAMEWORKS SPRING MVC, GRAILS, VAADIN, GWT, WICKET, PLAY, STRUTS AND JSF Give your next app a ne w framework! All rights reserved. 2013 © ZeroTurnaround OÜ 1
  2. 2. TABLE OF CONTENTS INTRODUCTION LET'S GET EVEN MORE CURIOUS... 1-3 CHAPTER I WHERE POOH AND PIGLET RANK FRAMEWORKS FOR TESTABILITY AND SECURITY 4-15 CHAPTER II FRAMEWORK RANKINGS BASED ON APPLICATION TYPE 16-38 CHAPTER III LET’S SEE THE RESULTS! 39-43 SUMMARY OF FINDINGS AND A GOODBYE COMIC :-) 44-47 All rights reserved. 2013 © ZeroTurnaround OÜ 2
  3. 3. INTRODUCTION LET'S GET EVEN MORE CURIOUS... Our first report looked individually at the top 8 most popular Java Web Frameworks at a feature-by- feature level and scored them. We got some great feedback and added two more feature categories based on this commentary, plus analyzed the strengths and weaknesses of each framework against seven different application types (use cases)... All rights reserved. 2013 © ZeroTurnaround OÜ 3
  4. 4. What did I read/miss in the first report report? At the end of the first report we compiled the scores for each framework across all the features we looked at for the comparison. While this is interesting to look at, it does not make any suggestions as to which framework would be good to implement based on different end-user needs, as we haven’t introduced the real world problems/projects into the picture yet. That’s where this report comes in: here we focus on the application and test use cases with varying application types to determine which frameworks are best suited for that app. Each application type will have different needs, requirements and functional priorities, so the feature areas we looked at in the first report and the two additional parts in this report will be scaled differently. This means we can suggest which framework(s) would be more appropriate than others for different types of applications. Both reports are follow ups on the Java Web Frameworks section of our popular Developer Productivity Report. Here you can see which were the popular frameworks back in 2012. According to over 1800 developer responses, here’s what we found: All rights reserved. 2013 © ZeroTurnaround OÜ 2
  5. 5. So what are the application types we care about in this report, you ask? We wanted to pick a selection of real-world application scenarios to gauge each framework’s effectiveness, so here they are: • CRUD (Create, Read, Update, Delete) app - e.g. Evernote • eCommerce app - e.g. Amazon • Video/streaming app - e.g. Netflix • Desktop application port - e.g. Salesforce • Mobile app - e.g. m.google.com • Multi-user app - e.g. Scribblar or Crocodoc • Prototyping app - e.g. your own app in development :-) Once these application types have been weighed, we can then suggest/recommend a web framework based on its strengths, and report which we’d consider using on a similar project if we were to take it on from scratch. The Java Web Frameworks we will discuss will be the same as those looked at in our first report, as follows: Spring MVC 3.2.3 Grails 2.2.2 Vaadin v7.1.1 GWT 2.5.0 Wicket 6.8 Play 2.1.2 Struts 2.3.15.1 JSF 2.2 All rights reserved. 2013 © ZeroTurnaround OÜ 3
  6. 6. CHAPTER I: WHERE POOH AND PIGLET RANK FRAMEWORKS FOR TESTABILITY AND SECURITY After we launched the first Java Web Frameworks report, we read your comments and feedback very carefully and as a direct result of your suggestions we added two more feature categories into the mix in addition to those in our first report--Testability and Security. We’ll rank all 8 frameworks in these two categories, and show the combined scores from the previous report. Enjoy! All rights reserved. 2013 © ZeroTurnaround OÜ 4
  7. 7. Testability Testing… the last line of defense before throwing your code to the user-den! We have many tools available to help us with this (e.g. Selenium), but does a Web Framework interact with, embed or assist you with this crucial step? SPRING MVC Fortunately, Spring MVC has an official Spring MVC Test Framework and this makes it a very unit-testable framework. The Spring MVC Test Framework loads the actual Spring configuration through the TestContext framework and always uses the DispatcherServlet to process requests thus approximating full integration tests without requiring a running Servlet container. There are a few things that give Spring favorable scores in this area: • All controllers are just plain Java classes with annotations and ideally, with very little business logic code inside; • Controllers may be tested using REST-based unit tests; • Controllers may be tested using mocked unit tests (Mockito or EasyMock). With various frameworks combined like Spring MVC Test Framework, JsonPath, JUnit and Mockito it is possible to write fast & short tests. The only downside in testing of Spring MVC is the separated view logic (JSP-s), that needs to be tested using some external tool like Selenium. Score: Reason: Built in, official test framework comes with Spring MVC, but needs external tools for some tests. GRAILS Grails is a framework that encompasses the entire application stack--from the UI layer all the way down to the database--so the testing capabilities have to be sophisticated enough to provide confidence that everything works. Fortunately Grails provides exactly that; you can test everything starting from your controllers, response bodies and tag libraries all the way to your domain objects. We found writing tests for Grails to be a breeze. Mostly because Grails itself does all the magical wiring, mocking and hooking things up to an in-memory database (if required) for a component under test. This leaves the developer to worry about writing the actual test and not the surrounding infrastructure (although it does not stop you from doing that if you want to!) Score: Reason: Every component is testable across your entire stack. Nuff said. All rights reserved. 2013 © ZeroTurnaround OÜ 5
  8. 8. VAADIN Vaadin application testing is split into three different categories: JUnit tests, TestBench browser based tests, and integration tests. JUnit tests will test all of the server side functionality; TestBench tests use real browsers with different versions, do regression testing and provide supporting screenshots; integration tests are required to verify that the application works in all supported servlets/containers. The JUnit and TestBench test cases can be directly integrated into com.vaadin.tests, and the integration tests can be outlined using tests/integration_ tests.xml and tests/integration_testscripts/*. There is some documentation on the Vaadin site that walks through how to create tests, how to run TestBench tests locally and how to perform integration tests. While the application test categories do cover everything they need to cover, Vaadin itself does not really provide anything extra that would surpass our expectations (or blow our minds) . Score: Reason: Separate test mechanisms for different categories, not comparably impressive as other areas of Vaadin. GWT There are few additional testing features built into the framework. GWT supports standard JUnit TestCases, GWTTestCases (subclasses of the JUnit TestCase), and Selenium testing. The additional GWTTestCase class does allow testing for code that requires JavaScript at runtime, a necessity for a framework that cross-compiles Java to JavaScript. It’s standard, simple to implement and expected. Score: Reason: Standard set of test features, nothing amazing. WICKET Wicket testing revolves around unit testing pages and components via the WicketTester class. This provides you with a testbed for your application, and once you provide the component or page under test you are good to go. You can perform actions on the rendered page/component in the testbed--i.e. clicking links and submitting forms, then verify the results of those actions -- whether some label has been rendered or some list contains some specific items. It even supports testing ajax components and component security. If the page uses some injected/autowired components, then mocking these out is obviously a necessity, but other than that we found the testing framework to be pretty easy and straightforward to use. Score: Reason: Specialized tester class, nice testbed for various application tests. All rights reserved. 2013 © ZeroTurnaround OÜ 6
  9. 9. PLAY Play is kind of cool in the way that it approaches testing. Play by default uses JUnit and will spawn a new process for each test. A neat feature that we wish other frameworks would bundle is Play’s ability to mock a whole “application” for the test to use. For example, a tool like Mockito is required to stub out code or infrastructure, but Play has JavaTest with FakeApplication, which allows developers to spin up a real “fake application” with a real in-memory database. The score of 5 here represents Play’s awesome additions to application testing. STRUTS Testability of Struts 2 is good (or, “very OK” in Estonian), as Struts 2 has also the Struts 2 JUnit plugin available. This makes it possible to write regular JUnit tests for Struts actions. Struts 2 JUnit plugin simulates a servlet container and thus there is no need to run an application inside the actual container. There is even support for Spring and also it’s possible to use custom Struts configuration files when running tests. We think that this kind of official and maintained test framework is really valuable to any framework. Score: Reason: Solid JUnit plugin and simulated servlet container, support for Spring adds value. Score: Reason: Useful additional features for testing your app, lets you spin up and mock your complete application. JSF JSF by default does not have any additional testing functionality built in, however tools like JSFUnit and Selenium can be used to properly test your JSF applications. The score here reflects that JSF is very middle of the road and is tested like a normal Java EE application. Score: Reason: No features baked in, testing is similar to that of a Java EE app. All rights reserved. 2013 © ZeroTurnaround OÜ 7
  10. 10. SCORE SUMMARY - TESTABILITY All rights reserved. 2013 © ZeroTurnaround OÜ 8
  11. 11. Security In the words of the infamous John McAfee, “Ignorance and confidence are constant companions”. Let’s be honest, when you know someone who is willing to look at security work items, you don’t fight them for it! It’s important that your overall solution not only supports security features but that it’s easy to implement and manage. SPRING MVC Security of Spring MVC is pure awesomeness. It all relies on Spring Security and can utilize all the features Spring Security has. Spring Security features @PreAuthorize annotations, that make writing security rules easy and with minimum code. These annotations can be put on top of each Spring MVC controller method and it is possible to use SPEL (Spring Expression Language) at the same time. As Spring Security works throughout the entire application, then also annotations set in other interfaces or classes work in the same way, blocking user access from web to some particular method. Score: Reason: Spring Security and @PreAuthorize annotations make it the best in the industry. GRAILS Grails does not provide an authentication/authorization mechanism out of the box. The idea behind this is that users would generally use either Spring Security, Apache Shiro or the Authentication plugin to do this. The Authentication plugin however seems to only support authentication, and finer-grained control is left for the application developer to implement. On the one hand the security policy does make sense--when building an application that has important security considerations, you will usually use one of those. On the other hand, however, this does seem like a missed opportunity to also provide out more out-of-the-box, finer-grained and integrated security for framework components. Score: Reason: No out-of-the-box security features, would need to rely on Spring Security or another tool for security. All rights reserved. 2013 © ZeroTurnaround OÜ 9
  12. 12. VAADIN Vaadin does provide some ways to integrate security into an application and has a decent step by step walkthrough in their Wiki. You can secure the enterprise layer of your application using annotations, web and channel layers by declaring security constraints in the deployment descriptor, and pair Vaadin with form-based authentication. It’s a good solution and there is additional documentation available on their website. Even though Vaadin is based on GWT, because it is not as heavily reliant on JS and provides extra security checks on the Java side it qualifies as including reasonable security and so therefore gets a higher score. Score: Reason: Good documentation for setting up your own enterprise layer security, and ditches the reliance on JavaScript, like GWT. GWT Because of the vulnerability of JavaScript applications, GWT dedicated a section of their website to discussing the major classes of attacks against any AJAX framework as well as possible solutions to each of these susceptibilities. It talks about implementing SafeHtml, rigorously following good JS programming practices, using RCP tokens introduced in GWT 2.3, wrapping JSON response string with JS block comments, and remaining vigilant. Google is upfront about the insecure nature of JS, and GWT, applications in general and repeatedly recommends staying well informed about security threats and, essentially, paying attention. It’s not a solution, but it’s something. Score: Reason: One CamelCased word: JavaScript. All rights reserved. 2013 © ZeroTurnaround OÜ 10
  13. 13. WICKET The way applications implement security has become pretty standard over the years and Wicket does not really diverge from this (which is a *good thing*). You have your usual built-in authentication and authorization mechanisms and setting these up for basic authentication is a breeze. Just extend your application from AuthenticatedWebApplication and your session from AuthenticatedWebSession, provide the appropriate implementation for your application, annotate your pages and components with desired roles/permissions and you are good to go. What’s cool about Wicket is its component model and how the security mechanism expands to support it. Not only can you define authorization strategies with annotations for your pages, but you can even do the same for your components. If you need to hide that super-secret panel or disable some buttons for users without a specific role, go ahead! And for more complex security schemes you can always leverage the power of Spring Security or Apache Shiro (is anybody actually using that? :)) and hook that into your authentication or authorization mechanisms. Protecting yourself from motherly exploits is mostly covered by JDBC already, but Wicket's strongly typed Model and the Validator mechanism ensures that you get what you expect from users. Score: Reason: Excellent security spreads into Wicket’s component model and let’s you define authorization strategies with annotations. PLAY The Play framework adds support for secure routing and has authentication support through annotations. These features enable developers to harden and secure their applications without having to write horrendous if-blocks in every secure method and also does not limit developers to security through obscurity for routing in the application. Decorating your methods with @With and @Check annotations are a very convenient, almost AoP approach to security included by default with the Play framework. Score: Reason: Default support for secure routing and strong annotation-based authentication. All rights reserved. 2013 © ZeroTurnaround OÜ 11
  14. 14. STRUTS Struts itself does not try to implement yet another security framework. Instead, it hands it over to some other framework like Spring Security. But still - the framework itself has been quite secure over time. Many legacy and also fresh projects still use and trust it because of the ongoing development and protection against various vulnerability attacks. When integrating Struts with Spring Security, it is possible to get a quite secure system with many security aspects covered. Score: Reason: Works best when integrated with Spring Security or another framework. JSF JSF relies on the existing Java EE security features, so it is a reliable and stable security platform. However, this also means that the security aspects of Java EE/JSF are heavily reliant on design and development patterns and exception handling. JSF does have nice form validation that ties into bean method calls. JSF gets a 2.5 for security because it does get to leverage the Java EE platform, but does not offer anything on top. Score: Reason: Reliant on Java EE’s stable security features, but goes no further to add anything on. All rights reserved. 2013 © ZeroTurnaround OÜ 12
  15. 15. SCORE SUMMARY - SECURITY All rights reserved. 2013 © ZeroTurnaround OÜ 13
  16. 16. The Results Now we have the scores in for both Testability and Security, we can total these up with the numbers in our previous report, to get the following scoresheet: Rapid Application Development Framework Complexity Ease of Use Documentation & Community Framework Ecosystem Throughput/ Scalability Code Maintenance/ Updates UX/Look and Feel Testability Security Totals Spring MVC 2.5 3.5 3 4 4 4 3 2 4 5 35 Grails 5 3 4.5 5 4.5 4 4.5 4 5 2.5 42 Vaadin 4.5 4 4.5 5 3 4.5 4 5 3 4 41.5 GWT 4 4 4 4.5 3 4.5 4 5 2.5 1 36.5 Wicket 3.5 2.5 3.5 3 3 3 4.5 3.5 4 5 35.5 Play 5 2 3.5 4 4.5 5 4 3 5 4 40 Struts 2 4 3 2.5 3 3 3 2.5 4 2.5 29.5 JSF 3 3.5 4 4.5 4 4 4 4.5 2 2.5 36 All rights reserved. 2013 © ZeroTurnaround OÜ 14
  17. 17. Let’s now put this into a pretty graph so we can see how they fare against one another. So we can see that Grails, Vaadin and Play are still our front runners, but this is hard to judge as many of the features may not be that relevant or important to your application. So, let’s move on and look at different application types. All rights reserved. 2013 © ZeroTurnaround OÜ 15
  18. 18. CHAPTER II: FRAMEWORK RANKINGS BASED ON APPLICATION TYPE Now we bring the scores for each of the frameworks into the real world. Scores on paper are meaningless unless we apply them to a real world example. So this section takes a look at seven different types of applications and reviews each framework based on their suitability for that style of application. If this were a quiz show, it would be the double money round. All rights reserved. 2013 © ZeroTurnaround OÜ 16
  19. 19. What types of applications do developers make? We tried to come up with all sorts of different types of applications, which led to more than one heated debate. Here are the application types we chose; let us know if we missed any that you think should have been added: • CRUD (Create, Read, Update, Delete) app - e.g. Evernote • eCommerce app - e.g. Amazon • Video/streaming app - e.g. Netflix • Desktop application port - e.g. Salesforce • Mobile app - e.g. m.google.com • Multi-user app - e.g. Scribblar or Crocodoc • Prototyping app - e.g. your own app in development :-) To whittle down the list of frameworks to recommend, we first needed to weight each of the features we looked at previously as High (multiplier of 2), Medium (multiplier of 1) or Low (multiplier of 0), based on how important the feature was to the success of the application. the scores, showing full results, highlighting the top three and recommending the frameworks we’d look into if we had to code an app of each type. All rights reserved. 2013 © ZeroTurnaround OÜ 17
  20. 20. App Type: CRUD This use case focuses on a typical CRUD (Create, Read, Update, Delete) application. These applications form the backbone of data storage on the internet. An example of a CRUD application that one would be sure to find in the ZT offices is Evernote, which is used to take, update, delete, and read notes in multiple locations on multiple platforms. When creating a CRUD application, ease of use, scalability and throughput, code maintenance and testability should be your focus. You don’t want to use a framework that is so complex that you have to leap through fiery hoops in order to get or modify the data you want. You also want code that is easy to reuse and update when you add mountains of data to a couple of shiny new databases. But most importantly, you want to be able to make sure that your code is actually doing what you want it to do--accidently changing the new nuclear launch code to “p@ssword” isn’t going to make your boss too happy. Feature Ranking Ease of Use H Throughput/Scalability H Testability H Security M Rapid Application Prototyping M Framework Ecosystem M Framework Complexity L Documentation & Community L Code Maintenance/Updates L UX, Look and Feel L All rights reserved. 2013 © ZeroTurnaround OÜ 18
  21. 21. The Results: CRUD Rapid Application Development Framework Complexity Ease of Use Documentation & Community Framework Ecosystem Throughput/ Scalability Code Maintenance/ Updates UX/Look and Feel Testability Security Totals Priority M L H L M H L L H M Spring MVC 2.5 0 6 0 4 8 0 0 8 5 33.5 Grails 5 0 9 0 4.5 8 0 0 10 2.5 39 Vaadin 4.5 0 9 0 3 9 0 0 6 4 35.5 GWT 4 0 8 0 3 9 0 0 5 1 30 Wicket 3.5 0 7 0 3 6 0 0 8 5 32.5 Play 5 0 7 0 4.5 10 0 0 10 4 40.5 Struts 2 0 6 0 3 6 0 0 8 2.5 27.5 JSF 3 0 8 0 4 8 0 0 4 2.5 29.5 All rights reserved. 2013 © ZeroTurnaround OÜ 19
  22. 22. Our Analysis: CRUD The two frameworks that came ahead of others for this application type- -Play and Grails--are there because of their higher-than-average scores in ease of use, throughput and testability. The excellent framework ecosystem and available component libraries also helps with putting these above the competition. Vaadin came third and is trailing quite a bit with other candidates which were left out of the top three. It is a little bit ahead of SpringMVC and Wicket thanks to a high score in rapid application development and ease of use while the other two have it beat in terms of testability. Note: Throwing Spring into the mix, we find that the scene changes quite a bit, and the “combo punch” award for this application type actually goes to GWT in conjunction with Spring. GWT by itself did not score high at all, mostly due to its poor security and testability scores. Adding Spring on the backend and GWT on the frontend however makes it rise to the challenge with those aspects improved and blasts past the others with its excellent scalability, ease of use and rapid application development scores. 1 2 3 All rights reserved. 2013 © ZeroTurnaround OÜ 20
  23. 23. Feature Ranking Framework Ecosystem H UX, Look and Feel H Throughput/Scalability H Security H Framework Complexity M Ease of Use M Code Maintenance/Updates M Testability M Documentation & Community L Rapid Application Prototyping L App Type: eCommerce Oh, what would we do without these apps? To be sure, eCommerce applications have driven much of the growth of the internet, so that now you can order anything from music to tires over the web. An eCommerce application must be stateful and secure, while also maintaining the flexibility to adapt to multiple formats, like mobile and low bandwidth. There is also another consideration with eCommerce applications, whether your development team wishes to write everything from scratch or leverage an existing eCommerce platform like Oracle’s ATG or Hybris. Examples of eCommerce applications are Amazon and Apple’s iTunes or App stores. When building an eCommerce app you want to focus on scalability, security and the UX. Your users should be able to easily navigate through and feel comfortable with the look of your site, including the site itself and it’s mobile and low bandwidth adaptations. It should be very secure; it’s an eCommerce app after all and will be handling order and payment information. In addition, to handle the application itself you want to use a solid framework(s) of medium complexity that is flexible and full-featured, but isn’t impossible for developers to learn, manage and thoroughly test. All rights reserved. 2013 © ZeroTurnaround OÜ 21
  24. 24. The Results: eCommerce Rapid Application Development Framework Complexity Ease of Use Documentation & Community Framework Ecosystem Throughput/ Scalability Code Maintenance/ Updates UX/Look and Feel Testability Security Totals Priority L M M L H H M H M H Spring MVC 0 3.5 3 0 8 8 3 4 4 10 43.5 Grails 0 3 4.5 0 9 8 4.5 8 5 5 47 Vaadin 0 4 4.5 0 6 9 4 10 3 8 48.5 GWT 0 4 4 0 6 9 4 10 2.5 2 41.5 Wicket 0 2.5 3.5 0 6 6 4.5 7 4 10 43.5 Play 0 2 3.5 0 9 10 4 6 5 8 47.5 Struts 0 4 3 0 6 6 3 5 4 5 36 JSF 0 3.5 4 0 8 8 4 9 2 5 43.5 All rights reserved. 2013 © ZeroTurnaround OÜ 22
  25. 25. Our Analysis: eCommerce After an arduous scoring process, the frameworks with feature sets that best match to an eCommerce use case are Vaadin, Play, and Grails. All three of them are strong with throughput/scalability, security, and all try to provide a usable ecosystem without reliance on too many other tools. Other than the three high priority metrics, there are several medium priorities as well. Users want their eCommerce experience to look nice and not be reminiscent of GeoCities or Tripod, so a good UX or look and feel is important as well. Vaadin applications look beautiful out of the box, and Play and Grails can look great as well with a little more work. Traditionally, eCommerce and other security-conscious applications would have relied more on Spring or Struts. Spring’s security additions are fantastic and when paired with lower scoring frameworks, like GWT, the combination may even score higher than any other framework on its own. It is also worth pointing out that three other frameworks were only a small gap from the winners. Spring, Wicket, and JSF were only 3.5 points from third place. This leads us to believe the eCommerce use case is well understood and most major frameworks at this point would work equally with a few standouts. 1 2 3 All rights reserved. 2013 © ZeroTurnaround OÜ 23
  26. 26. App Type: Video Streaming Feature Ranking UX, Look and Feel H Throughput/Scalability H Rapid Application Prototyping M Ease of Use M Code Maintenance/Updates M Testability M Security M Documentation & Community L Framework Ecosystem L Framework Complexity L One of the largest eaters of bandwidth on the internet now due to video streaming, at the forefront of this use case we have applications like YouTube and Netflix’s Watch It Now. These applications are typically stateful only for credentials or history tracking, after that the bulk of the application is stateless streaming. These applications are high-bandwidth and typically are available in multiple formats, while also being smart enough to lower quality to meet bandwidth constraints. When building a video-streaming app, the main considerations that we have is the throughput and scalability as well as the UX for a good look and feel. The reasoning behind this is pretty self-explanatory, with thousands (possibly millions) of videos in the application’s video library and the huge numbers of those are being streamed concurrently by a large user-base, keeping the server load per-user as low as possible becomes high priority. UX, look and feel also becomes important for the overall success of the application. Making the application appealing to look at and as easy as possible to use for the customers ensures that the application rises above its competition and gets people coming back to it for more. All rights reserved. 2013 © ZeroTurnaround OÜ 24
  27. 27. The Results: Video Streaming Rapid Application Development Framework Complexity Ease of Use Documentation & Community Framework Ecosystem Throughput/ Scalability Code Maintenance/ Updates UX/Look and Feel Testability Security Totals Priority M L M L L H M H M M Spring MVC 2.5 0 3 0 0 8 3 4 4 5 29.5 Grails 5 0 4.5 0 0 8 4.5 8 5 2.5 37.5 Vaadin 4.5 0 4.5 0 0 9 4 10 3 4 39 GWT 4 0 4 0 0 9 4 10 2.5 1 34.5 Wicket 3.5 0 3.5 0 0 6 4.5 7 4 5 33.5 Play 5 0 3.5 0 0 10 4 6 5 4 37.5 Struts 2 0 3 0 0 6 3 5 4 2.5 25.5 JSF 3 0 4 0 0 8 4 9 2 2.5 32.5 All rights reserved. 2013 © ZeroTurnaround OÜ 25
  28. 28. Our Analysis: Video Streaming The two aspects we rank highly here are UX, look and feel and throughput/ scalability, and there are a couple of contenders here that stick out straight away. Clearly, Vaadin and GWT possess great qualities when it comes down to the look and feel and the throughput, but JSF and Grails are also very close contenders in these areas. Play performs extremely well in the Throughput/Scalability section, naturally, but is let down by it’s UI score. So, what lets each framework down? Well, JSF drops points on Security and Testability, but a lot of this could be caught up by the surrounding Java EE implementation it would sit in, so is a good option. Grails and GWT are both let down a bit by Security, particularly in GWT’s case, which also suffers from lack of Testability. That leaves us with Vaadin and Play which perform well in the remaining categories and take the top two spots. There is another way though! We could supplement the deficiencies in some of the frameworks by bringing in Spring’s security features, which when added to GWT particularly benefits the application. You would of course need to pull out some of the vulnerabilities in your app that uses GWT, but this is an interesting combination and makes it a real contender. Similarly, Grails could do something similar, although you’d have to offset the complexity cost of using another framework for an increase in security. 1 2 3 All rights reserved. 2013 © ZeroTurnaround OÜ 26
  29. 29. App Type: Desktop App Port Feature Ranking Security H Code Maintenance/Updates H UX, Look and Feel H Framework Complexity M Ease of Use M Throughput/Scalability M Testability M Rapid Application Prototyping L Documentation & Community L Framework Ecosystem L One of the more interesting use cases to come out of 24/7 connectivity available to the average user is desktop ported applications. These applications are typically heavy, native code that then gets ported onto a “cloud” platform. Examples of these are Google Docs (to replace Microsoft Office) and SalesForce (as opposed to Microsoft Dynamics). These kinds of applications are aimed at office workers as an alternative to desktop applications. Given the nature of businesses, the security aspect becomes very important in establishing trust. You are no longer in control of what happens with your document or customer database, since it is not on your local machine anymore, so having faith in your data “on the cloud” being safe and usable only by people with proper credentials becomes essential. The other aspects that we found important for us were Code Maintenance and Updates as well as UX, look and feel. The UX, look and feel has to be familiar to the end user and make it comfortable to cross the gap from the desktop app to the “cloud”. The framework of choice should be flexible enough to develop this kind of familiarity for different desktop app types. All rights reserved. 2013 © ZeroTurnaround OÜ 27
  30. 30. The Results: Desktop App Port Rapid Application Development Framework Complexity Ease of Use Documentation & Community Framework Ecosystem Throughput/ Scalability Code Maintenance/ Updates UX/Look and Feel Testability Security Totals Priority L M M L L M H H M H Spring MVC 0 3.5 3 0 0 4 6 4 4 10 34.5 Grails 0 3 4.5 0 0 4 9 8 5 5 38.5 Vaadin 0 4 4.5 0 0 4.5 8 10 3 8 42 GWT 0 4 4 0 0 4.5 8 10 2.5 2 35 Wicket 0 2.5 3.5 0 0 3 9 7 4 10 39 Play 0 2 3.5 0 0 5 6 6 5 8 37.5 Struts 0 4 3 0 0 3 6 5 4 5 30 JSF 0 3.5 4 0 0 4 8 9 2 5 35.5 All rights reserved. 2013 © ZeroTurnaround OÜ 28
  31. 31. Our Analysis: Desktop App Port One of the main things that developers need to be concerned with while writing ports of desktop applications is the user experience, look and feel. Vaadin is a standout here because it enables developers to make beautiful, rich UI easily. Wicket and Grails are not too shabby, but they really shine in other areas. Namely in security and the maintenance phase of the application. All three of these frameworks also have to ensure they are capable of high throughput and scale well. Nothing destroys user experience more than a slow or crashing application, this use case is supposed to replace native desktop applications after all. The runners up were Play, JSF, and GWT. JSF is great for user experience as well, with a huge component library and Play has great themes. GWT is fantastic for UI, but the real shortcoming was in security. Many of the practices around hardening a GWT application are based in the JavaScript world, which is nowhere near as secure as the rest of the frameworks’ environments. There is a combination that would beat Vaadin: Spring + GWT. If developers rip out all of the faulty or lower-scoring security features of GWT and replace them with the Spring Security framework, they now have a great component library that enables them to make beautiful, secure applications easily. Then developers can also take advantage of the client-side processing of JavaScript which will further enable gains in performance and scalability. 1 2 3 All rights reserved. 2013 © ZeroTurnaround OÜ 29
  32. 32. App Type: Mobile App Feature Ranking Security H UX, Look and Feel H Throughput/Scalability M Code Maintenance/Updates M Testability M Rapid Application Prototyping M Framework Complexity M Ease of Use M Documentation & Community L Framework Ecosystem L More and more consumers are using mobile versions of their favorite web applications and services on their mobile devices. This presents a decision to be made by any architecture team, do you write a native mobile application for each platform or do you make your existing applications support mobile browsers? There are pros and cons of each answer, in this use case we will discuss the second option, formatting an existing application to mobile browsers or light web services. One example of these applications is Google’s m.google.com. Mobile applications are a little different than traditional web applications, instead of only having to code against multiple browser version, you also now have hardware constraints reminiscent of the age of 1024x768 vs 800x600. It is also a lot harder to verify the security features of a website or application when on a mobile platform, which raises security as a priority for the developers. The unifying feature of every successful mobile application is a great user experience, with a snappy and well-organized look and feel. That is why we are rating UX as the most important feature of a framework for mobile development. Also, it is good when a framework provides a possibility to develop and maintain API-s (REST endpoints) that can be used by native mobile apps. All rights reserved. 2013 © ZeroTurnaround OÜ 30
  33. 33. The Results: Mobile App Rapid Application Development Framework Complexity Ease of Use Documentation & Community Framework Ecosystem Throughput/ Scalability Code Maintenance/ Updates UX/Look and Feel Testability Security Totals Priority M M M L L M M H M H Spring MVC 2.5 3.5 3 0 0 4 3 4 4 10 34 Grails 5 3 4.5 0 0 4 4.5 8 5 5 39 Vaadin 4.5 4 4.5 0 0 4.5 4 10 3 8 42.5 GWT 4 4 4 0 0 4.5 4 10 2.5 2 35 Wicket 3.5 2.5 3.5 0 0 3 4.5 7 4 10 38 Play 5 2 3.5 0 0 5 4 6 5 8 38.5 Struts 2 4 3 0 0 3 3 5 4 5 29 JSF 3 3.5 4 0 0 4 4 9 2 5 34.5 All rights reserved. 2013 © ZeroTurnaround OÜ 31
  34. 34. Our Analysis: Mobile App Although it is possible to develop good REST-based API-s with Spring MVC, it is still hard to build nice and shiny mobile UI-s with it. Also, Struts has its own strong place in the world of Java web application development, but it does not offer any security features out of the box and building RESTful API-s is not easy with it. Definitely higher scores went to frameworks that provide facilities for building nice UIs (important in mobile) and also to those that enable to have a good usable REST endpoint development features. Vaadin has TouchKit which makes it easy to develop mobile apps on it as well. Security is important in mobile apps, so the huge winners here were the ones who had good security features, like Spring, Wicket and Play. Mobile apps need to have nice looking user interfaces and it turned out to be the winning point for Vaadin, GWT and JSF. Rapid application development was a weakness for all frameworks that we reviewed. It is not good at all for this app type because many new mobile apps are mostly developed by startups or during hackathons. Not getting initial MVP (minimum viable product) done in a reasonable time results in not using the framework at all. And as mobile apps are conquering the market right now and their market share expands even more, then it may happen that some other framework, with very easy rapid application development capabilities, kicks in. 1 2 3 All rights reserved. 2013 © ZeroTurnaround OÜ 32
  35. 35. App Type: Multi-user App Feature Ranking Throughput/Scalability H Code Maintenance/Updates H UX, Look and Feel H Security H Framework Complexity M Ease of Use M Documentation & Community M Testability M Rapid Application Prototyping L Framework Ecosystem L Concurrent usage of an application can be a challenge, is not unique to web applications, however the ways in which you present the ever changing state of your application to your users can lead to either a great user experience or a confusing mess. A great example for great user experience in this app type is a whiteboarding application, like Scribblar or the collaborative PDF markup app Crocodoc. Multi-user applications have a lot of necessary requirements. A positive user experience is the end goal, and with many concurrent users working with the same application its necessary that your application can handle it. A good UX and throughput/scalability fall onto the very important end of the scale--keeping the server load per-user low will ensure stability and speed. A good UX will keep users coming back, so it needs to be easy to use and, well, pretty. The look is the representation of your brand; beyond everything else, your UX is what’s going to be judged first. Your application also has to be easily maintained and updated, and like with any application that is handling multiple users, and those users’ information, there needs to be a lot of security. Secure information leads to happy users that continue to use your application. All rights reserved. 2013 © ZeroTurnaround OÜ 33
  36. 36. The Results: Multi-user App Rapid Application Development Framework Complexity Ease of Use Documentation & Community Framework Ecosystem Throughput/ Scalability Code Maintenance/ Updates UX/Look and Feel Testability Security Totals Priority L M M M L H H H M H Spring MVC 0 3.5 3 4 0 8 6 4 4 10 42.5 Grails 0 3 4.5 5 0 8 9 8 5 5 47.5 Vaadin 0 4 4.5 5 0 9 8 10 3 8 51.5 GWT 0 4 4 4.5 0 9 8 10 2.5 2 44 Wicket 0 2.5 3.5 3 0 6 9 7 4 10 45 Play 0 2 3.5 4 0 10 8 6 5 8 46.5 Struts 0 4 3 2.5 0 6 6 5 4 5 35.5 JSF 0 3.5 4 4.5 0 8 8 9 2 5 44 All rights reserved. 2013 © ZeroTurnaround OÜ 34
  37. 37. Our Analysis: Multi-user App Building a multi-user app can be intimidating--you want your users to have a positive experience, so choosing a solid framework is very important. Our top players were Vaadin, Grails and Play, which is not too surprising. Vaadin took the gold by a pretty decent amount; considering how it scales easily, it’s easy to maintain and update, has a wide variety of UX options that can be easily maneuvered between, and provides additional security features. It’s versatile, well-rounded and fairly easy to pick up. Grails and Play followed closely with similar scores. Grails fell a little short on security, mostly because it was built to be paired up with another framework like Spring Security, Apache Shiro or the Authentication plugin. It doesn’t include much extra out of the box support. Play, in contrast has a slightly lower score because of the framework complexity (the learning curve is a bit steeper than is ideal) and its shortcomings in UX. Unlike Vaadin, the component aspect of the framework isn’t well supported and Play applications generally utilize LESS CSS and CoffeeScript mixed with templates instead of the CSS and JavaScript leveraged by traditional Java web applications. GWT and JSF fell just short of the top three for fairly similar reasons, mainly because of their framework security additions or, rather, lack thereof. Wicket on the other hand might have made it into the top three if it wasn’t for its shortcomings in throughput and scalability. What’s very interesting is that GWT plus Spring Security would not beat, but comes close to, Vaadin’s score of 51.5. Taking advantage of GWT’s component library and the benefits, especially speed and scalability, paired with Spring phenomenal security, and you can see GWT become a real contender. Grails is in a similar boat; with the added security benefit of Spring, Vaadin has some real competition. 1 2 3 All rights reserved. 2013 © ZeroTurnaround OÜ 35
  38. 38. App Type: Prototyping App Feature Ranking Rapid Application Prototyping H Framework Complexity H Ease of Use H Documentation & Community H Framework Ecosystem M UX, Look and Feel M Throughput/Scalability L Code Maintenance/Updates L Testability L Security L There are times in software engineering where a developer just wants to see something running to try to get an idea of the workflow of their application. Or maybe when using a UI or layout issues become more readily apparent with the architecture of the application. This is where rapid prototyping becomes essential in the software development process. Often times a wireframe simple version of the application is enough to meet the criteria and other times a slightly more functional prototype is required. When creating a prototype of an application, the most important aspect is to get results quickly to prove or disprove a feasibility study. As a result, the Rapid application prototyping has to be a high priority. Ease of use and documentation are also high as when you’re writing a prototype with time constraints you don’t want to be slowed down by unnecessary gotchas or a lack of understanding due to lack of documentation. Throughput/Scalability and code maintenance are more production issues, and while important later are not such a concern now, similarly with Security. Some of these categories will of course depend on which area the prototyping app is focused around and may differ depending on the details of the app itself. All rights reserved. 2013 © ZeroTurnaround OÜ 36
  39. 39. The Results: Prototyping App Rapid Application Development Framework Complexity Ease of Use Documentation & Community Framework Ecosystem Throughput/ Scalability Code Maintenance/ Updates UX/Look and Feel Testability Security Totals Priority H H H H M L L M L L Spring MVC 5 7 6 8 4 0 0 2 0 0 32 Grails 10 6 9 10 4.5 0 0 4 0 0 43.6 Vaadin 9 8 9 10 3 0 0 5 0 0 44 GWT 8 8 8 9 3 0 0 5 0 0 41 Wicket 7 5 7 6 3 0 0 3.5 0 0 31.5 Play 10 4 7 8 4.5 0 0 3 0 0 36.5 Struts 4 8 6 5 3 0 0 2.5 0 0 28.5 JSF 6 7 8 9 4 0 0 4.5 0 0 38.5 All rights reserved. 2013 © ZeroTurnaround OÜ 37
  40. 40. Our Analysis: Prototyping App When building a prototype for an application, the frameworks that came on top in our review were actually the obvious candidates--Vaadin, Grails and GWT. Most of these frameworks scored high for rapid application development (which is obviously something you want to be doing when slapping together a prototype) and that do not get in your way by being overly complex so that you would get lost in the details while trying to get functionality out of the door. The documentation is good and the learning curve for getting a basic level of proficiency for putting together simple applications is also something that works heavily in their favor. Tailing the best choices are JSF with its exhaustive component library and Play, which (although looking like a solid choice for rapid development) falls behind of our top picks due to the steeper learning curve associated with getting familiar with it. When looking at what frameworks would get a knee-up over the others when we add Spring to the mix, it seems like there are none. The reason for this is that while Spring does bring a lot of goodies to the table--security, transactions, web services to name a few--in addition to what is provided by the framework, none of these seemed important enough that would warrant adding a new level of complexity to the application stack for this kind of app. 1 2 3 All rights reserved. 2013 © ZeroTurnaround OÜ 38
  41. 41. CHAPTER III: LET’S SEE THE RESULTS! It’s been a fun and eventful ride looking at each of the frameworks and we sure did have some great discussions/arguments while scoring each framework feature. But now comes the time to reflect on what we’ve seen in Chapter II and also how that changes the results from the original scoring table, back in Part I. All rights reserved. 2013 © ZeroTurnaround OÜ 39
  42. 42. The Overall Results Really quickly, let’s remind ourselves of the scores of the combined results of the 10 feature categories from Part I (the previous report) and Chapter I of this report: Spring MVC Grails Vaadin GWT Wicket Play! Struts JSF Totals 35 42 41.5 36.5 35.5 40 29.5 36 Grails, Vaadin and Play are a very close top three, followed by a sizable gap and then a very close grouping of GWT, JSF, Wicket and Spring, with Struts falling behind. Now lets look at the average result scores across each of the app types. We’ll add all the scores in total and then average them out across the 7 app types: Spring MVC Grails Vaadin GWT Wicket Play! Struts JSF Grand Total 249.5 292 303 261 263 284.5 212 258 Average 35.64 41.71 43.29 37.29 37.57 40.64 30.29 36.86 All rights reserved. 2013 © ZeroTurnaround OÜ 40
  43. 43. Now, for the fun of it, lets plot the average scores based on Application Type against the original scores in the Feature categories to see how the frameworks scores based on features alone increases or decreases when we add application types into the conversation. Spring MVC Grails Vaadin GWT Wicket Play! Struts JSF Totals 35 42 41.5 36.5 35.5 40 29.5 36 Average 35.64 41.71 43.29 37.29 37.57 40.64 30.29 36.86 From this table, and the graph summarizing it on the next page, we can see that , Grails is the only framework which seems to be worse off, albeit by just a small amount. The frameworks with the biggest increase seem to be Vaadin, and Wicket as well as some good increases by JSF, GWT and Struts. The top three scoring frameworks were clearly Vaadin, Grails and Play throughout this report, but others, including GWT and Wicket were never far away. Wicket managed a 2nd place spot for Desktop Port Applications, and GWT broke into the top 3 with prototyping. That’s not to say others shouldn’t be considered of course. For instance when you use JSF with the more comprehensive Java EE capabilities, particularly security, it turns into a much more favourable prospect. All rights reserved. 2013 © ZeroTurnaround OÜ 41
  44. 44. All rights reserved. 2013 © ZeroTurnaround OÜ 42
  45. 45. Spring MVC: For when you need an extra shot in your coffee Picture the scene. It’s early on Saturday morning and your head is racing to remember what exactly happened the night before. You go to your local coffee shop and order your traditional red-eye coffee to fix the situation you find yourself in. You think “I’m already paying a few dollars for a cup of my favourite Java brew, for just a few more cents I’ll get extra shot of espresso and life will be a better place” -- So what’s this got to do with Spring? Well, Spring, (like a shot of espresso) can be used to supplement your choice of framework (or coffee - hope you liked the Java reference!) providing additional value, which your framework potentially lacks at little extra cost. True, there are extra complexities involved, such as learning and maintaining more than one framework, but the benefit often outweighs the extra cost brought by these complexities. Spring’s tight integrations with the other frameworks is unique across the web framework ecosystem. Spring, back in it’s early days shined as the de facto web framework to use, created a vast community and user base. As a result, other frameworks made use of Spring’s tried and tested components and to become an option in a wider ecosystem which many others have also plugged into, none more so than Spring Security or Transactions support, which can be neglected by some frameworks. So, the other frameworks gravitated to Spring, because of it’s large existing community and by providing integration, they can be used together to deliver a complete solution. Remember, a common scenario will be a user who already uses Spring and is perhaps considering another framework to plug the UI gap. With good integration, a solution can be found to provide tried and tested security with good UI providing a better joint solution than their individual component parts. As conversations with many developers have proved, teams are accustomed to using multiple frameworks during development, whether on the same project or at different times. So although Spring doesn’t blow anyone’s socks off by itself, when used in conjunction with another framework, the synergy abounds. All rights reserved. 2013 © ZeroTurnaround OÜ 43
  46. 46. SUMMARY OF FINDINGS AND GOODBYE COMIC :-) Here’s the “too-long; didn’t read” (TL;DR) version of the report, where you can rest assured that we’ve curated the juiciest bits of the content into a single section that’s designed for lazy coders. Recently, we were told that the TL;DR section should come before a “pile of text”, but we figure that’s just related to the guilt incurred by lazy readers for skimming through dozens of painstakingly-prepared content to get to the last part. Ha-HA! All rights reserved. 2013 © ZeroTurnaround OÜ 44
  47. 47. Summary the comic: http://xkcd.com/292/ If we had to consolidate this entire report into one [long] sentence, it would be this: If you are going to choose one framework to rule them all, then we recommend Vaadin, Grails or Play as our top 3 choices, but if you want to synergize (ooh, 90s buzz word!) the benefits of multiple frameworks, then Spring plus nearly any other framework we covered (especially GWT, which saw the greatest gains) will yield the best results. The choice is yours. Anyway, here’s a summary of what we found: CHAPTER I - WHERE POOH AND PIGLET RANK FRAMEWORKS FOR TESTABILITY AND SECURITY Testability How do each of the frameworks help you test your app? Most frameworks made this process easier by integrating with good existing tools like JUnit and Mockito, but with helpful additions Play and Grails stood out and won the category, with Spring MVC and Wicket tying for second place. Security The ability to easily implement authentications, authorizations and other security features with your framework is crucial to many organizations. Both Wicket and Spring (other frameworks like Grails and GWT in fact integrate with Spring Security to bolster their feature set) win this category with excellent standard support. Vaadin and Play arrive in 2nd place, and last comes GWT, which needs the oft-attacked JavaScript, so we don't recommend using this framework alone. All rights reserved. 2013 © ZeroTurnaround OÜ 45
  48. 48. CHAPTER II - FRAMEWORK RANKINGS BASED ON APPLICATION TYPE CRUD (Create, Read, Update, Delete) app - e.g. Evernote For our next Evernote-like application, we would concentrate on ease of use, throughput/scalability and testability. In this category, Play and Grails stood above the rest with good scores in these categories. eCommerce app - e.g. Amazon Here a framework's ecosystem, throughput/scalability, UX (look and feel) and security are of the highest importance. Vaadin, Play and Grails are the top 3 highest ranking frameworks, with Spring, Wicket and JSF tied in 4th place. Video/streaming app - e.g. Netflix Simple yet very hungry, video/streaming apps like YouTube need a great UX and high throughput/scalability, which is why Vaadin is 1st and Play and Grails tie for 2nd place. Spring, GWT and JSF are also strong in throughput/ scalability, but leave things desired when it comes to UX design. Desktop application port - e.g. Salesforce Security, good UX and easy code maintenance/updates are the factors we judged to be most important for SalesForce-style apps, and Vaadin, Wicket and Grails all excel here. However, the super-combo punch is in fact Spring + GWT, which would in fact beat out Vaadin. Ooooh... Mobile app - e.g. m.google.com Security and UX look and feel will top the priority list for this app type. With security difficult to handle on mobile apps, so Spring and Wicket stood out here, but their lower scores on UX led to Vaadin and Grails taking 1st and 2nd place. Multi-user app - e.g. Scribblar or Crocodoc Concurrency and a great user interface are high priorities here, so throughput/scalability, security, UX and code maintenance/updates are all important in a framework. Vaadin and Grails again take the top spots, with high marks in all areas. Again here, a combination of Spring and another framework (namely GWT), would come in at 2nd place, though not beating Vaadin. Prototyping app - e.g. your own app in development :-) Want to make a testbed for your own app? Rapid app development, framework ease of use and level of complexity, plus docs and community are major areas to look out for. Being easy to use and easy to get started with, along with great docs and a strong UX, Vaadin just barely nabs the 1st place spot over Grails (2nd), followed by GWT, which excels in light of the low priority for high security features. All rights reserved. 2013 © ZeroTurnaround OÜ 46
  49. 49. CHAPTER III - THE RESULTS As the results show, Vaadin, Grails and Play are the first, second and third place winners not only for features like UX (look and feel), throughput and scalability, and ease of use, but also when compared across seven different application types, from eCommerce to Mobile and even Prototyping applications. JSF, Wicket and GWT are all fair contenders for the middle of the road frameworks, excelling individually in key areas but not bringing enough to the table in others. One interesting takeaway from this is the fact that although Spring MVC didn’t come in first in any single categories, due to it’s size, community and security it is in fact an ideal candidate to bundle with another framework, such as GWT, which gained more than any other due to the addition of Spring Security. Here we see that a combination of Spring and another framework will beat even Vaadin in many cases. That said, if you are going with a single framework for most needs, become a Vaadin ninja for extra happiness. All rights reserved. 2013 © ZeroTurnaround OÜ 47
  50. 50. All rights reserved. 2013 © ZeroTurnaround OÜ 48
  51. 51. This report is brought to you by: Simon Maple, Adam Koblentz, Sigmar Muuga, Cas Thomas, Sven Laanela, Oliver White, Ladislava Bohacova Contact Us Twitter: @RebelLabs Web: http://zeroturnaround.com/rebellabs Email: labs@zeroturnaround.com Estonia Ülikooli 2, 4th floor Tartu, Estonia, 51003 Phone: +372 653 6099 USA 399 Boylston Street, Suite 300, Boston, MA, USA, 02116 Phone: 1(857)277-1199 Czech Republic Osadní 35 - Building B Prague, Czech Republic 170 00 Phone: +372 740 4533 All rights reserved. 2013 © ZeroTurnaround OÜ 49

×