The Ollin Framework

I have recently discovered a simple Java database framework called “Ollin“. It can be found when searching jdbc fluent api on Google. It has a couple of transaction handling and ORM features, the way many other frameworks do this. But one specific functionality I found particularly interesting:

In this example, you can pass an anonymous type implementing a RowVisitor base interface to a “closure-style” foreach method. Victor Herrera, the creator of Ollin designed this specifically for a use case he had where large amounts of rows (or records) needed to be processed and memory was getting low. This use case is already covered in jOOQ when using the ResultQuery.fetchLazy() method, and then iterate over the resulting Cursor. But the idea of “injecting” a custom handler seemed appealing to me, so with Victor’s permission, I have implemented a similar construct for jOOQ 1.6.4 with #728.

In jOOQ, the magic word is “fetch”, and as discussed recently, there is now the possibility of fetching things into custom types using ResultQuery.fetchInto(Class<?>). So why not also fetch results into custom “targets” like this:

5 thoughts on “The Ollin Framework”

Spring’s JdbcTemplate knows the concept of a RowMapper or RowCallbackHandler and other types. All of those types are based on plain JDBC ResultSet’s. In fact, Ollin doesn’t do much more than that, so you’re right.

Yes, it could seem like what Spring JDBC does. But Spring doesn’t abstract the concept of Row. Maybe this doesn’t matter in functionality but I like to develop in a more-OO style.

The main feature (and difference with Spring) of Ollin is that is based in the Visitor pattern. So the functionality is in the implementation of the RowVisitor. There is just one class and one method to execute the query (useful for simple cases).