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 "play". 218 entries found.

You can also try this same search on Google.

AppFuse 2.0 Status Update

It's been far too long since the release of AppFuse 2.0 M5. When we released that version, I fully expected to finish up RC1 a week or two later, and follow that with 2.0 Final a week later. Fast forward a month and a half, and there's still 38 issues left for 2.0 RC1. What happened?

Life got in the way.

There's probably less than 40 hours left to complete 2.0. I could say that I haven't had the time, but you all know that's a lie. Everyone has time. When someone says "I don't have time to do X right now", this really means "that's not on my priority list and I'm not going to make time to do it". So unfortunately AppFuse hasn't been on my priority list. Finding a new gig, vacationing with my family and buying a new mountain bike were on my priority list.

So if there's only 40 hours worth of work left, why didn't I just work a couple hours a day on it? Primarily because when I work on AppFuse it possesses me. I tend to get caught up in it and it's tough for me to concentrate on other things, especially work that I'm supposed to be doing during the day. Since I've had two new clients in the past few weeks, I've been aware of this and purposely stayed away from working on it.

The good news is things should settle down soon. I have a couple weekends on the horizon that look to be free, so hopefully I can crank it out and finish it up in the next month or so. As far as the project itself, there's plenty of users happily using the 2.0 milestone releases and there's still lots of traffic on the mailing list. It's crazy to think that the planning for AppFuse 2.0 started over a year ago and development started one year ago next month. If I knew it'd take this long, would I still have done it? Absolutely. I've never heard so many positive comments from users.

In other AppFuse News, Contegix has graciously donated an entire managed server to the project. We have licenses for the Atlassian Suite (JIRA, Confluence, Bamboo and Crowd) and will be moving/installing everything over the next week or so.

Thanks Contegix!

As anyone that uses them knows, they're simply the best hosting company in existence today. Their customer support and response time is incredible.

Posted in Java at Jul 11 2007, 10:17:26 AM MDT 14 Comments

Webinar on Wednesday: Introduction to Apache Roller

If you're not doing anything this Wednesday, you might want to checkout my Introduction to Apache Roller Webinar. It's sponsored by Covalent and has the following agenda:

11:00: Introductions
11:05: What is Apache Roller 
11:10: Installing Roller
11:20: Roller Architecture
   - 11:25: Blog Customization
   - 11:35: Server Customization
11:40: Other Features: Using Weblog Clients and Planet
11:50: Q & A

Heck, even if you are doing something, you should still check it out - especially if you're planning on installing Roller for yourself or for your company. Here's the details and how to signup:

Cost:Free!
When:Wednesday, June 20, 2007
Time:11:00am PDT (2:00pm EDT)
Where:From the comfort of your home or office
Technical Level:Intermediate Technical Track

To register, click here and follow the provided steps.

About Covalent and Roller
Covalent recently announced it is offering full commercial support for Apache Roller, the open source blog server from the Apache Software Foundation (ASF). Apache Roller drives the Covalent blog, Sun Microsystem's blogs.sun.com blogging site, IBM DeveloperWorks blogs, the Javalobby's 10,000 user strong JRoller Java community site, and hundreds of other blogs world-wide. Roller is a Java Web application that is run on any Java EE server and any relational database.

<Sidenote/>
I think it's important to point out that JRoller and Roller are not the same thing. JRoller is a service provided by JavaLobby that provides free blogs, whereas Roller is the software that powers it. There's been a lot of negative press about JRoller in recent months and from talking to folks, it sounds like most of it is well-deserved. The service is down a fair amount and when it's up, it's extremely slow.

The good news is these problems should go away in the near future. From Matthew Schmidt in a recent JavaLobby Newsletter:

DZone Network Server Upgrades Coming
Over the weekend, Rick and I started the long and painful process of finally upgrading our three-year-old servers to some hardware that should let us scale and meet the needs of the network for the foreseeable future. With these new servers, comes some upgrades that many of you have been trying to beat into my head for months now, including an upgrade to a recent a version of Roller (powers JRoller) as I can find, and an upgrade to the latest and greatest Codebeamer (powers JavaForge). In addition, there's also going to be a much-needed make over to Javalobby and EclipseZone. Of course, these changes won't happen immediately and we'll be migrating to the new hardware first, but keep your eyes open for some nice updates to nearly all our communities. These upgrades have already started and we'd appreciate any feedback you have on whether things like Javalobby and EclipseZone are working properly. Drop me a line if you notice anything not working properly or feeling slow.

IMO, JavaLobby has been mostly mute about its stance on JRoller, and I've heard from folks there's virtually no support. My guess is this is because they've been concentrating on DZone so much. Maybe they need some volunteers to make JRoller more robust? Or maybe it should be moved to other servers that can make money off the service and re-invest it (like wordpress.com)? Hopefully nothing has to change and JRoller can become a higher priority for JavaLobby in the near future.

Update: The webinar went quite well - thanks to everyone who attended! You can download the PowerPoint (or PDF) and audio from Covalent's Webinars. Also, I mentioned a couple of Dave's presentations in my talk. You can download those by clicking on the links below:

Posted in Roller at Jun 18 2007, 04:13:28 PM MDT 4 Comments

OSCache vs. EhCache for Hibernate's 2nd Level Cache

Hibernate has a number of options for configuring its second level cache. For more information on configuring this, you might want to read John Ferguson Smart's article titled Speed Up Your Hibernate Applications with Second-Level Caching.

Up until today, I thought EhCache was the default cache provider, but apparently not anymore. From Hibernate's documentation:

Note that versions prior to 3.2 defaulted to use EhCache as the default cache provider; that is no longer the case as of 3.2.

So what's the default now? It can't be Hashtable since that's not for production use. I doubt it's OSCache since OSCache can't even get its patches into Hibernate. Looking through the release notes, I found out it's NoCacheProvider - seemingly because of an issue with EhCache:

Due to the upgrade to EhCache1.2 and its new non-singleton cache setup, we should no longer default the cache provider to be ehcache. Instead, default to NoCacheProvider.

That's reasonable I guess. EhCache added support for distributed caching in 1.2. It's a shame they didn't maintain backwards compatibility or they'd still be the default caching provider. Regardless, it doesn't matter who the default caching provider is because it's very easy to change it. Here's how it's configured on one of my projects:

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
    <property name="hibernateProperties">
        <value>
            hibernate.dialect=${hibernate.dialect}
            hibernate.query.substitutions=true 'Y', false 'N'
            hibernate.cache.use_second_level_cache=true
            hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
        </value>
    </property>
</bean>

Of course, you can also configure it directly in hibernate.cfg.xml or a hibernate.properties file.

This leads me to the reason for this post:

What is the best 2nd level (clustered) cache to use for Hibernate?
I'm sure some folks will say Coherence, so let's narrow the question to what's the best open source option?

I've used OSCache in the past. It worked well, but it was kind of annoying that I had to patch Hibernate to make it work. The Hibernate folks say it's OSCache's fault, the OSCache guys say it's Hibernate's fault - so this issue will likely never get resolved. So what about EhCache? I don't know, I've only used it in a single JVM environment and haven't tried it in a clustered environment. Is there anyone using Hibernate + EhCache in production that can verify its effectiveness?

Of the options listed in Hibernate's documentation, the only other options seem to be JBoss TreeCache and SwarmCache. You can quickly eliminate SwarmCache since it never made it past 1.0 RC2 in October of 2003.

That leaves JBoss TreeCache, EhCache and OSCache as choices for a clusterable 2nd-level cache. OSCache is an invalidating cache, which definitely works - but might not work as you expect it to. JBoss Cache only seems to allow a replicated cache which also works. EhCache seems to support both. I don't know if invalidating or replicating is better, but I imagine replicating can get quite chatty if you're dealing with large amounts of data.

But wait - is there another open source option? According to Terracotta's CTO, Terracotta is much faster than JBoss Cache. However, if you read about it on DZone, you'll see that JBoss Cache has no "official" benchmarks.

So what's a developer to do? My current client likes OSCache, but I'm leaning towards EhCache. Which would you recommend?

Of course, if Coherence is only $1K per CPU, maybe that's the obvious choice? Unfortunately, I couldn't find their pricing using Google.

Posted in Java at Apr 17 2007, 01:59:27 PM MDT 14 Comments

Taking the week off

I consider Kathy Sierra (and her husband Bert Bates) good friends of mine. I've seen them quite a few times over the years at various conferences. They're some of the nicest people I've ever met and I always enjoy our conversations.

The recent death threats she's received is sick and wrong. I don't know what to say, except that I hope they find the morons that are doing this and prosecute them appropriately.

I like Scoble's idea and will be taking the week off as well. Too bad, it looks like there won't be an April Fools entry this year.

Posted in General at Mar 26 2007, 09:26:38 PM MDT 5 Comments

Airport Extreme

Airport Extreme Even though I managed to get my home network speedy again after my bandwidth speed issues, I bought a new Airport Extreme last week. My main reason for buying it was its USB device sharing feature. I have a Suse 10 box that runs Samba, DHCP, DNS right now, but for some reason, my MacBook Pro doesn't work for printing to CUPS over Samba. In my experience, printing is one of the major issues with Macs - it just never seems to work when you want to print over a network. I have gotten it to work in the past, but it's often been a wretched weekend's adventures where I end up sacrificing a goat to the CUPS gods to get everything working.

So by buying an Airport Extreme, I figured I'd have an Apple product at the center of my network and all my problems would be solved. I was wrong.

First of all, why can't there be a web interface on this sucker? Why does it require that I have a client installed to configure it? With most routers I've worked with in the past (NetGear and Linksys), the web interface might've been clunky, but it didn't require I install a CD. I initially tried installing the software on Windows XP, but for some reason it wasn't able to communicate. So I installed it on my Mac and was able to configure everything. While the setup process worked, and I was able to access the internet afterwards, this device doesn't seem to work well with my network. After plugging my printer in (an HP OfficeJet G85), I was able to add it on both XP and OS X using Bonjour. However, no matter what I sent to the printer, it'd never print. Further gripes: it might have an integrated firewall, but there doesn't seem to be a way to configure it. I couldn't find any way to do port forwarding. This stuff is so simple to do on my Netgear router.

At this point, it seems logical to return my Airport Extreme as it simply doesn't work as expected. Of course, my frustration could be from my lack of knowledge, but that's the point - I shouldn't have to read the documentation or contact Apple Support - it should all just work.

Posted in Mac OS X at Feb 28 2007, 09:23:29 AM MST 35 Comments

AppFuse Book!

David Whitehurst (an AppFuse committer) has taken on the task of writing a book on AppFuse 2.0. I don't envy him, but it looks like he's got a lot of good ideas.

When I started looking at AppFuse version 2.0 source and how it's going to use Maven, I got excited. I got so excited I'm writing a book about it and SourceBeat is going to publish it. I talked with Matt Raible, got his blessing, and sent SourceBeat the proposal. They liked it!

Well, I guess the news is out. We're doing the "AppFuse Primer" and it's scheduled for release August 2007.

Now, it's time for you guys to flood me with comments so that you can turn my outline upside down and get all the things that you want to learn about in the book. C'mon, I know you want it. I do and I decided that I would write down everything I've been learning about it. Everyone is going to be quite pleased with AppFuse version 2.0. And, I hope that this book will compliment its release with a publication this summer after everyone has had a chance to play with it some on their own.

Here's a rough table of contents.

  • Chapter 1 - Introducing AppFuse
  • Chapter 2 - An AppFuse Quickstart
  • Chapter 3 - Developing with Maven
  • Chapter 4 - Using the Spring Framework
  • Chapter 5 - Persistence with Hibernate
  • Chapter 6 - The Service Framework
  • Chapter 7 - The Web Tier
  • Chapter 8 - AppFuse Security
  • Chapter 9 - Production Deployment, Migration, and Maintenance

If you'd like to help David shape AppFuse Primer, please post a comment on his blog.

Posted in Java at Feb 05 2007, 10:30:25 PM MST 11 Comments

2006 - A Year in Review

Looking back at 2006, it's amazing to see everything that happened. One of the main reasons I started this blog was to provide a history of my life. Now it's time to cash in on that cool feature and look back at the last 12 months.

Beach by Villas Nizuc In early January, I finished working on the Vongo project. I eventually had to shut off comments for my post on Vongo because there were so many complaints. The good news is I didn't work on the UI or service part of it, just the Spring/Hibernate/XFire backend. A week later, Apple announced the MacBook Pro and I purchased one immediately. I still have the same machine and couldn't be happier. A week after that, I quietly released AppFuse 1.9, went to the Broncos vs. Patriots game, then left the next morning for Cancun to celebrate my dad's 60th. I got to watch the Broncos season end after returning from Cancun. January 2006 is one for the books - I scored good tickets to two playoff games and spent a week in Cancun! I'd relive that month without hesitation.

The Ride to Work In February, I began playing with Maven 2 , figured out how to use Tiles with WebWork and did a fundraiser for the CSS Framework design contest. I even posted some pictures of my ride to work. Prior to freezing my ass off, Jack had a rough week with Rotavirus and ended up in the Emergency Room.

At the end of February, I received my MacBook Pro and fell in love with everything but the wireless. My posts on the MacBook Pro and wireless issues still get comments weekly from other folks having similar problems.

On February 22nd, Daniel Steinberg's daughter Elena died of bacterial meningitis. Julie made me stop reading Daniel's Dear Elena blog because I was such an emotional wreck. I saw Daniel at a couple of conferences this year, but didn't talk to him until The Spring Experience in December. I didn't know what to say to him. He erased all my apprehensions with a simple "Thanks", a smile and a handshake. It's good to see you're still writing about Elena Daniel. I still have a hard time reading your posts.

February ended with a beautiful 72°F day.

In March, I started the CSS Framework design contest, rode to work in the rain and flew to Boston and Vegas. Memories of St. Patrick's Day in Boston with friends still brings a smile to my face. TheServerSide show in Vegas was a lot of fun and it was the first BOF I hosted with free beer. I later got to meet Mike Stenhouse (the inventor of The CSS Framework) in December and hosted two more "BOFs with Beer" at the Colorado Software Summit and The Spring Experience. Cost difference? Vegas: $800, Keystone: $350, Hollywood, FL: $220.

At the end of March, I came down with a nasty case of Carpal Tunnel. After seeing a specialist that massaged the hell out of my arm, everything was back to normal. I haven't had any issues since - but I also haven't had many multiple-no-sleep-night coding sprints in a while either.

Off to The Shop In April, I quit working on AppFuse and moved to Rails. I posted my Tips for Productivity and Happiness at Work (my most popular blog entry of all time), shipped my bus off to the shop and celebrated Julie and I's 6th anniversary. Then I rebooted this site and lived it up in New York City.

May brought CSS Design Contest winners and a 2-week trip to San Francisco for The Ajax Experience and JavaOne. The highlight of that trip was the weekend I spent in Wine Country.

Hans Fahden

In June, AppFuse 1.9.2 and Seam 1.0 were unleashed. Tim O'Brien had an interesting post titled What Web Application framework should you use?. I responded and Struts became a more focused project. Shale moved to a TLP shortly after. We started planning Raible Road Trip #10 and I began traveling to Washington, DC for a project. Going for beers at Brickskeller was the highlight of our trip that week.

July introduced me to cancelled flights and redeyes and Jason Carreira started JSR 303. AppFuse 1.9.3 was released and Julie sold her house to the first people that looked at it. At the end of the month, Jim Goodwill and I drove to OSCON in Portland. Having beers with Bryan and Scott at The Kennedy School was a highlight of that trip. Following OSCON, the family and I headed to Montana for a week.

The Cabin August was great, probably because I'd just hit 7 states in 7 days. I published an article on IBM developerWorks and had a device-free weekend (which I definitely need to do more often). I began working on AppFuse 2.0, a new sushi restaurant moved into our neighborhood and I got a new EVDO card (which I later lost in November). Jack turned 2 on August 28th.

In September, we got a new puppy. I traveled to the drunkest city in America, Las Vegas and New England. Julie met me in Boston and we had a blast at our good friends' (Chris and Julie's) wedding.

Abbie and Jack October brought the release of Spring 2.0 and a 2-week project for me at OpenLogic. Abbie and Jack got their pictures taken at school and I spent at week in Keystone at The Colorado Software Summit.

In November, my sister Kalin brought some hard cider to Abbie's 4th birthday. I attended Denver's NoFluff and hugged my kids. Jack and I had a boys weekend and we headed to The Cabin on Raible Road Trip #11.

Helmets on and ready to go To end the year, I did a bit more travel - first to Boise then to Florida for The Spring Experience. After a week of vacation in Florida, we returned to Denver for The Blizzard of 2006. Finally, we drove up to Steamboat for Christmas and took the kids skiing.

All in all, it's been a fabulous year. Watching the kids grow up, start to play together and even have conversations with each other has been very cool. I traveled more than I wanted to, but I also got to visit a lot of cities that I'd never been to. My goals for the year? To be happy, ski more and enjoy a few car bombs with family and friends. ;-)

Posted in Roller at Dec 31 2006, 03:05:56 PM MST 1 Comment

VMWare for OS X now available

Fusion Like Marc and Howard, I've been eagerly awaiting VMWare for the Mac. Howard blogged his frustration yesterday and voila! - the VMware Fusion public beta was posted today. I downloaded it, installed it and was successfully able to start my Ubuntu image I use for training classes. Well done VMWare!

You might ask why this is a big deal if Parallels already exists? The answer is simple: VMWare Player, VMWare Server and (hopefully) VMWare Fusion are all free! This means you can build an OS (or appliance) and anyone can download free software to play it. This is huge when you're doing training classes and need to install an OS on student's machines w/o charging them for it.

The only problem with all this virtualization stuff? It's currently taking up 20 GB of disk space on my MacBook Pro (15 GB for Windows, 5 GB for Ubuntu). Sounds like a good excuse to get a new write off before the end of the year. Or maybe I should install a 160 GB hard drive like Darren recommends? In reality, what I'd really love to do is get a couple of 16 GB flash drives and put an OS on each one. Too bad they're so spendy.

Posted in Mac OS X at Dec 22 2006, 05:54:47 PM MST 2 Comments

Here comes Winter!

Blizzard of 2003 Tomorrow should be an interesting day. The news says 12"-16" in the Denver metro area. Here's the forecast:

... there will be a couple of inches of snow by Wednesday morning and the storm should intensify throughout the day. There could be 10 or more inches of snow in the metro area by Wednesday evening.

I love the fact that it's going to be a very White Christmas. I wonder if this one will rival the Blizzard of 2003?

Speaking of local news, NBA basketball in Denver just got really interesting. The NBA's two top scorers on the same team? The Answer is Here. The first game that Iverson and Melo play in is on January 20th - it figures that I'd have tickets for the LaBron game on the 19th.

Update on Wednesday morning: The blizzard begins. It looks like they've upped the ante on snow levels too:

The metro area is expecting 14 to 24 inches of snow by Thursday morning.

Ironically, my sister happens to be flying through Denver today. Airlines are canceling flights, so we may get to visit with her for a day or two.

The kids love it, they couldn't wait to play in the snow this morning. So far, there's about 2-3 inches on our deck. Here's the view from my office:

Blizzard of 2006 - The Beginning

Posted in General at Dec 19 2006, 09:34:11 PM MST 4 Comments

[TSE] The Holy Grails of Web Frameworks with Guillaume LaForge

Under the hood, Grails uses Spring MVC. It has support for "flash scope" between requests.

I find it funny that flash scope is so popular these days, we've had this in AppFuse for four years. However, web frameworks didn't add native support for it until it had a name (provided by Rails). To be fair to Struts Classic, they had support for it before Rails was even invented.

Rather than JSPs, Grails uses Grails Server Pages, which look much like JSPs. Grails uses SiteMesh by default and allows you to easily change the layout used with a meta tag.

<meta name="layout" content="main"/>

Most of the dynamic attributes in a GSP are rendered using the various "g" tags. There's dynamic taglibs for logic (if, else, elseif), iterating, linking, ajax (remoteFunction, remoteLink, formRemote, submitToRemote), form (select, currencySelect, localeSelect, datePicker, checkBox), rendering (render*, layout*, paginate), validation (eachError, hasError, message) and UI (i.e. richtexteditor). [Read More]

Posted in Java at Dec 09 2006, 12:31:25 PM MST 6 Comments