After successfully using AppFuse 1.9.4 in a production environment, we recently started developing with the AppFuse 2 version. I know, I know… it has been out for sometime, but we finally had the right opportunity to try the 2.0.2 version for a new app.
Having been familiar with the previous version, I thought it would be a breeze. AppFuse, for those of you not familiar with it, provides a great pre-assembled stack of Java technologies. We used the Spring-Hibernate-Spring MVC stack in our previous apps, and so we chose the Spring MVC Basic stack for our new app. The AppFuse site provides some great QuickStart instructions along with tutorials. I cannot recommend highly enough the benefit of doing the tutorials, even if you consider yourself an accomplished Spring/Hibernate developer. They just save a lot of time in familiarizing yourself with the AppFuse way.
Back to our experiences. Let me start by saying that in the end, AppFuse 2 works great. Getting to that “great” end has been a bit of an unanticipated trek though, mostly due to our specific environment and (in)experience with certain methods used in building software with AppFuse 2. We develop using Windows machines (from behind a firewall), accessing Oracle databases that contain a lot of legacy data tables. No greenfield development here
.
Here’s what we found when moving to AppFuse 2:
- We were Ant People (sounds like a sci fi movie?). AppFuse 2 uses Maven. We had not used Maven before. We actually now like Maven, but migrating to Maven has not been without a learning curve and significant time investment. The fact that we develop from behind a firewall complicated initial configurations, and the fact that we utilize several jar files not applicable to a generic framework like AppFuse required us to learn a lot more about Maven fast. We have had to set up a local repository to deal with our issues. To be fair, AppFuse does provide instructions on how to utilize Ant rather than Maven, but we decided to stick to Maven in order to realistically evaluate if it provided any additional benefits to our build environment.
- We had Oracle issues. We use Oracle XE on our development machines, and Oracle 10G in production. AppFuse uses MySQL by default. If you’re just starting to evaluate AppFuse, stick with the MySQL at least while you are doing the tutorial portion. Configuring to Oracle has been a bit tricky. The AppFuse Forums have some detailed information on this, and we were readily able to get Oracle working on our development machines, but experienced problems with any sort of extended use. In our particular case, we had problems with exhausting database connections, and this took some additional research to cure.
- Jetty instead of Tomcat. Once again, just something new to us. We’re long time Tomcat users, and though Jetty is well regarded, we have had a few adjustments getting used to it. I’ve tried to set up the logging for Jetty and have yet to be successful.
- Hibernate Annotations Never used them before… I now like ‘em.
- Sample Data Management We do a lot of reporting systems that read large amounts of data. Several of our data tables and views are read-only “references”. We like to load these once with production data and be done with it. The AppFuse/Maven model makes this tough. I have yet to figure out how in the build process to skip creating/re-loading a table.
- Plan on using the full source version. Doing anything beyond a trivial app requires the full source version.
Overall, I think AppFuse 2 well worth the upgrade. It acts as a great starting place for an app and can really jumpstart development. The code provided and the methodologies recommended to develop apps readily demonstrate several best practices for software development, and this makes it an enjoyable framework from which to learn more about open source Java development. I do see some challenges to overcome as we customize portions of the framework to our specific purposes. I hope we are able to do this and continue to maintain a baseline from which we can easily start new applications tailored to our needs, and still maintain compatibility with the AppFuse framework. I suspect I’ll have more to say on this later.
{ 1 comment… read it below or add one }
If you want to skip the reloading of tables, use this switch at the command line when running “mvn”
-Dmaven.test.skip=true