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.

10 minutes into Tapestry

As I'm trying to figure out the JARs required by Tapestry, I find that commons-upload.jar is required by default.

2004-07-21 17:12:47 StandardWrapperValve[tapestry]: Servlet.service() for servlet tapestry threw exception
java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException
	at org.apache.tapestry.request.RequestContext.(RequestContext.java:153)

Huh?! That's wierd - I'm not doing any file uploading... (I know, this type of message belongs on the mailing list - I just thought it was funny ;-))

Posted in Java at Jul 21 2004, 05:15:47 PM MDT 2 Comments

My WebWork Experience

Yesterday I began converting a small application from Spring MVC to WebWork. By the end of the day I was pretty much finished, but shot an e-mail off the the user's list to figure out a few more things. Today was spent incorporating that knowledge and making the app follow more WW "best-practices". Below is a list of things I discovered:

  • WebWork's documentation is actually quite good. I was able to figure out most things just by reading it. I'm still surprised that most web app frameworks don't describe a simple CRUD operation as their first example. In my experience, CRUD is 80% of a webapp's job.
  • WebWork integrates with Spring quite nicely. It's interesting to see that Spring has most of its MVC Framework support as part of the core, but WW has its own. I wonder why? Who cares, it works!
  • WebWork is a bit better than Spring MVC in that they have a mechanism for saving/displaying success messages. However, it doesn't live past a redirect, so you're still stuck putting messages in the session. Struts (as of 1.2.1) allows you to use a saveMessages(session, messages) call - and subsequent JSP tag to display (and automagically remove). Like it or not, Struts seems like the easiest solution for developers to use.
  • There's no clean mechanism for cancelling validation when a user clicks on a "cancel" or "delete" button. Struts supports cancelling using it's <html:cancel> button and it's pretty easy to detect "delete" and cancel validation in a form's validate() method. I ended up using an onclick handler for my cancel button and not worrying about validation on delete. This is the way I did it with Struts for years. Spring is cool in that it has a processFormSubmission() method that you can override before validation kicks in.
  • With Commons Validator, I'm used to specifying generic validation messages like "errors.required={0} is required.". This is possible with WW by using "errors.required=${getText(fieldName)} is required.". However, WW is a bit unique in that validation rules and ResourceBundles are defined on a per-action basis. I like having a central location for all my messages - like Spring and Struts have. I know it's possible with WW, but I'm trying to develop a "best-practices" sample app.
  • I really dig that fact that you can use one JSP tag to render an entire <tr> in a table. This <tr> ends up having a label and an input field - which is very cool IMO. I did find some issues with the XHTML output, but found it very easy to submit patches. Good stuff.
  • The config files (xwork.xml and validators.xml) must be in WEB-INF/classes. This is because they're XWork configuration files, and XWork is a non-web framework. It would be nice if I could put these in WEB-INF - where the rest of my config files (Spring, SiteMesh, etc.) reside.
  • Many of the JSP tags require you to use "'literal value'" - where you put single and double quotes back-to-back. IMO, this is just ugly and I'd much rather put some sort of indicator that it's a dynamic value - i.e. ${...} or #.
  • I couldn't get client-side validation to work. Seems cool though.

My experience with WebWork has been quite pleasant. I received excellent support from the mailing list - even though it took me a while to subscribe. The mailing list archives are woefully out-of-date, but this is a general java.net problem - not a WW issue. Maybe they should create a forum until the mailing lists get back on track?

Hopefully this last day and a 1/2 will make it much easier to implement WebWork in AppFuse. Thanks for the support gents - now I'm off to learn Tapestry!

Posted in Java at Jul 21 2004, 03:41:58 PM MDT 8 Comments

What a great weekend!

This past weekend was a blast. My entire family (Mom, Dad and Sister) flew in on Thursday night for my 30th on Friday. In reality, they were here to see Abbie more than me, but I can accept that - she's a lot of fun. Friday night Julie arranged a "White Trash BBQ". My sister, dad and I had a good time getting ready for it with a quick trip to "Value Village". Lots of folks showed up that night and everyone had a good time - especially the 5 kids running around like chickens with their heads cut off.

Saturday we went and saw I, Robot at a theater downtown. The theater was frickin huge - wider than any I'd ever seen. Even wider than an IMAX. Good flick, wicked theater. That night we went and saw the Rockies play the SF Giants. Rockies lost, but Abbie loves baseball games and we had club-level seats, so we couldn't complain.

Yesterday we went up to Idaho Springs and did a white-water raft trip. It started raining before we even got on the water, which made it even better. It was my Dad, Mom, Kalin (sister) and I + 2 other folks and the guide. Right before the first class 4, we slammed into a rock and it knocked Kalin out of the boat. She swam downstream and got into another boat. Shortly after that, we hit our first class 4 and didn't have enough weight on the high side. You guessed it - the boat flipped. Nobody got hurt and it made our trip all the better. We've all been on several rafting trips, but it was the first time we'd flipped. Good memories, good times, great family - I wish they lived closer. Thanks y'all!

Posted in General at Jul 19 2004, 09:25:59 PM MDT 2 Comments

30 years ago...

Almost 30 years ago, I was born at the cabin in Condon, Montana. I was delivered by my Dad, with his hunting knife. There were no doctors around, only my Mom and Dad - and my grandma was sleeping in the Sauna with my sister. The only complication was my umbilical cord wrapped around my neck and my head was blue. My dad's hunting knife made quick work of that. July 16th - one of my favorite days of the year.

Funny, I just went back to look at what I had to say last year. Pretty much the same thing. Oh well, I guess I haven't changed much in the last year. ;-)

Posted in General at Jul 15 2004, 10:55:46 PM MDT 14 Comments

Want to learn more about AppFuse?

AppFuse Home A couple of weeks ago, I wrote an article on AppFuse for java.net. I'm proud to say it was published today: AppFuse: Start Your J2EE Web Apps. This is my first "published" article - so it's pretty cool to see it up there.

One thing that's strange is the TOC links on the top right don't seem to work in any browser other than IE. Wierd. Now I just hope this site stays up since there's a lot of links that point here. It's a sort of weblog timeline about the birth of AppFuse - hope you enjoy!

Posted in Java at Jul 15 2004, 07:17:59 AM MDT 6 Comments

DJUG: JavaServer Faces and Java Studio Creator

Tonight's DJUG meeting looks to be another dandy one. Bill Dudney is doing a talk on JavaServer Faces and Java Studio Creator.

This talk will take you through the basics of building a JavaServer Faces application. You will understand how to build a basic JSF application. We will build an application manually and then build it again with Java Studio Creator. If time permits, we'll compare the two implementations to identify when and how to use JSCreator effectively.

I'm mainly looking forward to it because I know Bill uses a PowerBook and Creator sucks on the Mac - even though Bill doesn't think so. Should be fun heckling him from the crowd. :-D Of course, I'm also looking forward to learning more about JSF since I'll be using it next week.

Posted in Java at Jul 14 2004, 09:39:30 AM MDT 4 Comments

Failed Emissions

I haven't driven the bus much ever since I brought it back from San Diego. This is mostly due to the fact that it has Oregon plates (BUS BOY) and they expired last July. Today, I made an attempt to get Colorado plates. Unfortunately, the ol' bus ("Dadda's Bach" is what Abbie calls it) failed the emissions test. I've got 10 days to get it fixed if I want to avoid paying $15 for another test. I'm considering just letting it sit in the driveway until I start restoring it (sometime this fall). VWs are typically summer rigs because their heaters suck in the Winter. Driving around Denver in 100 degrees today makes me question the logic of driving it in the summer. Maybe I can retro-fit a modern-day air conditioner in into it.

Update: I called up the the local bug shop and they told me to come on down. They fixed 'er right up and I passed. It cost me a mere 12-pack - my kinda joint.

Posted in General at Jul 13 2004, 01:21:37 PM MDT 3 Comments

[ANN] Maven 1.0 Released!

Can you believe it?! Maven 1.0 is (finally) released: Download or read the Release Notes. Normally, I probably wouldn't care so much, but I've been engrossed in Maven for the past couple of weeks. My favorite features are the ability to type "maven eclipse" or "maven idea" to generate Eclipse/IDEA project files. Wow - 4 announcement posts in a row - that's a personal record! :-)

Posted in Java at Jul 13 2004, 08:39:39 AM MDT 1 Comment

[ANN] Struts 1.2.1 Beta Released

Read the Release Notes or Download. AppFuse has been running a nightly build of Struts from December 2003 - so most of the upgrading has already been done. I haven't upgraded to a recent version because of this functionality change. It probably still exists, but it's about time I upgraded. All tests pass in AppFuse - although I did have to change the core taglib URIs from http://jakarta.apache.org/struts/* to http://struts.apache.org/*. The EL Tag URIs still use http://jakarta.apache.org/struts. Unfortunately, it looks like XDoclet may need to be modified to support the new DTD. Tip o' the hat to Nick.

Posted in Java at Jul 11 2004, 10:29:38 PM MDT 2 Comments

[ANN] Display Tag 1.0 RC1 Released

Read the Release Notes or Download. This release is consists of mainly bug fixes and cleanup. Thanks to Fabrizio Giustina for all his work on this project. Fabrizio did the initial refactoring of this tag (to be an iterator + XHTML) and he also does almost all the work on it. This release has been tested and verified with AppFuse.

Posted in Java at Jul 11 2004, 08:15:29 PM MDT Add a Comment