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 "framework". 558 entries found.

You can also try this same search on Google.

Spring MVC vs. WebWork Smackdown at OSCON

Matthew Porter and I are going to try something a bit different at this year's OSCON. Rather than just getting up in front of the crowd and spewing our technical know-how, we're actually going to make a go at providing some entertainment. I've been to a lot of conferences and I'm tired of just watching someone talk - I'd rather see a good presenter over a knowledgeable presenter. This has inspired our OSCON 2005 talk:

This presentation has a unique delivery style. Rather than one person doing a comparison, there are two presenters - each which is an expert in the framework they're defending. The presentation is delivered as a friendly comparison/debate, which hopes to add some humor in to make it fun for the audience.

Java web developers often have a difficult choice when choosing a web framework these days. There are currently more than 35 open-source Java web frameworks available. How do you which one to use for your project? This presentation picks two of the most popular frameworks, Spring MVC and WebWork and compares and contrasts their features. Topics will include:

1. View options - i.e. Velocity, JSP, HTML Templates (ala XMLC), etc.
2. Testability - How easy is it to unit test with JUnit, with examples
3. Type conversion - i.e. Date, Integer, etc.
4. Validation - How do do it, stengths and weaknesses
5. Tools Support
6. Strengths and Weaknesses

Now the pressure's on - we have to both teach and entertain the audience. Please feel free to post your experiences with Spring or WebWork and why you think one is better than the other.

Posted in Java at Mar 09 2005, 09:31:36 AM MST 25 Comments

Is Laszlo a waste of time?

According to Rife founder Geert Bevin, Laszlo ain't all it's cracked up to be:

It's a shame, I really had huge expectations about Laszlo and even tried to sell it to a customer. I'm glad that project was cancelled or I would be in deep trouble.

Under normal circumstances, I'd dismiss this as FUD, but Geert sounds like he did his homework on this one.

Posted in Java at Mar 08 2005, 10:44:02 AM MST 9 Comments

Simple Web Framework

You gotta admit, the Simple Web Framework does look interesting with all of the recent Ajax talk:

The Simple Web Framework (SWF) is an event based framework targeting Struts developers who want to build rich Web applications but do not want to migrate to JSF. The SWF is built upon the same Jakarta commons basis as Struts, but uses a different request processor (front controller.) The SWF event model supports form/submit style event posting, similar to VB.NET or JSF, as well as XmlHttpRequest based event posting with In place Page Updating (IPU) rather than page reloading, similar to the techniques underlying gMail. Read the SWF Overview for additional information.

My hope is that all web frameworks have some support for IPU by the end of the year. Then I won't have to build it into AppFuse. ;-)

Posted in Java at Mar 07 2005, 07:57:56 AM MST 3 Comments

[TSSS] BOFs, Booze and Benitar

On Friday night, I attended all three of the 7:30 Birds of a Feather sessions. The first one I went to was Spring, where Rod talked about what's coming in Spring 1.3. Rod did a 25 minute presentation on the new stuff and then opened the floor up to Q and A. The session was well attended and I skipped over to the Tapestry/Trails BOF when the Q and A started.

I was surprised to find that very few folks where at the other BOFs. While the Spring BOF had 50+ attendees, the Tapestry one only had around 15-20 and JSF had around 8. I quickly left the Tapestry/Trails BOF when Chris started walking through his Trails Video. He was doing a live version of it, and since I'd already seen it, I figured I wasn't going to learn anything new. I've also been following Trails since it first started, and was more interested in talking about Tapestry.

I walked into the JSF BOF as Ed was talking about JSF 1.2 and what's next for JSF 2.0. This was good timing as I had a few suggestions for 2.0: HTML Templates like Tapestry, bookmarkability (don't make everything a post) and thinking about tools like Tiles and SiteMesh. While neither tools is part of the spec, I think they should be remembered in case there's an opportunity to make integrating with them easier. Ed did mention that JSF 1.2 has pretty much solved the content-interweaving problem, so putting HTML in your JSF JSPs should be better supported.

The very interesting part of this BOF is that Ajax capabilities are very much on the radar for JSF 2.0. They plan on providing native XMLHttpRequest capabilities. My suggestion for this was to provide the setup and registration of requestable class methods as part of the framework, and leave writing the JavaScript to the developer. This was a good BOF and I'm pumped to see that JSF is embracing the next-gen way of developing webapps. Let's just hope JSF 2.0 is released this year and not 2 years from now.

After the BOFs, I joined Matt and Jim to wait for one of Matt's buddies (Scott) to come into town. After he arrived, we headed over to the OpenSymphony open bar at the Bellagio. There, I got to meet Patrick Lightbody and enjoyed several beers and good conversation with the likes of Seth Ladd, Thomas Risberg, Mike, Dion and Christian.

After the open bar closed, Jim, Matt, Scott and I headed just off the strip to the Gold Coast Casino. Matt and Scott wanted to find some poker (tables had a 2-hour wait on the strip) and Jim and I wanted cheap Blackjack. We were pleased to find $5 tables and stayed there for several hours. I don't know what time we headed back to our hotel, but I'm guessing 1 or 2. The rest of the night was pretty funny. Jim and I gambled until 7 in the morning at several blackjack tables. Our hotel had this "celebrity theme", so we had dealers like Pat Benitar and Stevie Wonder throughout the morning. Both of these dealers were great and I got "hooked up" on several occasions. There were at least 10 times where I asked for a card and they didn't give it to me (after which I won b/c they busted). We ended the night at 7:00-7:30 with 5 crisp $100 bills in my pocket. Total cost of the whole trip: $100. Not bad eh?

Getting home yesterday was quite an adventure. After going to bed at 7:30, I woke up by some miracle at 11:00. I don't know if I had a wake up call or what, but my buzz was still in full swing. I caught a cab and headed to the airport. I paid the cabbie with a $25 chip, which he didn't like, but after I told him to keep the change (it was a $6 cab ride) - he happily obliged. At the airport, I took a nap while waiting for my flight to board and almost missed it. They called my name over the intercom b/c I was the only passenger left to board. Luckily, I was awake and made the flight. Upon arriving in Denver, I walked to my car and promptly locked my keys in the trunk. The airport officials got them out for free and I made it home to a very happy family around 6:00 p.m. It's good to be home.

Posted in Java at Mar 05 2005, 06:09:32 PM MST 3 Comments

[TSSS] Days 1 and 2

I'm sitting in the EJB3 BOF right now. The room is packed, but it seems most folks are uninterested and the moderators are just talking amongst themselves. Seems like a good time to blog since this BOF doesn't interest me whatsoever. Yesterday, I arrived at 8:00, took a cab to the Imperial Palace (where we're staying) and then headed over to Caesar's for the conference. I registered, assured we could drink beer during the sessions, and attended the (rather dry) keynote. Hani has a good synopsis of this talk.

After the keynote, I went to Patrick and Jason's WebWork talk for about 10 minutes. I soon realized it was an intro to WebWork and left to try and learn something. I went to Craig McClanahan's talk on "The Development of Web Application APIs and Standards for Java." His talk was pretty good, and covered "de facto" versus "de jure" standards. De facto standards are ones that evolve from the community through widespread usage, whereas de jure standards are imposed on the community (like JSF). Again, Hani has the full scoop on this talk.

Next, I went to Dion and Ben's talk on Ajax applications. They talked about XHTML/CSS and how XMLHttpRequest makes rich client-side applications possible. I think the whole Ajax thing is pretty funny. It's something that's been available for several years and my guess is most folks just didn't know about it. I've been using XMLHttpRequest for a couple of years now, and it's interesting to see it become popular all of a sudden. It's quite nice actually. I've been writing HTML/JavaScript for over 10 years, so I find Ajax development pretty easy. I hope to add support for Ajax-type features in AppFuse before this summer.

I wonder when/if the community will realize the power XSL processing in the browser? Since we're all developing XHTML applications now, our pages are XML and we could easily start leveraging client-side XSLT to do some pretty cool stuff. With a client-side XSL sheet, you could do page decoration (like SiteMesh) just by adding one line to your pages. For example:

<?xml-stylesheet type="text/xsl" href="styles/global.xsl"?>

The only problem with client-side XSLT is your pages have to be well-formed XML or everything bombs. With HTML, if you screw something up, chances are the browser will still render it correctly.

After the Ajax review, I had lunch and headed down to the Casino for some beers and gambling. I came back in time for Rod's "Why J2EE Projects Fail." It was a good talk, but there wasn't any revolutionary or new information provided. After his talk, I was motivated to learn more about Web Services Security, but instead opted for beers with Crazy Bob, JIRA Mike and Neon Dion. A couple of beers turned into several, and I found myself having dinner with the SourceBeat guys (Bill, Matt and Jim) a couple hours later. Steak and Lobster was my plate of choice and it tasted quite good. The rest of the night was spent gambling, drinking and harassing Pai Gow Poker dealers. We had breakfast around 2 and made it to bed by 3. Total cost of the trip so far: $300.

I slept in until noon today, after which Jim and I headed back to the conference for some lunch and afternoon sessions. Lunch was good and followed by Oracle demoing JDeveloper and coding EJB3 and JSF with it. I've often wondered about the cost of Oracle's ADF JSF implementation and actually got an answer from one of the attendees. I think he was an Oracle employee but he basically said you have to buy at least 1 copy of JDeveloper ($999) and you get a runtime license for ADF Faces as part of that. That sucks because Oracle's implementation looks like one of the most full-featured ones available. Why should I have to buy a tool I'll never use just to use ADF Faces?

After lunch, we attended Rod's "Advanced Spring Framework" and Craig's "JSF: Dead on Arrival or Raging Success". Rod's Spring presentation covered some advanced Spring features: autowiring, inner-beans, lists, instantiation choices, factory beans and template bean definitions. The presentation was good, and I was pleasantly surprised to find I knew most of the things he covered. Colin spoke about using JDK 5 annotations for transaction demarcation and Keith talked about Spring Web Flow. The Spring Web Flow stuff looks cool, especially since the other framework developers are listening and liking what they see. Craig even mentioned that he'll probably ditch what he's put together in Shale and use Spring Web Flow instead.

Craig's talk about JSF was rather boring, but most of these sessions are (mainly because there isn't a whole lot of new information). Craig did manage to pimp Java Studio Creator a bit. I find JSC demos to be quite funny since it hides so much code with code-folding. In the demo, Craig showed us a 10-line Java class that made JSF (and JSC) look like good stuff. Jim and I noticed code-folding was turned on and the class was actually 120 lines long! This is more of a problem with JSC then JSF IMO. The one nice thing about this talk was learning that a JSF 2.0 BOF is tonight. The main goal of the BOF is to see what the community wants in 2.0. I hope to attend and express a desire for HTML templates like Tapestry has.

Tonight kinda sucks because all the good BOFs (Spring, Tapestry and JSF 2.0) are at the same time (7:30). I'm hoping to hop around between them and get some good networking in. After the BOFs, OpenSymphony is hosting an open bar - so that should be a good time. Hopefully we can scare up a few free carbombs. For more blogs and coverage of the conference, see the TSSS 2005 blogger list.

Posted in Java at Mar 04 2005, 05:33:59 PM MST Add a Comment

Fun with jWebUnit and Canoo WebTest

For the past few days, I've been messing around with jWebUnit and Canoo WebTest at my "day job". I say messing around because I've mainly been trying to overcome perceived bugs with both projects. I'm used to using Ant and both of these libraries "just work".

The problem I had with jWebUnit is that the setOption(selectName, optionLabel) didn't work for me. This turned out to be some sort of conflict with SiteMesh, and when I commented out the SiteMesh <filter-mapping>, everything worked as expected. This is quite strange since I use SiteMesh+jWebUnit with Equinox. I tried to reproduce the problem with Equinox by adding a <select> with <option> elements, but it all worked fine there. I'd blame it on Maven, but I was running my tests from IDEA. As a workaround, I subclassed SiteMesh's PageFilter and stopped processing when the user-agent.startsWith("httpunit"). This is very similar to the JCIFS and jWebUnit workaround we're using.

Before I figured out the jWebUnit/SiteMesh issue, I decided to try my favorite UI testing tool: WebTest. Since we're using Maven, I figured the Maven Canoo Webtest Plugin would be the way to go. This took me about a day to get working (so much for the ol' 10 minute test). Most of the problems where related to the fact that setting the properties didn't seem to have any effect. I ended up writing my web-tests.xml much like I would with Ant - with taskdefs and importing project.properties for the properties to take effect. Last night, after I couldn't get webtest to click a button, I decided to try the same XML file with Ant. I dropped it into AppFuse, changed a few settings and voila! - it all worked! "WTF?" I thought to myself. Turns out the Maven Plugin is from October 2004 and is based on build 543. I ended up rebuilding the plugin to build 733 and then everything worked fine. Here's the patch.

Now that I got them both working, I'm leaning towards using jWebUnit because I can use Java to get the last inserted id (for fullying CRUDing an object). With Canoo, I'd have to use our query interface, add a feature to sort by id (or somehow get the last record added), then click on it to edit the new record. To make matters worse, the API we're talking to right now let's us add records, but we can't fetch them back - no matter what we query by. We've tried both the web services interface and the EJB one with the same results.

Ahhh, the life of an enterprise developer - trying to make 3 systems talk to each other and all of them have broken (or non-existent APIs). For one system, we're actually going through their web interface with httpclient to do CRUD on records!

Posted in Java at Mar 01 2005, 05:09:59 PM MST 5 Comments

Hibernate vs. iBATIS

There's an interesting thread taking place on the iBATIS User Mailing List. The basic jist of the responses are: Hibernate works well when you control the data model, iBATIS works well when you need to integrate with an existing database. I've said this for a couple years now, and I still believe it. Furthermore, I've found that when working with iBATIS, I tend to know what's going on a lot more. After all, it's just SQL. From all the questions on the AppFuse mailing list, it seems like a lot of Hibernate users are constantly trying to get Hibernate to "work its magic" and handle all their relationships for them.

I wonder if newbies would be better of using iBATIS? Using iBATIS, there isn't a whole lot of magic, and you get full control over the SQL - which would likely be easier to understand. Maybe I should create a "newbie" version of AppFuse - where the frameworks uses are the easiest to learn or most documented. It'd probably be Struts+Spring+iBATIS, or maybe just Spring+iBATIS so I could sell more copies of Spring Live. ;-)

Posted in Java at Feb 28 2005, 07:10:25 AM MST 38 Comments

Rails is 8 times slower than Spring+Hibernate

Might as well start off this week by getting people's blood boiling. ;-) According to a comment on Dion's blog:

Having done extensive performance (scalability means different things to different people) testing on both Rails and a comparable Spring/Hibernate/JSP2 webapp (no one seems have have done any sort of benchmarking on Rails, or they simply don't care, I don't really know, but since benchmarking is what I do... :-)) I can say that Apache2/FastCGI/Rails is about... 8x slower than the comparable Tomcat/Spring/Hibernate/JSP2 solution. And that is with caching turned on in Rails (using Rails 0.9.5...)

Quite frankly, 62 req/s on a Dual Opteron with 4GB of RAM rendering a simple view with no DB access is too... damn slow.

Personally, I still think Rails looks like a great (and easy) way to develop webapps. I just wonder if there's some truth to the "can't scale" argument. I guess the best way to find out is for me to develop an application like AppFuse with Rails, and then hammer it (and AppFuse) with JMeter to see what kind of results I get.

On a sidenote, I wonder when Rails will hit the illustrious version 1.0? They released 0.1 last week - which is a bad version number for marketing. If it's as mature as folks claim, why not make the next release 1.0? That version number alone will likely allow developers to use it more in big companies.

Posted in Java at Feb 28 2005, 06:25:27 AM MST 15 Comments

Is Shale ready for primetime?

Is Shale ready for prime-time and use in production applications? David Geary seems to think so:

My consulting job is pretty exciting. I'm using Shale heavily now, especially for wizards. Our application has both static wizards, for creating a new account, for example, and dynamic wizards that are generated from a description of an online-document.

Not only that, but he's going to be talking about it on the No Fluff Just Stuff tour this year.

To start the year, I'm doing three new presentations: "Shale: the next Struts", "Felix: a bag of tricks for JSF", and "Design Patterns: Tales from the server-side". Later on, I'll add two more presentations: in the near term, Killer Web UIs with Tiles and SiteMesh and a little later, a session on Laszlo.

I'm a huge believer in Shale. I have no doubt it's destined for great things, so I'm super-excited about the Shale session.

Now that I've talked about this, I'll probably be accused of caring more about Struts than the other web frameworks I use. In reality, I prefer most of the other frameworks in AppFuse and Equinox to Struts. However, at my current gig we're afraid to move from Struts because we're the only development group that hasn't fallen victim to the Big Blue umbrella. They've tried to make us use WebSphere, but we fought that off and continue to use JBoss. The fear is that if we don't use Struts, and use some lesser-known framework, they'll use that against us. That's why I like Shale - because it might be a way for me to use a more WebWork/JSF-type framework.

Posted in Java at Feb 15 2005, 07:52:33 AM MST 8 Comments

Ruby on Rails vs. Struts

Brian McCallister has put together a nice tutorial titled "Rails for Struts-ters (Part 1)". In it, he compares a Struts Action to a Rails ActionController (I think that's the right link).

After looking at the various introductory tutorials for RubyOnRails, a lot of people seem to come away thinking it is a simple CRUD framework -- mostly because of Scaffolding. A common theme seems to be, "well, it looks fast for slapping together a prototype, but when you need control, you it ain't there." I can see why people think that way, after watching the 10-minute video, and the reading the ONLamp tutorial. So here is a stab at a guided tour, using Struts as a point of reference.

Good stuff Brian - can't wait for the next tutorial.

Posted in Java at Feb 15 2005, 07:44:54 AM MST Add a Comment