I use Java almost 100% of the time in my day job. I think it is perfectly suited for what we do and love working with it. I also do work on the side and am really struggling to use Java for that stuff.

I actually think that with some really cool developments made over the last few years, Java is just as fast to develop with as Rails is. The language, to me, is better than Ruby (though there are some cool things in Ruby, and this is just my subjective opinion), and I like developing in it more. I’d really like to leverage my experience with Java I gain from work, and I’d like to have more time to play around with stuff I can’t spend a lot of time on at work, like Scala, Groovy, JBoss Seam, iceFaces, etc.. So, why the dilemma?

Deploying small Java apps is still pretty tricky. Rails (and PHP) are easy to deploy to a commodity host (< $10 per month). There are far fewer Java hosts, and they tend to support fewer features, cost more, are behind on the technology, and are difficult to use. Currently, the best and cheapest way I've found is to get a VPS. This works reasonably well, but is a little expensive ($30 per month or more for what you need to run a Java app server) and takes a lot of tweaking to optimize memory usage and allocation.

I realize that smaller, hobbyist apps are not necessarily the target market for JEE, but I think this is part of the problem. Making it easier for these types of apps would attract more people to the platform who may now be turned off by the comparatively higher time and money investment required. It also helps those of us who would like to use our Java skills for side projects and also experiment with newer libraries and features that we couldn't otherwise do at our day jobs.

I know a lot of other Java developers face this dilemma. I've had numerous conversations with co-workers about this very topic. A previous post where I showed how to get JBoss AS (and Seam) running on a VPS generated some comments on the blog and via private email about this issue. So, I guess I’m curious to see how others have dealt with this? And, is there any hope for easier Java app deployment in the future?