Matt RaibleMatt Raible is a Web Developer and Java Champion. 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.

Good Parties at JavaOne

Are you going to JavaOne in a few weeks? If you are, you'll want to know all about the good parties. So far, I've heard the SolarMetric/Tangosol Party is Tuesday night, but don't know if it's been renamed to the BEA/Tangosol Party. I've heard same time, same place.

On Wednesday night, there's a GlassFish BOF at 5:00, a Struts BOF at 5:30 (in the pavilions) and our Geronimo Live Party from 6-9. You'll need to pre-register to get into the Geronimo Party. Luckily, you can easily do that by clicking on the image below.

Geronimo Live

The party is at the swanky W Hotel, which is right across the street from Moscone. It's sponsored by the following Geronimo Supporters:

Geronimo Live Sponsors

Any other good parties you know of at JavaOne?

Posted in Java at Apr 25 2006, 05:36:54 PM MDT 10 Comments

Gig in Seattle

I don't normally post gigs on this site, but I do when they're good rates, and the person hiring is a friend of mine. Here's one in the Pacific Northwest (Seattle):

  • 5+ years of experience with Java and J2EE required including EJB, JMS, and JSP/Servlet, required.
  • 3+ years of experience with UML, SOAP, XML/XSL, SQL, Struts.
  • 1+ years experience working with external client on projects.
  • Experience applying design patterns and OO best practices required.
  • Experiencing writing use cases and producing design documentation required.
  • Experience developing on Unix platforms required, preferably RedHat Linux.
  • Required application experience: BEA Weblogic, Tomcat, Apache.
  • Desirable application experience: Maven, Struts, Spring, MySQL, Oracle.
  • Desirable methodology experience: Refactoring, Agile, Scrum.
  • Desirable additional skills: WML, WAP, XHTML, XSL, XML Schema, SSL, HTTP, Perl.

Let me know if you're interested and I'll forward you the full job description and contact person's information.

Posted in Java at Apr 25 2006, 03:21:07 PM MDT Add a Comment

Shale Remoting Library

Ed Burns on JSF AJAX Components:

These components leverage the Dojo Toolkit and make use of the JSF PhaseListener approach for serving up JavaScript files and handling AJAX requests on the JSF server. This approach was innovated by the Blueprints and JSF teams and generalized in the Shale Remoting library, which these components leverage to great effect.

Click on the Shale Remoting link to see the good stuff. ;-)

Posted in Java at Apr 20 2006, 10:29:37 PM MDT 2 Comments

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 appfuse.org 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 appfuse.org 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

The T2000 Arrives

I received my T2000 server from Sun yesterday, and now it sits in its original packaging in my basement. I may not even unwrap and install it. When I originally ordered the server, I heard you could blog about it and possibly win a free one. Since then I've heard different; there's a contest with many entering, and they're only giving away a couple of them. Because of this, I've somewhat lost my motivation to install the sucker. Partly because I know I'll have to send it back, and partly because it doesn't look that fast. Regardless, it's nice to have Jeff's setup instructions if I do decide to assemble/install it.

Right now, my schedule is packed full of client work - all the way until mid-June. So if I'm going to build this bad boy, it'll have to be as part of my "late night" schedule. Right now, that's booked with Spring Live, designs for the CSS Framework and AppFuse/Equinox development.

To further justify my lack of motivation, I don't think the T2000 will solve my OOM issues with CruiseControl and Ant. I've been talking with one of the Ant developers, and it appears to be caused by the <copy> task in Ant. With any luck, I'll find some time to setup CruiseControl and do some performance testing of web frameworks before the T2000 goes back in mid-June, but it doesn't look good right now.

Posted in Java at Apr 18 2006, 09:27:01 PM MDT 8 Comments

[ANN] AppFuse 1.9.1 Released

This release includes improvements and upgrades to Tapestry 4.0.1, WebWork 2.2.2, as well as support for using AppGen to reverse engineer database tables (using Middlegen). iBATIS is now supported by AppGen and a Create DAO tutorial has been put together for iBATIS. iBATIS and Middlegen support were provided by Bobby Diaz - thanks Bobby! Also, a big thanks goes to Mika Göckel for writing an XFire Tutorial and installer. To install and configure AppFuse for development, see the QuickStart Guide. Thanks to all the sponsors who have contributed products and free hosting to the AppFuse project.

To see how AppFuse works, please see the following demos (username: mraible, password: tomcat):

Comments and issues can be sent to the mailing list or posted to JIRA.

Posted in Java at Apr 07 2006, 02:26:57 AM MDT 14 Comments

What happened to Middlegen?

In AppGen (AppFuse's code generator), I recently integrated support for generating CRUD code (and tests!) from database tables thanks to APF-95 from Bobby Diaz. Previously, it was only possible to generate code from POJOs, but now both are supported. The "mapping files from tables" is done using Middlegen.

Unfortunately, Middlegen seems to be a dead project, especially since its main web site is missing (fixed!). I'd love to use another project that generates XDoclet tags in hbm.xml files, but I don't believe there is one. AFAIK, the Hibernate Tools project does not support XDoclet with its tools. Anyone know where the Middlegen documentation is located? All the documentation used to be on their site.

The good news is the solution I have works, and it works well. However, I definitely look forward to re-writing AppGen. XDoclet as a templating language sucks, and reading XDoclet tags to determine how to generate the UI seems pretty hackish. Hopefully we can use APT and FreeMarker (or Velocity) to process annotations and spit out code in a future release.

Update: The Middlegen website was lost, due some heavy server upgrades. The problem has been fixed and it's back up and running. Now I don't feel so bad about using Middlegen since the project appears to be alive and well. ;-)

Posted in Java at Apr 06 2006, 05:19:15 PM MDT 13 Comments

gotAPI.com - an API Lookup Service

A friend just IM'ed me a link to gotAPI.com. This is a very cool site that allows you to lookup API information on practically everything I use: HTML, CSS, Java, Spring, Ant. Definitely a good bookmark to have.

Posted in Java at Apr 06 2006, 03:17:25 PM MDT 5 Comments

Busy Weekend

I was planning on taking this weekend off to let my left arm heal a bit. Furthermore, Julie and Holly headed up to Steamboat for some skiing and it was "Daddy Weekend". While the kids and I had a lot of fun, I was unable to overcome my addiction to work.

Saturday night I finally managed to get AppFuse running under CruiseControl. Previously, I'd always run into OOM exceptions before the 10-12 minute process of testing a particular flavor. This seems to be due to Ant and the copying of 700 files 3-4 times makes it run out of memory. For each web framework, the basic install is tested, then tested again with AppGen, and finally iBATIS is installed and tested. While the tests all run and report pass/failed correctly, the memory is so close to being maxed that e-mail cannot be sent, and half the time the webapp isn't viewable. Nevertheless, the process keeps on humming. To see the build status for each different AppFuse flavor, see http://home.raibledesigns.com:8080. Having you all click on this link should crash CruiseControl for sure. ;-)

Last night, I got caught up with working on the appfuse.org website. Rather than having a splash page, I changed it to use frames to wrap the java.net homepage, as well as other AppFuse sites. The top navigation should allow you to navigate to java.net, the wiki, demos and JIRA w/o having to type in new URLs. The fun part of this exercise was using CSS to hide images and compress the standard java.net header. If you'd like to do this for your java.net project, add the following to your www/project_tools.html page:

<style type="text/css">
    .topline, .topbar { border: 0 }
    #banner { height: 0px }
    #banner img { display: none; }
</style>

This week should be a pretty good one. I'm working full-time on finishing up AppFuse 1.9.1, and I hope to have it released before this weekend. My parents are coming into town on Thursday night, so that's my deadline. If I don't have everything done by then, I'll probably release anyway. For the full plan of attack for 1.9.1, please see The road to 1.9.1.

If I can finish the AppFuse release this week, I can work on Spring Live next week. After that, I'm booked up with client work for quite some time. So wish me luck, I'll be burning the midnight oil most of this week.

Finally, it was nice to see that many of you bought into my April Fools joke. While it wasn't as good as last year, I still had fun writing it. As some noted, it's not that unbelievable. However, the part about me dropping something for another is out of character. I changed my major 3 times in college, but never dropped the previous ones. For the record, I like Rails and I've been promoting it at Virtuas and SourceBeat. We've talked about starting a Rails practice, but (to be honest) haven't seen a whole lot of demand from clients. Hopefully that will change in the future and virtuas.com/rails will get filled in.

Posted in Java at Apr 03 2006, 04:09:19 PM MDT 1 Comment

Done with AppFuse, moving to Ruby on Rails

Ruby on Rails For the last few weeks, I've been building an application with Ruby on Rails. While I enjoy its simplicity and the ability to get things done quickly, the thing I really like is there's a whole team of developers supporting this framework. If I develop an application with AppFuse, chances are I'll find a bug or two, and then I'll have to spend additional time that night fixing it. Furthermore, I'm beginning to loath the compile/deploy cycle that AppFuse requires you to do.

As a result of my experience with Rails, and my decision to use it for all future web development, it makes no sense for me to keep maintaining AppFuse. Virtuas has decided to start a Rails Practice and I'm going to be the Practice Leader for it. In addition, I'll be writing a "Rails Live" book for SourceBeat. Hopefully we'll have an ERP out for that by the end of this summer.

If you live near Denver, have a lot of experience with Spring, and are interested in becoming the Spring Practice Leader for Virtuas, please let me know.

Posted in Java at Apr 01 2006, 09:56:12 AM MST 14 Comments