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.

Mapping buttons to methods

In AppFuse, I use Struts' LookupDispatchAction to map submit buttons to methods in my Actions. It's caused quite a headache for i18n, but Jaap provided a workaround and now everything works fine. However, as I did the Spring MVC implementation this weekend, I didn't have to do any complicated "button value -> method name" mapping. Part of it was because I didn't need to, but also because I discovered that you can easily just check if the button's name was passed in. Explaining this with code is probably easier. Let's say you have three buttons on a page:

The HTML code for the above buttons is:

<input type="submit" name="save" value="Save" />
<input type="submit" name="delete" value="Delete" />
<input type="submit" name="cancel" value="Cancel" />

Using the name as your key, you can easily check in your Action/Controller/etc. to see which button was clicked:

if (request.getParameter("save") != null) { 
    // do something
}

The nice thing about this is that it doesn't care what value you put on your button - just what you name it. It seems like all frameworks should use something like this, rather than a single parameter name (i.e. "method") that requires JavaScript on a button to change the method invoked. About a month ago, Rick Hightower mentioned that he uses a ButtonNameDispatcher for Struts. Rick, if you're reading this - I'm ready for that bad boy!

Posted in Java at May 03 2004, 09:27:52 AM MDT 12 Comments

Converting AppFuse to use Spring for MVC

It's been a long and painful week - with 3 or 4 nights where I was up to 4 or 5 in the morning. Last night I was up until 4:30 and Abbie woke me up promptly at 7:30. Ugh, sleeping more is probably a good idea. I started on the Spring MVC layer for AppFuse on Thursday night and it took me almost 2 days to convert everything. There's still a few kinks and workarounds - but if you're running it through a browser, everything works the same as it did with the Struts version. The hardest part about it was writing the unit tests. With Struts, it's rather easy b/c I use StrutsTestCase, which provides a very simple API for testing Actions. I'm sure Spring will soon have this same capability with its Servlet API Mocks, but I was definitely banging my head against the wall a few times. I did manage to convert the LabelTag to recognize required fields and error messages. The JSP conversion was a slight pain - but mostly because you have to type a lot more for input fields than you do for Struts. I'm looking forward to WebWork which requires one line to do the whole table row. It has Velocity templates for its tags and they write the <tr>, <label> and the <input>. Pretty slick IMO - less typing is always attractive to me.

I'd like to write-up a detailed entry on "migrating from Struts to Spring" on JRoller, but it's been flakey over there for a few days now - so I might just do it here. We'll see - the lack of sleep is draining my motivation to write. I hope to do the Ant-based installation for Spring in the next couple of days - then I'll release 1.5 beta. My main reason for the beta is because the Spring stuff can probably be cleaned up a lot, as well as it gives me time to write documentation before the final release.

Posted in Java at May 02 2004, 09:17:54 AM MDT 5 Comments

Populate your drop-downs with listeners and allow for refreshing

Most webapps have drop-downs (a.k.a. pick lists) that users select from when filling in forms. Spring has a nice referenceData method on its Controllers that you can use to populate these, but I prefer a different way. In AppFuse, I populate these using a ServletContextListener. However, one of the problems with using this is that your drop-downs won't get refreshed unless you have admins screens or a way to reload the attributes set in the listener.

In short, I think it's a good idea to load drop-down options in a listener and also have an action or servlet to refresh these options. For examples, see StartupListener.java and ReloadAction.java. Got a better way? I'm interested...

Posted in Java at Apr 29 2004, 04:50:55 PM MDT 4 Comments

Weather.com: WebSphere to Tomcat and Oracle to MySQL

At my current client we're going to migrate our application from Tomcat to WebSphere 5 in May. I'm dreading the move and really don't see the point, but alas - the client is always right. However, since my client reads this website, I thought maybe they'd be interested to see that Weather.com recently migrated from WebSphere to Tomcat.

"It was hard to run WebSphere and an IDE [integrated development environment] because of all the resources WebSphere took," recalls Jeff Cunningham, who leads the Internet application development team at Weather.com. "You had to run an instance of DB2 on your machine because WebSphere stored its configurations in DB2, so you had to have all that overhead. It was just really slow. I just started using Tomcat for development because it was so much faster."

The article goes on to say that they evaluated other app servers as well, but chose Tomcat because of the team's preference. They also discovered that Tomcat served up pages significantly faster than WebSphere.

Weather.com is also working on swapping out its Oracle database for the open-source MySQL.
...
"Now when I talk to senior management about moving from Oracle to MySQL they don't ask me, 'Are you sure?'" he says. "They ask me, 'When?'"

It's a great time to be an Open Source Consultant. ;-)

Posted in Java at Apr 29 2004, 11:05:57 AM MDT 16 Comments

[House Project] First Wall

Bob the Builder told us they'd have all the framing done this week. Now we're starting to believe him!

First Wall Pics

Posted in General at Apr 28 2004, 08:32:16 PM MDT Add a Comment

Why Hibernate Rocks - easy database switching

The app I've been developing over the last 6 months is going live next week. As part of that process, my client decided they wanted to put the production database on their AS400, rather than their JDE/WebSphere/DB2 Server. Hibernate and AppFuse made this super-easy. Add the JDBC Driver, specify a new dialect/jdbc url/driver name, and voila - we're talking to DB2400! After creating the initial tables using Ant we noticed that the table names were too long since the 400 has a limit of 10 characters. To fix this, I simply modified my XDoclet @hibernate.class table="..." to have shorter table names. After that, I simply had to re-arrange a few tables in my sample-data.xml file (for DBUnit) to avoid referential integrity issues. All-in-all, we migrated from MySQL to DB2 on an AS400 in a little under an hour this morning. Hibernate makes my development life soooo much easier.

Posted in Java at Apr 28 2004, 11:53:43 AM MDT 7 Comments

What should we do with Tiles?

There's some discussions taking place on the Struts Developer Mailing List about what to do with Tiles. Tiles is gaining popularity in frameworks other than Struts - i.e. Spring and JSF. Personally, I don't mind that Tiles is buried deep inside struts.jar b/c it's basically the difference between a 500 KB JAR and a 100 KB JAR - and disc space is cheap! However, an advantage of extracting Tiles from Struts is that it then has the opportunity to become friendlier to other web frameworks. I'd even like to see a Sitemesh-like Filter so you could do Sitemesh stuff with Tiles. Or maybe just bundle Sitemesh with Tiles as a kick-ass templating engine.

So the question is: What should we do with it? Should it become a Jakarta Commons project or a Jakarta Project? Or even a java.net project? Tiles Users - we need your feedback!

Posted in Java at Apr 28 2004, 11:35:00 AM MDT 16 Comments

Setting the heap size on your JVM

Cameron has posted a comment on my Performance Tuning MySQL article. The reason I'm highlighting this because it's something I wasn't are of:

From the article:

    -Xms128m -Xmx256m

The Sun JVM will run significantly faster with the following config instead:

    -Xms256m -Xmx256m

That's because the Sun implementation acquires and releases memory from / to the OS way too aggresively if the "ms != mx". Furthermore, either your server has the 256MB available or it doesn't. If you don't have it available, don't set the max that high. If you do have it available, you gain nothing from setting the min lower. This isn't a desktop system, it's a server -- make sure you have the necessary resources and if you do then use them!

Time to change all my heap size setting since I've been using the first setting (128/256) for quite some time. Thanks Cameron! The real question is: will changing "-Xms256m -Xmx512m" to "-Xms512m -Xmx512m" speed up my slow-ass PowerBook? ;-)

Posted in Java at Apr 28 2004, 09:16:00 AM MDT 7 Comments

Cherry Creek Trail

80 degrees in Denver today made it perfect for a nice ride up Cherry Creek Trail. If you've never done it, I highly recommend it. It's an easy but technical dirt trail right in the heart of Denver. Of course, there's also a paved trail along the same route - so you get the best of both worlds.

Cherry Creek Trail

Posted in General at Apr 27 2004, 09:52:17 PM MDT Add a Comment

[House Project] Foundation done, interior walls almost gone

This past week, they construction guys did a lot to get the floor on our new addition - as well as tear down the walls of the existing interior. Can you believe they discovered the walls had no insulation?! Bob told us yesterday that he expects them to have all the framing done by the end of this week. If he really means all the framing, I'll be pretty damn impressed. Below are some pics I snapped over the weekend - click on them to more.

Walls coming down

Posted in General at Apr 26 2004, 10:13:44 PM MDT 2 Comments