BeanKeeper

Practical Object Persistence

Philosophy

The term Java Enterprise Software started to make it's way into the consciousness of Java developers after the introduction of EJBs. This was to become an industry standard for developing "enterprise software", however it quickly became a pejorative term among developers, and it's quite easy to see why. First, you had to read a 300 page document to "get started", and to know what you were up against (and "against" is meant literally). You had to create configurations redundantly, you had to write more boilerplate code than business logic (most of the time), it was slow, required a separate server (Application Server) in addition to the Web Container to run, it was a pain to debug, trivial things like "listing objects", "searching for objects" were very difficult to implement, etc.

A lot of people saw that this complexity was not helping developers, and in fact was increasing the cost of development substantially. So today's most used software like Hibernate, Spring Framework, Java Server Faces, EJB 3, Struts Framwork, etc. are trying to be simpler and more usable than their predecessors, but are they succeeding? Why is it, that verbose and redundant XML configuration is still "in"? Why is it that Java can't be used for prototyping?

The problem is the philosophy of Java development has not changed significantly enough. Most of these libraries and frameworks still just implement features and technical solutions, instead of going the other way around and determine in advance what the library will be used for, and how to make the most common use cases easy to realize, while still allowing for some uncommon things.

BeanKeeper's first rule is simple things must be easy to do. This rule means, that saving, searching objects are simple operations, so they should be easy to learn and do with BeanKeeper. You mostly have to read 1 page of a tutorial to get started, and you don't have to configure anything. Second rule is, that features are only good, if they don't get in the way of the simple things, which means features are only added, if the first rule is preserved without compromise.

Conclusion is, that with this philosophy, with reducing the complexity, BeanKeeper is able to reduce the frustration and cost of development, which in turn increases the "joy factor" of developing Enterprise Software.

Implementation

So how does all this philosophy stuff translate to a persistence software library? The library is not only supposed to handle all low-level database operations transparently, but also some of the more high-level functions. This must be done in order to enable the developer to concentrate only on writing logic. So BeanKeeper offers the following key features:

Openness

Our goal is to make Java programmers' life easier, and to prove, that Java does not have to be complex, just because it's Java. The library is licensed under the LGPL. This means, that you can use it, for anything you like unmodified, free of charge. But because we want this to be a community effort, and expect a lot of people to help (with feedback, code, tests, experiences), you are forbidden to take the code, modify it, and keep the changes for yourself. If you distribute the modified program, you must supply the code for your modification too. You can also use this library in commercial software free of charge.

We hope, that other programmers can benefit from this work too, and the unique philosophy and purpose of this library makes it attractive enough to ensure a place amongst the widely used solutions.