23 March, 2010

5 Amazing Java libraries that you probably have never heard of

H2 Database - SQL Database written in pure and 100% Java. It can be used as embedded, server, or in-memory database. Batteries included; I mean, it comes with a web-based admin console to manage your databases. And the performance? Men!! Speed of light. OK, that's exaggeration. The thing is, performance comparison is hard to get right due to many factors. But if you're in the to-see-is-to-believe camp, I suggest that you test it yourself and see how it's jaw-dropping performance outshines its competitors. I will not say anything more about H2. I want you to try it yourself and feel the euphoric experience that leaves you loving your job as a software developer. But I have a bit of warning, though: When you touched H2 Database, you would never look back again to JavaDB/Derby.

Neodatis - Be free of Object-Relational Mismatch and get in touch with Neodatis. It's an object-oriented database that can be embedded or run in client-server mode. Unlike JODB and the other bigger ODB such as db4o, Neodatis is LGPL. Yes, it is the GPL with the L. If you are one of those NoSQL advocates, give it a try and spread the word. It comes with ODB Explorer, the GUI that you can use to manage your databases. But to be honest, ODB Explorer is crappy. You're better off using its API to manage your databases if you're not impressed with ODB Explorer.

MigLayout - Do you often literally cry when you're doing GUI with Java? Do you find yourself in a battle between you and the necessary evil which is the GridBagLayout? Now, don't fret anymore. MigLayout to the rescue. It is a Layouting engine for Swing and SWT. It is the third most requested RFE in Java. And the comments written in that RFE page ranges from a simple +1 votes to "I hate Sun" comments to absolutely dramatic testimonials. Need I say more?

BeanShell - This is the most useful vaporware I've ever seen in my life! It was supposed to be a scripting language that runs on the JVM. The syntax is just Java. Meaning, you don't have to learn a new language. I even have written a #!shebang script for Unix using BeanShell. I love this piece of software so much but it's not maintained anymore. The last update was on May 23, 2005. I can't believe it's dead while there was a JSR-274 for this. In my opinion, it became a victim of political maneuvering in the Java-Land. Or maybe, its maintainer got a job from a company that prohibits him/her from touching BeanShell again (a.k.a, "abandon-your-opensource-project contract"). Its opensource nature saved this vaporware for a fork was born, named beanshell2. The goal of this new fork is to continue BeanShell development under the hands of new maintainers.

======================

[update March 25, 2010: I'm feeling guilty for not including Winstone in my 4 original list. So, let me introduce you to Winstone. Read on...]

Winstone - Everyone speaks of Jetty. Everyone screams Tomcat. But did you know that Jetty and Tomcat are not the only options? Winstone is a Servlet Container with optional JSP compilation capability through Jasper library. Other features include AJP13, SSL, supports limited datasource definition and authentication realms, and can be run as embedded. But the feature of Winstone that I like the most, aside from being CDDL/LGPL, is its straight forward configuration and its 166KB single-jar. No mystical XML configurations that only vampires can understand. By just reading its short manual in a single HTML page, you will be amazed by its simplicity. In other words, it is "Simply Amazing!". I don't know if it utilizes NIO under the hood, who cares anyway? I'm not using it to run e-bay, twitter or paypal. But it would be really very nice if it's NIO-fied.

Combine Winstone, Wicket Web Framework, H2/JDBC or just Neodatis and you will have a just-enough mix of a simple web application that is so feel-good to create and maintain, blessed with a 40-year-old Unix Philosophy that "small is beautiful" and "less is more", and without the complexity-hell of IoC, Persistence API, Buzzword-Services® and JNDI/JavaMail/EJB/ETCETERA. And when you're drinking beer together with your pro-PHP, pro-Python and pro-RoR comrades, you can lift up your head and proudly say, "Hey, I can also build incredible web applications in a simplistic and non-overkill way!" But no need to mention that you can deploy your webapp on iPhone or Android, they might get filled with envy!

What other unpopular but marvelous Java libraries out there that you feel worthy of our attention? Please let me know.