Matt RaibleMatt Raible is a writer with a passion for software. Connect with him on LinkedIn.

The Angular Mini-Book The Angular Mini-Book is a guide to getting started with Angular. You'll learn how to develop a bare-bones application, test it, and deploy it. Then you'll move on to adding Bootstrap, Angular Material, continuous integration, and authentication.

Spring Boot is a popular framework for building REST APIs. You'll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy.

For book updates, follow @angular_book on Twitter.

The JHipster Mini-Book The JHipster Mini-Book is a guide to getting started with hip technologies today: Angular, Bootstrap, and Spring Boot. All of these frameworks are wrapped up in an easy-to-use project called JHipster.

This book shows you how to build an app with JHipster, and guides you through the plethora of tools, techniques and options you can use. Furthermore, it explains the UI and API building blocks so you understand the underpinnings of your great application.

For book updates, follow @jhipster-book on Twitter.

10+ YEARS


Over 10 years ago, I wrote my first blog post. Since then, I've authored books, had kids, traveled the world, found Trish and blogged about it all.
You searched this site for "suck". 89 entries found.

You can also try this same search on Google.

[ANN] AppFuse 1.8.1 Released

This release is mostly a bug fix release with no new features. It also includes many upgrades to the core libraries (Hibernate, Spring, iBATIS, MyFaces). Thanks to all the sponsors who have contributed products and free hosting to the AppFuse project. You guys rock!

To see how AppFuse works, please see the following demos:

Comments and issues can be sent to the mailing list or posted to the AppFuse Issue Tracker.

Posted in Java at Jun 15 2005, 11:00:42 PM MDT 8 Comments

Java2Html Plugin for JSPWiki causes downtime

There's an annoying thing that currently happens with the Java code on my wiki: selecting code to copy doesn't work in Firefox (try it). Any easy workaround is to use IE. However, I found a solution yesterday after communicating with the author of the Java2HtmlPlugin for JSPWiki. His solution was to upgrade to the latest version (4.1) of the library. I did the upgrade yesterday morning, tweaked a couple of stylesheets and called it good. The copying was working and everything seemed to be fixed.

In the last 24 hours, this site has crashed around 8 times - seemingly every two hours. This is strange b/c it's been up a week at a time prior to that, as well as the fact that my ISP has scripts to restart Tomcat if it's not responsive. The only thing I changed was the java2html.jar, so I'm guessing that was the problem. I backed out the change this morning - and copying with Firefox is going to suck once again. Hopefully that change fixes the stability of this site.

Update: This site crashed 3 times today even after I backed out yesterday's change. It must be something else. It's wierd that it's crashing now after having several weeks of excellent stability.

Posted in Java at Apr 28 2005, 09:48:13 AM MDT 8 Comments

JSF needs better tools

In general, I don't like the fact that JSF is designed for tools vendors. However, after seeing a Visual Studio .NET 2005 demo - I can understand why that's Sun's motivation. Visual Studio is *very* cool and seems to greatly simplify ASP.NET development. That's why it's disturbing to see Why do JSF tools suck so bad?.

If the JSF Tools are going to suck (compared to Visual Studio), why don't we just make it more developer-friendly (instead of being so tools-friendly)? Of course, the better solution is to make the tools better, but that doesn't seem to be happening. Maybe we should just try to get Visual Studio to support JSF. ;-)

Posted in Java at Apr 19 2005, 09:38:07 AM MDT 14 Comments

How do we bake Ajax into Struts and Spring MVC?

I see a trend happening here. The next version of WebWork, as well as Tapestry and JSF are all embracing Ajax technologies. By "embracing", I mean they're not only using them, but they're making it easier for us to use them.

After using XmlHttpRequest in my last two projects, I think this is a must for Struts and Spring MVC as well. The technology is very cool and customers absolutely love it.

The question is how do we bake it in? WebWork makes it easy because its tag libraries are backed by customizable Velocity templates. With Struts and Spring MVC, it seems the best way would be to use tag libraries, but maybe there's better alternatives. Do they each need an AjaxAction/AjaxController or something that allows DWR-type stuff?

What are your thoughts? You might argue that using DWR should suffice, but w/ everyone else (even Rails) baking it into the framework - I see no reason why Spring MVC and Struts shouldn't do the same. You are using these frameworks to develop kick-ass UIs aren't you?

Posted in Java at Apr 15 2005, 06:20:28 AM MDT 13 Comments

DU going back to Frozen Four!

This past weekend I had a great time watching college hockey. DU played both Saturday and Sunday and won both games. This means they're going back to the Frozen Four. The best part? They're playing their arch rivals, Colorado College, in the first game next Thursday. Game starts at noon. Go DU! CC Sucks!

Posted in General at Mar 29 2005, 08:41:50 AM MST 3 Comments

[Microsoft] Day 1 Afternoon

At lunch, I got to meet Scoble, which was pretty cool. He was wearing a blue Firefox shirt for those that are interested. During lunch, he and his co-worker talked about Channel 9 and what they're doing with it. Channel 9 is named "Channel 9" because this is the channel that United (the airline) uses to allow passengers to listen in on the pilot's conversations. It's supposed to be an avenue for folks to listen in on what's going on at Microsoft.

Now we're sitting in a talk titled Developer Community Outreach Efforts. The speaker is named Sanjay. He's the VP of Worldwide Developer Evangelists, of which there are around 1000. Sanjay believes that MSDN is way too large. It does have a lots of interop and migration content for those that are interested.

Sanjay's trying to get ideas from us on what they can do better. The general feeling from the room seems to be "why should we help you", "what's in it for us" and "why do you care now, but not before". It's a tough room for sure. I don't seem much point in this whole talk. A lot of folks are telling this guy what he (and Microsoft) can do to become better to be better citizens to the programmer community at large. A lot of the conversation is centered on accepting open-source and providing a clearer message about the platform (should be inclusive, not exclusive).

SQL 2005 and the Developer

Now we have a guy (missed his name) that's talking about how SQL Server 2005 will allow you to expose web services directly from your database, without IIS involved. Apparently, it exposes queries and stored procedures as web services using a native Windows DLL.

Ben asked about benchmarks for SQL 2005, specifically against MySQL and PostgreSQL. The MS guy says that these vendors will need to do the "standard" TCP benchmarks, and do the comparisons there. We all know that SQL Server would get their asses kicked, and that's why they don't do any direct comparisons. While we're on the subject of SQL Server, why are most SQL Server databases so screwed up? In my experience, SQL Server DBAs tend to be over-optimization freaks that are stored-procedure happy and don't know much about making a database application-friendly. Maybe it's because all you need is a SQL Server DBA Certification to get the job - and your knowledge is based on a book, not experience.

Next topic: Access. Access is not going away. "SQL Express" is supposedly the target replacement for Access. It's throttled to prevent users from using it for a full-blown database. "You can never write a bad query for SQL Server." This is a direct quote, and the guy's reasoning is because the optimizer will change the query to be performant. Sounds like a bunch of hoo-ey to me.

Today, you can write extended stored procedures in C++ with SQL Server. This code is not sandboxed, and can pretty much to whatever it wants. In SQL 2005, you can do this with C# and use VS.NET to write the code and debug it. Apparently, they have a whitepaper on SQL CLR vs. ADO.NET and when to use one over the other.

Product Development Process with Iain McDonald (Director, Windows Server)

Iain is from Australia, which naturally makes him fun to listen to, just because of his accent. The purpose of this talk is to explain how they do things. Cross-org at Microsoft means that that development is spread across 7 businesses, each organized under own leadership with individuals p&ls.

  • Business Solutions
  • Home & Entertainment
  • Information Worker
  • Mobile & Embedded Devices
  • MSN
  • Server & Tools
  • Windows Client

Each group has a lifecycle model that they try to follow. Microsoft has thee different stages: Product Definition, Product Development and then Product Servicing. I'm willing to bet their product development cycle follows the waterfall approach (confirmed: "How agile are we? We suck."). Actually, this brings up something I heard last night from one of the Microsoft Evengelists. Apparently, each developer has two QA folks that write tests (read: code) against their code.

Suite of Project Tools

  • Feature Inventory Tool: an inventory of features and their dependencies, tracks when the features will merge into the main branch.
  • Checkpoint Express: tracks all compliance throughout the project, requires sign-off prior to product being shipped.
  • Basics: list of fundamentals that product is expected/required to meet, examples include performance and manageability.
  • Change Management: uses an infopath form with links to the feature inventory tool and bug tracking database (product studio).

Iain admits that security in 2000 was an afterthought and the security guys were seen as some mangy dogs over in the corner. Bad RAM causes 20% of Windows crashes - who knew?! Bad RAM on OS X has certainly affected me in the past. I couldn't upgrade to Panther b/c I had 3rd party RAM in my PowerBook.

Microsoft is in a competitive battle against other companies, not the free world. No corporation in their right mind is going to download and install a free version of Linux - most are going to buy a distribution from companies like Red Hat or Novell. Iain claims that there's no way you can install Linux (at a corporation) for less money than Windows Server. It sounds to me like MSFT is willing to give you some discounts on Windows Server if you're thinking of buying Linux.

Break time. I'm definitely bored, but happy to have some time to work on AppFuse. Some guy asked me in the hall why I haven't asked more questions. I told him because I don't develop for Windows. For the most part, none of this stuff matters to me.

Windows Architecture

Now we're listening to two guys talk about Windows and how it's developed. Windows XP and Windows 2003 Server are two separate code bases. It's a nightmare to maintain b/c they have to patch one code base and the other one as well. Longhorn is componentized, so it should be easier to build client, embedded and server products. Someone asked about legal vs. technical reasons behind the componentization. Apparently, it's all for technical reasons, and they have to separate Windows Media Player for the EU, but that's about it. 40% of blue screens are from device drivers, and Longhorn has done a lot to handle this and reduce crashes.

This talk centered on XAML, WinFX and Longhorn - what they are, what they do and when they're scheduled for release. <Yawn/> While it has been a boring day (for me) technically, I do have to admit that the speakers have been great. They're dynamic and enthusiastic, which is more important IMO than good technical content. They also seem to be very open (as a whole) to ideas and criticisms. I think I'm just a bad audience member.

OK - here's something that's interesting. We're talking about IE 7 and its features. The top priorities are to stop spyware, fishing and any other security issues. #2 is tabs and #3 is CSS compliance. These priorities are based on user feedback and sound like good choices to me.

Posted in Java at Mar 17 2005, 12:40:56 AM MST 4 Comments

[Microsoft] Day 1 Morning

"An open and honest dialog" - that's what the goal of this shindig is. Most of these sessions aren't really interesting to me. If there's APIs I can talk to, I'm cool with that, but as far as SQL Server 2005 and Windows Architecture ... I'm not interested. The thing I'm looking forward to today more than anything is meeting Scoble.

Most of the folks in this room seem to be community leaders, i.e. JUG Founders and architects. There's also a fair amount of "Developer Evangelists" in the room. Probably half the room is MS people. I wonder what the hell a Developer Evangelist does? Do they write any code? I'm guessing there's no MS coders in the room.

Michael Howard - Improving Security at Microsoft by changing the process

Michael Howard is the co-author of the "Writing Secure Code" book that we all received this morning. He's writing a new book called the "19 Deadly Sins of Software Security" - which apparently covers everything: Windows, Linux, OS X, Java, JSP, MySQL, Oracle, etc. Sounds like a pretty good book - it's got some open-source guy as a co-author too. It's a McGraw Hill book and should be short-n-sweet at 300 pages. Michael is the Senior Security Program Engineer and sounds like a champion of the "Trustworthy Computing" mantra here at Microsoft.

zone-h.org tracks the number of web server attacks. Michael is talking about the fact that IIS 6.0 has had one security bug in 2 years, while Apache 1.3 has 13 and Apache 2.0 has had over 20. "Apache has more security bugs than IIS."

Everyone has security bugs, we're the only ones doing something about it.

Application compatibility is now a #2 priority at Microsoft, Security is #1. They're willing to break application compatibility, a.k.a. "app compat", for the sake of security.

Threat Modeling - they do a lot of research on skills vs. motivations. They're basically trying to understand not only how, but why hackers attack.

OK, this is a pretty boring talk - mostly because it doesn't interest me. There's a lot of talk about security in "Whidbey", which is the next version of Visual Studio.NET. Apparently, it's now got some tools to detect security issues and memory leaks. My boredom has caused me to start working on AppFuse, and to try out the USB Flash Memory Drive they gave us. It's kinda funny - the box it came in has a link to where you can download the drivers for Windows 98/SE. No driver is needed for ME/2000/XP. I also discovered that it works great on the Mac. Cool - too bad it's pretty much useless if you're always online like I am.

Heh, shortly after writing the above, I yanked out the device and it killed both Keynote and BBEdit. It's definitely a useless device!

Don Box - Microsoft Messaging Futures Using Indigo

Don is taking an interesting approach to his presentation - and typing it all in notepad. He wants us to tell him why we think MSFT sucks. Don works on the XML messaging stack. Specifically, he's an architect on Indigo and he worked on the WS-* specs. An audience member puts a stop to the typing because he's legally blind and can't read anything. Here comes the talking. How does Microsoft suck?

Audience feedback:

  • Community Involvement sucks
  • Need to do security by default
  • COM+ isms not there - transactions more mature in J2EE
  • Does MS believe in managed code?
  • 2 year platform cycles, re-invention w/ every release
  • Dependency hairball - shouldn't have to buy other products to make simple things work
  • Dependency Injection, IoC, ORM

I brought up the fact that MSFT crushes or buys their competition more often then not. Don spent some time answering this question, defending MSFT a bit, but also saying that we're in a new decade now and it's a very competitive industry. For the record, I don't really believe MSFT is the "Evil Empire" like many hard-core Linux and open-source guys. I have quite a few MSFT certifications, but I've found most of them useless in my career - except that I can easily troubleshoot and fix most of the issues I have on Windows. I use Windows and prefer it over OS X for the most part, but that's because I'm more efficient using Windows, and because my Windows box is much faster than my PowerBook. ;-)

Don reminds me of a good friend of mine - Chad Shoup - but he's about 10 years older. For those of you who know Chad, you know he's fun to listen to. I don't have much interest in the talk (I don't even know what Indigo is), but it's an enjoyable talk - mainly because he's enthusiastic about what he's talking about - and he's walking around the room, keeping the audience involved.

RelaxNG is better than XSD. The primary goal of Indigo is to satisfy the customers and consolidating the choices in .NET so that choices are easy and explicitly - instead of having a number of different products that do the same thing. They don't plan on taking choices away - they just plan on making the choice easy and explicit. If you're working with .NET, there might actually appear to be an architect behind it all.

Don goes on to address all the audience feedback and explain MSFT's position and what they're doing to address this. Sorry, I tuned out as I wasn't that interested. The one interesting quote I got out of this session is "I believe we're going to be more than competitive in O/R Mapping. Soon."

Richard Monson-Haefel asks "Is there a place for AOP in .NET or is it too sophisticated for your developers." Don's take is "My development platform should allow me to write code w/ a couple of beers in me." He ragged a bit on Java developers and said their main problem is they think they're smarter than they are. He also said that if he could change on thing at MSFT, it would be that Ruby becomes the language of choice.

Break time: yogurt and granola. I got a picture with Don and will post that as soon as I find a cable. I'm also going to see what this "Double Strength, Double Size, Rockstar Energy Drink" is all about. It sounds poisonous, but it's likely to give me a wicked buzz or make me throw up. Seems like a good experiment.

Looking outside, it's raining now - which seems appropriate now that we're going to have a Programming Language Design Panel. The rain goes with my depression that I have to sit through this session. I doubt it'll be of any interest to me.

Programming Language Design Panel: Jim Miller (CLR Architect), Herb Sutter (C++ Architect), Jim Hugunin (Lead for IronPython and dynamic languages on CLR)

Jim Miller: The five programming languages that Microsoft ships: C#, VB.NET, C++, J# and JScript. Generics are now a part of the run-time environment. Closures and light-weight code-generation will also be available.

Herb Sutter: Only guy on the panel that cares about managed and native code.

C# Guy: C# 2.0 features: Generics - code looks a lot like Java, but implementation is very different in CLR. Closures so you can pass methods as arguments. Iterators - lazy enumeration of collections like Python and Ruby. Partial types or structured include files - multiple files make up one class (good for code generation).

Jim Hugunin: Used to be a Java Developer, working with AspectJ and other dynamic languages. He wanted to see why .NET was such a horrible platform for dynamic languages. A year later, he found himself working for Microsoft. He's found that .NET is a good platform for dynamic languages (of course, right?). His current job is getting IronPython to 1.0.

Dion asks about Ruby on .NET and about AOP in .NET. Jim doesn't know of any major projects that are addressing Ruby on .NET. C# guy says that we have a lot we can learn from dynamic languages and thinks the best thing is to allow less typing (i.e. declare type once) in strongly-typed languages like C# and Java. As far as AOP, the C# guy is still in the wait-and-see mode.

Rockstar Energy Drink Status: I made it about 1/3 of the way through it before the stomach ache kicked in. Now I'm jittery and nauseous... <great/>

IronPython will likely be an open-source project b/c the Python Community will probably reject it otherwise.

Will Java 5.0 code be able to easily port into J#? The panel doesn't know and thinks it's more of a legal question. J# currently supports JDK 1.4 syntax and they don't think there current license allows supporting JDK 5.0.

Mono - they've been taking a wait-and-see approach to see the commercial uptake on it. So far, they haven't seen a whole lot of commercial interest in Mono, nor any licensing requests from Novell.

Posted in Java at Mar 17 2005, 12:29:00 AM MST 4 Comments

When GMail and Firefox Suck

For the most part, both GMail and Firefox rock. However, when you're typing a long e-mail in GMail and you hit Ctrl+R instead of Ctrl+T, it really sucks. Rather than opening a new tab, I lost my whole e-mail message. Damn. Maybe it's time to go back to the desktop client. I've lost a few e-mails with GMail, but I don't think I've ever lost one with Outlook or Thunderbird. I guess it's time to setup GMail's POP3 access.

Posted in The Web at Nov 30 2004, 02:08:11 PM MST 7 Comments

Comparing Web Frameworks: Presentation Outline

My Comparing Web Frameworks outline is due to the ApacheCon Planners today. I spent a couple of hours putting it together this morning and I'm mostly done. In reality, I know that I won't cover the things that everyone wants to know. In an ideal world, I could simply target the presentation towards people like me: they know Struts but want to learn more about the other frameworks. Before diving in, they want to know some things to watch out for.

The problem with doing that is writing for people like me sometimes backfires. I'd like to make it an advanced presentation, but I'm not an authority on all 5 frameworks - so that seems a bit far fetched. However, if I could add Tapestry and JSF support to AppFuse in the next two weeks - I'd have a lot more experience to refer to. But that ain't gonna happen - the first update chapter for Spring Live is due next week. OK, enough rambling - here's the slide titles I've come up with. So far, it's 22 slides and shouldn't grow any since it's supposed to be finalized when I submit it.

  • Who is Matt Raible? My background, open source involvement, etc. Trying to give myself some credibility. ;-)
  • Framework Experience: Long time Struts user, used Spring since end of last year, developed apps with other three this summer. AppFuse supports Struts, Spring MVC and WebWork; Tapestry and JSF coming before end of year.
  • Meet the Candidates
    • Struts: Pros and Cons. Pretty much a standard, lots of examples, HTML tag library kicks ass. ActionForms kinda suck, can't unit test (only StrutsTestCase integration tests), Mailing list is swamped.
    • Spring MVC: Nice lifecyle (for overriding binding, validation, etc.) integrates with many view options seamlessly, IoC for easy testability. Not widely used, requires lots of code in JSPs, almost too flexible (no parent controller for SimpleFormController and Controller).
    • WebWork: Simple architecture, tag library easy to customize, interceptors are pretty slick. Documentation only recently written, few examples, client-side validation needs work.
    • Tapestry: Very productive once you learn it, templates are HTML (great for designers), healthy project. Documentation very conceptual, rather than pragmatic (lots of "read the book"). Steep learning curve, few examples. Impossible to test - page classes are abstract.
    • JSF: J2EE standard (lots of demand and jobs), fast and easy to develop with, rich navigation framework. Tag soup for JSPs, a bit immature (doesn't come with everything), no single source for implementation.
  • Controllers and Views: Show controllers for all 5 frameworks and template page (JSP/HTML) for forms. Give URL to download sample apps.
  • List Screens: How easy is it to integrate a sortable/pageable list of data? Struts, Spring and WebWork can use tag libraries like the display tag, value list or data grid. Tapesty has contrib:Table. JSF has dataTable component that requires custom logic for sorting (let me know if this has changed).
  • Bookmarking and URLs: Struts, Spring and WebWork give you full URL control. Tapestry has ugly URLs. JSF does a POST for everything. Conclusion: first 3 play nicely with container-managed authentication. Tapestry doesn't (although there's a patch for pretty URLs). JSF is not friendly to bookmarking.
  • Validation: Struts and Spring MVC can use Commons Validation - a mature solution. I've heard it's architecture is ugly, but who cares - it works! WebWork uses OGNL which allows powerful expressions. Client-side support is new and maturing. Tapestry has robust validation w/ good messages out-of-the-box. JSF has ugly default error messages, but is the easiest to configure.
  • Testability: Struts you can use StrutsTestCase, which requires web.xml and struts-config.xml. WebWork and Spring allow easy testing with Mocks. Spring has a spring-mock.jar that can be used for mocking the Servlet API with any framework (it's not Spring-specific). Tapestry is impossible to test because page classes are abstract. The argument I've hard is "you don't need to test them b/c they're so simple." JSF page classes can be easily tested and actually look a lot like WebWork Actions (except they don't extend anything).
  • Success Messages: The easiest way to solve the duplicate-post problem is to redirect after doing a POST. Struts is the only framework that allows for success messages to live through a redirect. It's fairly easy to get i18n messages in a Struts Action. Spring has nothing "built-in" for success messages. Long classnames / method arguments make it kinda clunky to get messages. WebWork has the cleanest way to get messages using a simple "getText()" method. Both require a custom solution to make your messages live through a redirect. Tapestry requires you to throw an exception to redirect and it still doesn't redirect (I haven't solved the duplicate post problem with Tapestry). JSF requires lots of code to get a ResourceBundle, but you could use Spring's IoC to inject a "messageSource" bean, making it a lot easier. JSF requires a custom solution for messages to live past a redirect.
  • Spring Integration: Supported by all, sample apps have examples (quick slide).
  • Internationalization: JSTL's <fmt:message> tag makes it easy in all JSP-supporting frameworks. Too bad there's not a standard for getting bundles in controllers and setting messages. Struts, Spring and JSF encourage you to use one ResourceBundle for all messages while WebWork and Tapestry encourage separate files for each page/action. This strategy is probably better for large teams.
  • Page Decoration: I used to be a huge advocate of Tiles (using it since August 2001). SiteMesh is much easier to setup and use. Tiles can be used in Struts, Spring MVC and JSF. SiteMesh can be used with all 5 frameworks. In fact, the sample app uses the same SiteMesh setup for all w/o changing a thing. SiteMesh requires no maintenance, Tiles requires you add entries to tiles-config.xml whenever you add a new page.
  • Tools: Struts has lots of tools available for it and even frameworks built on top of it (i.e. Beehive's NetUI/PageFlow). Spring has Spring IDE which is really just an XML tool for validating your bean and their relationships. WebWork has none (that've been released), but it is on the roadmap. Tapestry has Spindle, which is great for code-level programmers. It doesn't do drag-n-drop, but it does validate relationships between files. JSF has lots - but all of them cost money and tend to hook into proprietary app servers.
  • Business/Marketing: Struts has lots of jobs and is well-known in the industry. A lot of enterprise applications are based on it. Spring is getting more press, but mostly because of the framework's other features. Knowing the rest of Spring is more valuable than Spring MVC. WebWork is gaining ground, but it's still virtually unheard of on job boards. If you do get gigs using WebWork, it's likely word-of-mouth and you'll probably be working with some pretty smart people. Often used with Spring and Hibernate. Tapestry needs more marketing - no one has heard of it, hence no jobs exist for it. JSF is quickly becoming the most popular. Want to stay employed? Learn JSF. The best reason: so you can back up your arguments on why you do/don't like it.

    Dice Job Count: Struts (1006), Spring (15 - not a very good name for searching, used "spring framework"), WebWork (14), Tapestry (9), JSF (147).

  • My Opinion: You have to come to the conference for that ;-). Slides should be posted following my presentation.
  • Resources: Link and such for downloads, frameworks and tools mentioned.

Comments, suggestions, like it/hate it? Let me know. I expect to send this in in a few hours - so you'd better be quick!

Posted in Java at Oct 15 2004, 12:02:03 PM MDT 22 Comments

Comparing the Big 5 Web Frameworks

My session at ApacheCon is titled Comparing Web Frameworks: Struts, Spring MVC, WebWork, Tapestry & JSF. I have to turn in my presentation by Friday. The purpose of this post is to get your feedback and see what you'd like to see in such a talk. Here's the abstract:

This session is designed to explore the popular Java web frameworks. It will briefly explain how each one works and the strengths and weaknesses of each. Tips, tricks and gotcha's will be plentiful. A simple web application will be dissected and the different options will be compared. Lastly, it will provide attendees with a sample app they can download that has options to use any of the frameworks described.

The simple webapp is MyUsers from Spring Live. As part of my gig with Open Logic this summer, I wrote a number of sample apps using Equinox. Among these where 1) a Mavenized version, 2) a Tapestry version, 3) a JSF version, and 4) WebWork version. The Struts and Spring MVC versions were already done as part of the book. They agreed to let me use the code and knowledge from that experience. This is all to say it shouldn't be too hard to create the sample app for this talk.

The hard part is going to be talking about things that developers care about. In my post on JSF a while back, I noted the things I typically want in my webapps. The following topics might make good points of discussion.

  • A sortable/pageable list of data. It's possible, but you have to add special sorting logic for each class. JSP already has this with the display tag - I'd simply like to be able to use it in JSF.
  • Bookmarkability. Container managed authentication gives us a great way to offer users the ability to bookmark pages. If everything is a POST with JSF, we lose this ability. Sure there's the HTMLOutputLink, but if we can't invoke actions, what good is it?
  • Clean and easy to read validation messages. The validation messages in both MyFaces and Sun's RI are not something you'd deliver to customers. What's wrong with making clean messages out-of-the-box? Tapestry seems to have no problems doing this. All the other MVC frameworks make you specify your own - which is fine with me.
  • Easy cancelling and multi-button form handling. JSF does this well - better than the rest I'd say.
  • Easy testability. Because of the plethora of JavaScript, JSF apps are difficult to test with tools like jWebUnit and Canoo's WebTest. Don't get me wrong, I love JavaScript - but an application should be able to be tested w/o it.
  • Success Messages. JSF does success messages OK - it's a pity it's not easier to get a resource bundle and it's a shame that you can't escape HTML in the <h:messages> tag. This seems like an oversight to me.

I could do a number of slides and show how each framework handles the above situations. Other topics that would be worthwhile would be:

  • Model in View - can you use your model objects to back forms or do you have to use something like ActionForms?
  • Spring Integration - all of them have this. This would merely be a discussion on how its handled.
  • Validation - how robust and/or extensible is it? How hard is it to do chained validation? What about client-side validation? Is the client-side stuff immature like WebWork's?
  • Internationalization - how is it done and how hard is it to get messages in your classes? JSF sucks at this.
  • The Duplicate Post Problem - how does it handle duplicate posts. Not the "push the submit button twice" but the "hit refresh after saving" kind. Tapestry fails this test.
  • Page Decoration - SiteMesh can be used for all frameworks, Tiles for some. Discuss how much easier it is to use SiteMesh.
  • Tools - since some frameworks have tools to help ease there development and others don't.
  • Business/Marketing - how well known is the framework and will your skills be marketable if you learn it? JSF and Struts are in high demand. Tapestry is virtually unheard of. WebWork is for the evil few (heh!) and Spring MVC is the new kid on the block.

Whaddya think - what is so special about your framework that'll make it look better in my talk? What are the things that suck that I can bash on? If you're a committer on one of these frameworks - are you going to be at ApacheCon? I'd love to have some folks defend their projects after I'm done ripping on them. ;-) If I don't rip on yours, then you can bask in all its glory.

If you live in Denver, I'll be delivering this presentation at DJUG's Architecture SIG on November 3rd.

Posted in Java at Oct 12 2004, 11:59:16 PM MDT 28 Comments