Matt RaibleMatt Raible is a Java Champion and Developer Advocate at Okta.

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.


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.

CSS Framework Design Contest Update

Entries for the CSS Framework Design Contest are continuing to roll in. However, I don't know if the contest will finish at the end of this month. We've only received 5 submissions so far (1 being my own) and I'd like to get at least 10 good ones for folks to choose from.

My first attempt to show off the entries didn't do any justice to the submitted themes, so I've created a new showcase application. The new CSS Framework Themes application is available at It allows you to view the current submissions in the raw form that they were submitted. I've come to realize that a good design is tought to make flexible (where you can use all 6 layouts), so it's probably best to just have a single layout for each. Then again, juisefuse allows you to use all the layouts, so I guess it's up to each designer.

When I first started this contest, I envisioned people using the CSS Framework as a base, and overriding classes and styles in their own stylesheets. However, most of the entries contain modifications to the core CSS files - so it's probably best to allow free-form modifications of the CSS. Last night, I created my own entry based on Andreas Viklund's andreas01 theme. I did this to see what pain points there are in creating these themes. Although the experience wasn't too bad, I did find myself having to make one exception and break the "don't modify the HTML" rule. I had to move the top image out of the header div in order to get things positioned correctly. Oh well. I hope to convert some more of Andreas's themes this week. I also hope to incorporate some of the CSS from Wufoo's forms into these designs. After that, I'll start trying to figure out how these can fit into AppFuse and maintain their look and feel.

What's my pipe dream for I'd like to make it possible for users to download and use these themes quickly and easily. Furthermore, it'd be pretty cool to develop an XSLT transformer that converts the main HTML page from each theme into decorators for AppFuse, Drupal and Roller. I don't know if this will be possible, but it certainly sounds cool.

Update: I added a new Deliciously Blue theme, which includes a form example based on CSS from

Update 2: I've converted three more of Andreas's themes: andreas03, andreas08 and andreas09. They're not pixel perfect, but they're pretty darn close. ;-) All of the themes in this contest (including the "showcase" application itself) are available in Subversion from the AppFuse CSS Project on

Posted in The Web at Apr 19 2006, 05:04:44 PM MDT 1 Comment

How do you determine a good MaxPermSize?

I know I'll probably get beat up for not knowing my JVM Turning parameters. I admit that I should know them better than I do. Hopefully this post will help us all understand them a bit better.

Ever since I upgraded to AppFuse 1.9.1, it's been experiencing OOM issues. They've been so bad that the site is lucky if it stays up for more than an hour. I've done a fair amount of performance testing on a single AppFuse application (and gotten very good numbers), so I was pretty puzzled by the whole situation.

To reproduce the problem, I downloaded all 5 demos to my machine and began profiling with JProfiler. Nothing stood out, but I was able to reproduce the problem by clicking through all the different applications. While testing, I had my JAVA_OPTS set to -Xms256M -Xmx384M.

After staring at JProfiler for hours, I gave up and sent my findings to the AppFuse mailing list. After going back and forth with several ideas, Sanjiv came up with the winner.

Did you try increasing the max perm size (-XX:MaxPermSize=256m)? Max Perm size is running out of memory and not necessarily the main memory. Class metadata stuff is placed in the perm memory (google for more details) and since we're using Spring, Hibernate and Tapestry which all use a lot of reflection, proxying etc, it's not surprising that max perm size is running out of memory.

Based on his advice, I added -XX:MaxPermSize=256m to my JAVA_OPTS, fired up JProfiler/Tomcat and began hammering my local instance with WAPT. 15 minutes later, with 20 simultaneous users, the heap and memory were humming along nicely with no issues. I made the change on and it's been up every since.

This experience has motivated me to start adding "-XX:MaxPermSize=256m" to all my JAVA_OPTS. Is this a good idea? If so, is 256m a good value to use? If not, what's the best way to determine (or guess) the proper value for this setting?

Posted in Java at Apr 19 2006, 09:54:14 AM MDT 21 Comments