February 6th, 2006
Last month, I was talking about the CRUD frameworks that are available in Java. I still owe Matt an answer.
Let me start off with saying that Appfuse is a great framework for starting a Java web application project. It can be configured to use a variety of combinations (Hibernate or iBatis, Spring, and Struts or Spring MVC), and it gives you almost everything you need pre-defined. I'd say it saved our team at least a month of development. We chose the Hibernate - Spring - Spring MVC combination. Appgen is an application that can generate the full source stack (DAO, Manager, FormController, and jsp) that you need to CRUD an object. It is based on a few XDoclet templates, and has the advantage that it knows the directory structure of your Appfuse project. When compared with other CRUD generation frameworks such as trails, appgen has 2 very distinct advantages: it runs on JDK 1.4, and it actually generates code. The first one was a conditio sine qua non in our environment, and the second one gives you the feeling that you have a safety net: if (when) we meet the limits of the possibilities of our generating framework, we can leave it behind and continue with the code that was generated. That's not the nicest option, I know, but it is reassuring to know that it is there. Now, when I said that Matt has problems with code generation tools, I was referring to his statement here:
At first, I didn't want to add a code-generation feature like this b/c you'd end up with a 1-to-1 relationship between tables/pojos, DAOs and Managers.That gave me the feeling that he just included the tool because those guys did some hard work to provide it to him - not from his own conviction. My statement that Appgen is not complete, stems from the fact that a lot of components and features that one expects in such a framework, are not present. I would expect a nice component to enter dates; I would expect a "search" feature; I would expect a way to order elements; and so on. Of course, I'm only speaking of the Spring MVC implementation. It might very well be that the Struts implementation does have these features. Nonetheless, we've been quite happy with what Appfuse and Appgen give us. Both have already proven to be easily extensible, and that's the main feature of such a framework. We have not yet met the limits of both of these frameworks, and for the time being, it doesn't seem like we will do so any time soon. Tip of the hat, and a big thank you, to Matt to start such a nice project. At the moment, we're a bit swamped to get something out of the door, but when things settle down a bit, I'll check whether some of our code can be contributed back.