- Java Reference Guide
- Overview
- Table of Contents
- J2SE: Standard Java
- Java Windows NT Services
- Advanced J2SE
- J2SE 1.5.0: "Tiger"
- Java SE 6
- Core Computer Science Principles in Java (Data Structures)
- Annotations
- Java Generics
- Java New I/O
- Java Sound
- Java Applets
- JavaFX
- Java SE Threading
- Resource Management Using Semaphores
- Java Atomic Operations
- JavaTemplate Pages
- Executing Templates with the JtpExecutor
- Java Cryptography Extensions (JCE)
- Java Database Connectivity (JDBC) API
- Jakarta Commons - Net Class Library
- Jakarta Commons HttpClient
- Apache POI
- Regular Expressions
- JavaMail
- Cool Tools
- Building an Really Simple Syndication (RSS) Java App
- Logging with Log4J
- Inside Swing
- Swing Components
- SwingX
- Swing Styled Documents
- Web Rendering in Java Swing Applications
- Java Look-and-Feel Graphics Repository
- Java Media Framework
- Quicktime for Java
- Media in Java Review 2008
- Graphs and Charts
- Holiday Special: Electronic Greeting Card
- Media Framework: Presenter Application
- Standard Widget Toolkit
- JFace
- Java Performance Tuning
- J2EE Performance Tuning
- Caches and Pools
- Java Caching System
- Java Compression and Decompression
- Obfuscating Java Applications
- Continuous Integration
- Load Testing
- Tomcat Clustering
- Enterprise Java Testing
- Automated Unit Testing with JUnit and Ant
- Unit Testing: Tips From The Trenches
- Custom Ant Tasks
- Extensible Markup Language (XML)
- Java Web Technologies
- Web Frameworks
- Performance Analysis Plan
- The Players
- The Evolution of Dynamic Content Generation
- The Model-View-Controller Pattern
- Apache Struts
- Building a Simple Apache Struts Example
- Server-side Form Validation
- Client-side Form Validation
- The Struts Validator
- The Struts Validator – Part II
- Custom Validators
- Tiles
- NetBeans
- Struts Development with MyEclipse
- Struts Development with BEA Workshop for Struts
- Struts Development with BEA Workshop for Struts, Part II
- Summary
- Struts 2
- Wicket New
- JavaServer Faces
- Distributed Programming / RMI
- Servlet Filters
- Building a Robust Java Server
- J2EE: Enterprise Java
- Spring
- Java Design Patterns
- XDoclet
- Hibernate
- Project Backup
- J2EE Project: Hands-On
- Enterprise Java Beans (EJB) 3.0
- Disaster Recovery
- Java Management Extensions (JMX)
- Service-Oriented Architecture
- Web Services
- Project: Building a Web Photo Gallery
- J2ME: Micro Java
- Specialized J2ME
- Optional Packages
- Other Java Technologies
- Derivatives and Competitors
- Java, Engineered for Integration
- Additional Resources
- The World of Java Tools
- Building Java Applications with Ant
- Managing Java Build Lifecycles with Maven
- Source Control with Subversion
- Inversion of Control and Dependency Injection
- Certification
- Roadmap: Becoming an Enterprise Java Developer
- Roadmap: Becoming an Enterprise Java Developer in 2007
- The Business of Enterprise Software
- JavaOne 2006
- JavaOne 2007
- JavaOne 2008 Wrap-Up
- JavaOne 2009 Wrap-Up
- How to Survive in a Turbulent Job Market
- How to Hire the Best Talent
- Cloud Computing
- Enterprise Java in 2008 and Beyond
- Predictions for 2018
Web Frameworks
Last updated Aug 18, 2006.
As a Java web architect, it is your responsibility to choose the appropriate web framework to solve your business needs. You have plenty of choices available off the shelf or you can build your own framework from the ground up, it all depends on how specialized your application needs to be and how much effort you want to exert in maintaining your framework.
In this series I will present an overview of the goals and motivations behind web frameworks, survey each of the major open source frameworks, and generate a comparison between the frameworks to help you in making the most educated decision to suit your specific needs.
There are many factors that you need to consider when choosing an application framework, including but not limited to:
- Suitability for your specific business needs
- Developer productivity
- Performance
- Support and community activity
- Technology maturity
- Developer prowess
- Business relationships
First and foremost you need to choose the framework that is most suitable for your specific business needs. You do not necessarily want to choose the latest and greatest technologies if you have to force your business problem into a model that it was never designed to be in. I have been through this exercise with a company in the past, and while it was a great learning experience working with the newest technologies, in the end the product suffered because the problem domain was not properly analyzed and we had to transform our business problem to suit the technology. The technology needs to be an enabler to better help you solve your business needs.
Performance and productivity are all most always at odds with each other: the best performing application is seldom the easiest to maintain and develop. Only by understanding both the performance and the developer productivity of implementing an application on top of each framework can you strike an acceptable balance between performance and productivity. You might opt for a lesser performing technology in favor of higher productivity, or you might sacrifice some productivity in favor of performance gains. As always, the correct answer is that it "depends" on your goals, timelines, and motivations.
Another aspect that you need to consider when choosing an open source framework is the size of its developer community and the level of activity of that community. You might find the most interesting and technologically advanced framework, but if there are only a handful of developers working on it with patches and releases only being released every quarter or six months, you have to seriously consider whether you want to risk adopting something that may require significant self-enhancement in the future. Remember that the framework should be an enabler for you to solve your business problems, and if you have to spend too much time developing the framework, you will be distracted from your goal: your business problem.
Alongside the size and activity of the developer community, you need to consider the maturity of the technology. Alpha or beta code will experience its own growing pains as it evolves into a production-ready framework, and this could lead to uncertainty in problem diagnosis between your application and the underlying framework. On the other hand, mature and proven frameworks instill you with more confidence that you can trust the performance and reliability of your final product. There is a big difference between alpha code and code that has been in large production environments. And you have to decide how much risk you are willing to take in favor of a potentially technically more advanced technology over a proven technology.
Next, you want to consider the technical prowess of your developers. If you have a company full of individuals that are very experienced in a particular technology, you may select a framework in which they can be immediately productive rather than absorb the learning curve of adopting a new technology. This decision is determined by analyzing the productivity of the technology itself with your developers experience and capacities to learn new technologies.
Finally, you might need to consider business relationships in your decision. If your company has a strong relationship with a particular commercial vendor that supports either their own or an open source framework, then you might be inclined to adopt that framework. In some situations I have seen an inferior technology for a project adopted for business reasons, but it was a necessity to generate that business support. As developers sometimes we lose sight of the overall business when evaluating technology, but we must realize that the technically best application that cannot be sold is not worth anything to the business. If this occurs, hopefully you are in an organization that is open enough to justify such decisions, if just for your peace of mind!




Account Sign In
View your cart