Appfuse Documentation 2.1.0
Appfuse Documentation 2.1.0
Appfuse Documentation 2.1.0
3
1.1 AppFuse QuickStart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.1 Maven for Newbies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Commercial Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Demos and Videos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4 FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5 News . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5.1 Articles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.5.2 Blogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.5.3 Presentations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.6 Project Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.6.1 Developer Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.6.1.1 Continuous Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.6.1.2 Project Policies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.6.1.3 Release Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.6.2 Issue Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.6.3 Mailing Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.6.4 Source Repository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.6.5 Sponsors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.7 Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.7.1 Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.7.2 AppFuse Maven Plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.7.3 CSS Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.7.4 Database Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.7.5 IDEs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.7.5.1 Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.7.5.2 IDEA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1.7.5.3 MyEclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.7.5.4 NetBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.7.6 Licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
1.7.7 Maven 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
1.7.7.1 Maven Plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
1.7.8 OS Specific Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
1.7.9 Persistence Frameworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
1.7.9.1 Hibernate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
1.7.9.2 iBATIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
1.7.9.3 JPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
1.7.10 Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
1.7.10.1 Apply Security to Managers and DAOs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
1.7.10.2 CAPTCHA Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
1.7.10.2.1 CAPTCHA Integration for Spring Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
1.7.10.3 Configuring the Menu System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
1.7.10.4 Database Encryption with Jasypt-Hibernate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
1.7.10.5 LDAP Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
1.7.10.6 Protecting Actions and Controllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
1.7.10.7 Secure JSF components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
1.7.11 SiteMesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
1.7.12 Spring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
1.7.13 Version Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
1.7.13.1 Hosting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
1.7.14 Web Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
1.8 Tutorials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
1.8.1 Development Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
1.8.1.1 Installing an SMTP Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
1.8.1.2 Using JRebel with IntelliJ IDEA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
1.8.2 Enterprise Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
1.8.2.1 Clustering with Terracotta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
1.8.2.2 JBPM Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
1.8.3 Migration Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
1.8.3.1 Release Notes 2.1.0 M1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
1.8.3.2 Release Notes 2.1.0 M2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
1.8.3.3 Release Notes 2.1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
1.8.4 Persistence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
1.8.4.1 AppFuse Core Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
1.8.4.2 Using Hibernate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
1.8.4.2.1 Java 5 Enums Persistence with Hibernate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
1.8.4.2.2 Managing Hibernate through MBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
1.8.4.3 Using iBATIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
1.8.4.4 Using JPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
1.8.5 Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
1.8.5.1 Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
1.8.6 Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
1.8.6.1 Using JSF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
1.8.6.2 Using Spring MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
1.8.6.3 Using Struts 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
1.8.6.4 Using Tapestry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Home
AppFuse is an open source project and application that uses open source tools built on
the Java platform to help you develop Web applications quickly and efficiently. It was
originally developed to eliminate the ramp-up time found when building new web
applications for customers. At its core, AppFuse is a project skeleton, similar to the one
that's created by your IDE when you click through a wizard to create a new web project.
AppFuse 2 is a restructuring of AppFuse 1.x to use Maven, Java 5 and annotations. The
major reasons we use Maven are:
Dependency downloading
Easier maintenance (everything can be compiled at once)
Easier upgrading for end-users
If you'd like to help out or ask questions about AppFuse 2, please do so on the . If you'd like to use AppFuse 2, see the user mailing list Demos
and use the to get started. and Videos QuickStart Guide
April 4, 2011: AppFuse 2.1.0 Released!
Please see the to start using AppFuse or read the to see what's new. QuickStart Guide News Announcement
Features in AppFuse 2:
Maven Integration
Spring Annotations
Web Frameworks support: JSF, Struts 2, Spring MVC, Stripes, Tapestry 5 and Wicket
JDK 5, Annotations, JSP 2.0, Servlet 2.4
JPA Support
Generic CRUD backend
Full Eclipse, IDEA and NetBeans support
Fast startup and no deploy with Maven Jetty Plugin
Testable on multiple appservers and databases with Cargo and profiles
Please use the menu on the left to navigate this site.
Recent Project News
Title Author Date Posted
AppFuse 2.1 Released!
Matt Raible Apr 04, 2011
AppFuse 2.1.0 Milestone 2 Released
Matt Raible Nov 15, 2010
AppFuse 2.1.0 Milestone 1 Released
Matt Raible Nov 19, 2009
A Letter to the AppFuse Community
Matt Raible Nov 05, 2009
New Tutorials - External Sorting with Display Tag and Integrating Compass 2.0
Matt Raible May 22, 2008
New Documentation!
Matt Raible May 13, 2008
AppFuse 2.0.2 Released
Matt Raible May 11, 2008
MarkMail and FishEye
Matt Raible Dec 05, 2007
Integrating Crowd with AppFuse and Acegi
Matt Raible Nov 28, 2007
AppFuse 2.0.1 Released
Matt Raible Nov 26, 2007
Thanks goodness for free bandwidth
Matt Raible Sep 20, 2007
AppFuse 2.0 Released!
Matt Raible Sep 18, 2007
AppFuse 2.0 RC1 Released
Matt Raible Sep 04, 2007
1.
2.
3.
1.
a.
b.
c.
d.
2.
1.
AppFuse vs. Grails vs. Rails
Matt Raible Aug 10, 2007
New Server at Contegix
Matt Raible Jul 27, 2007
AppFuse QuickStart
To start developing Java applications with AppFuse 2, please following the instructions below:
Table of Contents
Create a new project.
Run it.
Have Fun.
Create a project
Setup your - or follow the steps below if you're a veteran. Development Environment
Download and install JDK 5+ (make sure your JAVA_HOME environment variable points to the JDK, not a JRE).
Download and install MySQL 5.x (or use a different database ). see here
Setup a local or change (in ) to use a different host name - it defaults to SMTP server mail.properties src/main/resources
"localhost".
Download and Maven 2.2.1+. install
From the command line, cd into your "Source" directory (c:\Source on Windows, ~/dev on Unix) run the Maven command you see below
after choosing your web framework and other options.
Choose your Stack
AppFuse comes in a number of different . To optimize and simplify your experience as a user, we've created a number of flavors
different archetypes (a.k.a. starter projects). There are currently three types of AppFuse Archetypes: light, basic and modular.
Light archetypes are bare-bones, basic archetypes contain User Management and Security and modular archetypes contain
"core" and "web" modules and are ideal for creating projects that have a re-usable backend. You should change the to groupId
match your preferred package name and the to match your project's name. artifactId
Your browser does not support iframes
The warnings you see when creating your project are expected. If you see at the end, your project was BUILD SUCCESSFUL
created successfully.
If you have issues using the command above, such as, or archetype:generate ResourceNotFoundException Error merging velocity
, then you may have an older or unsupported version of the maven-archetype-plugin. You can use the maven coordinates to specify template
which version of the plugin should be used: . This mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-4:generate -B ...
command will download and add the specified plugin to your local maven repository in order to execute the goal correctly.
You should be able to run AppFuse immediately if you have a database installed and it's accessible to root using no password. If MySQL 5.x
you'd prefer to use an embedded database, we've recently added for H2, HSQLDB, etc. Database Profiles
Run your application
Running AppFuse is easy now. Once the archetype project is created, Maven will create and populate your database using the and hibernate3
plugins, respectively. All you have to do is use Maven to run the Jetty container and view your application. dbunit
Decide if you want to change AppFuse from "embedded mode" to full-source mode by running from your mvn appfuse:full-source
project's root directory. When you run appfuse:full-source after checkin you may run into problems.
For AppFuse versions < 2.1.0
The SVN repository location has changed. To avoid errors like ''svn: PROPFIND request failed on'' you'll need to add
the following to the appfuse-maven-plugin's configuration section for everything to work. Add this to the created pom file
in your project root.
<trunk> </trunk> https://svn.java.net/svn/appfuse~svn/
2.
3.
4.
To view your application run from your project's directory ( mvn jetty:run for a project, you'll need to run from modular mvn jetty:run
). Maven will start Jetty and you should be able to view your application in your project's directory (after installing the core module) web
your browser at . http://localhost:8080
Check your new project into source control, unless you have a good reason not to. and are good options. Google Code GitHub
Run from within your project to download JARs, Tomcat and run the integration tests in your project. mvn
The default username/password for an admin user is . For a regular user, use . admin/admin user/user
If you receive OutOfMemory errors when using , see . mvn jetty:run this mailing list thread
Changing database settings
To change your MySQL database settings, simply change the <jdbc.*> properties at the bottom of your pom.xml. See Database
to use a database other than MySQL. Profiles
MySQL Security
Running MySQL using root with no password is not the most secure thing to do. Once your database is
created, you can change the root password using the command below:
mysql --user=root --pass='' mysql -e "update user set
password=password('newpw') \
where user='root'; flush privileges;"
AppFuse uses the username "root" and a blank password by default. To change these values, modify the
<jdbc.username> and <jdbc.password> properties in your project's pom.xml (at the bottom).
Develop your application
You can develop your application using , or . For Eclipse, and import your project. For IDEA, simply use Eclipse IDEA NetBeans install m2eclipse
File > Open Project and point to your project's directory. Further instructions can be found in the . IDE Reference Guide
The should help you get started developing your application. Tutorials
Maven for Newbies
This page is intended to be a place to document my impressions about Maven and AppFuse 2.x as I take my AppFuse 1.9.x experience and
move forward into the future of webapp development.
Now for a bit of background about me. I'm the Development Supervisor for , which basically means I make sure the other Sum-Ware, Inc.
developer and network admin have something to do and I have to get done the stuff that's left.
I'm taking a two pronged approach to learning AppFuse 2.x. At work I have a Windows desktop running Sun Java 1.6 and Eclipse 3.2. The project
I'm starting at work uses the "appfuse-basic-struts" archtype. At home I'm doing a different project on my Ubuntu laptop with Sun Java 1.6 and
Eclipse 3.2 (I may switch to IDEA on this project--dunno yet). This project is built on the "appfuse-modular-struts" archtype.
I'm sticking with Struts 2 (at least for now) for simplicity and my own sanity. I'd like to limit the number of variables as much as I can during this
learning process.
Targets v. Goals
The first thing that I noticed is the maven "goals" are similar, but different than ant "targets." Goals are cool because they are universal
and apply to all maven projects, but targets are a bit easier to figure out because they exist entirely within your build.xml file (more or
less). The page has a good list of commonly used goals and what they are for. Maven 2
I must say even if it is not obvious how to use Maven in the beginning I must say it is pretty easy to get started with it. Once the
prerequisites were installed (none of which were hard to do), I had AppFuse running within 10 minutes. And most of that time was spent
letting maven fetch dependencies.
IDE integration
Eclipse integration is pretty nice. But I did have a couple of weird things happen.
When creating my POJO I had to clean the project a couple of times to get the Eclipse to recognize the annotations
I ran the command to create the M2_REPO stuff in my project. That did work, I could see all the dependant JAR's listed in the
project, but it didn't fix the annotation problem mentioned above.
I had to add the M2_REPO variable to the environment as well. After that things went pretty smooth.
I have not used IDEA with AppFuse 2.x yet, but I hear it is better than Eclipse.
Dependency downloads
This is really cool and a bit weird at the same time. I have gotten a number of Warning and Error messages while maven is downloading
dependencies. But the really weird part is stuff seems to still work. Check out this output for example:
[INFO] Wrote settings to
/home/nathan/src/fetch-calendar/web/.settings/org.eclipse.jdt.core.prefs
[INFO] Wrote Eclipse project to /home/nathan/src/fetch-calendar/web. for "fetch-calendar-webapp"
[INFO]
Sources some artifacts are not available. for
List of artifacts without a source archive:
o org.apache.struts:struts2-core:2.0.6
o commons-fileupload:commons-fileupload:1.1.1
o opensymphony:clickstream:1.0.2
o org.apache.struts:struts2-spring-plugin:2.0.6
o velocity-tools:velocity-tools-view:1.0
o javax.servlet:jsp-api:2.0
o org.apache.struts:struts2-codebehind-plugin:2.0.6
o freemarker:freemarker:2.3.8
o org.tuckey:urlrewrite:2.5.2
[INFO]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] ------------------------------------------------------------------------
[INFO] AppFuse Modular Application ........................... SUCCESS [6.338s]
[INFO] AppFuse Modular Application - Core .................... SUCCESS [57.907s]
[INFO] AppFuse Modular Application - Web (Struts 2) .......... SUCCESS [2:20.721s]
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 minutes 27 seconds
[INFO] Finished at: Tue Apr 03 22:05:12 PDT 2007
[INFO] Final Memory: 48M/63M
[INFO] ------------------------------------------------------------------------
How can struts2-core fail to download, yet I can run "mvn jetty:run-war" perfectly? I have no idea... :?
Okay... I'm dumb. I just realized it can't get the source packages, but the binaries ware downloaded just fine. Maybe someone else will
read this and avoid public humiliation
Hello World
I'm sure there is a reason for the App.java and AppTest.java (and Core.java for modular archtypes) classes that get created when you make a
new project. I just have no idea what that is. Maybe someone could link to an answer?
Maven and HTTP proxy settings
If your local network is behind a HTTP proxy (note that this is from a Maven repository proxy) you will see something like 'Error different
transferring file'. Find out the hostname and port of your proxy and add the following to your command-line: -DproxySet=true -DproxyHost=<your
proxy host> -DproxyPort=<your proxy port>
Note: if you've tried and failed a few times, the central repository may have become blacklisted. Add the -U command line option to force an
update.
Commercial Support
$5000 (1-4 students) / $10,000 (up to 12 students)
Price per Month
Number of Contacts
Incident Limit
Response Time
Support Hours
1.
2.
3.
Commercial support for AppFuse is offered by . Raible Designs was started by Matt Raible, the founder of AppFuse. Matt has Raible Designs, Inc.
intimate knowledge of AppFuse, as well as all the frameworks that it uses, particularly Spring, Hibernate, Maven 2, Ant, Ajax, DWR, JSF, Struts 2,
Spring MVC and Tapestry. In addition, Matt has worked with many clients over the years to help setup that facilitate development ecosystems
solid, maintainable applications. IDEs, Issue Trackers, Source Control, Continuous Integration and Automated Releases can make your software
development team a well-oiled machine.
Raible Designs currently offers a number of different support options: from phone/e-mail support to consulting and training. Prices and services
are listed below. Please for more information. contact us
AppFuse Support
Consulting
Training
AppFuse Support
The support packages below include both phone and e-mail support. to purchase a support agreement or if you're interested in Contact us
longer-term support services and rates. If you need faster response times, that's certainly something we can provide.
10 hours/month 20 hours/month 40 hours/month
8-5, M-F, MST 8-5, M-F, MST 8-5, M-F, MST
8 hours 8 Hours 8 Hours
Unlimited Unlimited Unlimited
Unlimited Unlimited Unlimited
$3,500 $6,000 $10,000
Consulting
While Matt is available for long term consulting engagements, you might find it useful to consider our 2-week . This QuickStart Engagement
includes starting your application with AppFuse, setting up developer's environments (and documenting for new developers) as well as setting up
your Development Ecosystem (DE). Development Ecosystems typically consist of IDEs, Source Control, an Issue Tracker and Wiki (for
documentation, Continuous Integration and Automated Releases. If you're keen on using open source, the following stack works quite well for
ecosystems:
Eclipse
Subversion
Trac
Hudson
Maven 2
If you're open to commercial tools, we highly recommend and products. This stack includes: IntelliJ IDEA Atlassian
IntelliJ IDEA
Subversion
JIRA/Confluence
Bamboo
Maven 2
The price for a 2 week is $15,000 and includes two days (first and last) onsite. QuickStart Engagement
Training
Raible Designs offers a training course titled . This course is delivered in two formats: one for Managers and one for Open Source Java Jewels
Developers (with labs). The Manager course is 1.5 days while the Developer course is 3 days. Prices are listed at the top right of each course's
agenda.
The instructor will provide a full development environment on an Ubuntu VMWare image. Instructions will also be provided to setup Windows and
OS X. Minimum hardware requirements are 2GB RAM, Windows XP/Mac/Linux and 5 GB of disk space. Internet access should be provided for
students as well. The course will be delivered onsite.
Open Source Java Jewels for Managers
Day 1: Spring, Hibernate, Maven and Spring MVC
$7000 (1-4 students) / $15,000 (up to 12 students)
[9:00] Introductions and Overview
[9:30] Spring Framework Overview
[11:00] Introduction to Hibernate and JPA
Lunch Break
[1:00] Introduction to Maven 2
[2:00] Introduction to Spring MVC
[3:00] Developing web applications with Ajax and DWR
Day 2: Testing, Ajax and AppFuse
[9:00] Testing Spring Applications
[10:00] UI Testing with Canoo WebTest, JWebUnit and Selenium
[11:00] Introduction to AppFuse 2.0
Open Source Java Jewels for Developers
Day 1: Spring and Hibernate
[9:00] Introductions and Overview
[9:30] Presentation: Spring Framework Overview
[10:30] Lab: Loading the BeanFactory and using IoC
[11:00] Presentation: The BeanFactory in-depth
Lunch Break
[1:00] Lab: Writing a custom PropertyEditor
[2:00] Presentation: Introduction to Hibernate and JPA
[3:00] Lab: Persistence with Spring and Hibernate
[4:00] Presentation: Spring Persistence, DAOs and Caching
Day 2: Maven, Testing and Spring MVC
[9:00] Presentation: Introduction to Maven 2
[10:00] Presentation: Testing Spring Applications
[11:00] Lab: Testing with JUnit, jMock and TestNG
Lunch Break
[1:00] Presentation: Introduction to Spring MVC
[2:00] Lab: Create a Master/Detail Screen
[4:00] Presentation: Advanced Spring MVC
Day 3: Ajax, AppFuse and UI Testing
[9:00] Lab: Validation and Handling Dates with Spring MVC
[10:00] Developing web applications with Ajax and DWR
[11:00] Lab: Master/Detail Ajaxified and Autocomplete
Lunch Break
[1:00] Presentation: Introduction to AppFuse 2.0
[2:00] Lab: Creating Projects with AppFuse
[2:30] Presentation: Maven Plugins and AMP (AppFuse Maven Plugin)
[3:00] Lab: Using AMP to generate a table's UI
[4:00] Presentation: UI Testing with Canoo WebTest, JWebUnit and Selenium
Additional Modules
In addition to the sessions listed here, we also have presentations and labs covering Spring AOP, Spring Transactions,
Acegi Security and Remoting/Web Services with Spring. You can also replace any references to Spring MVC with Struts 2,
JSF or Tapestry.
Contact
Please if you have any questions. contact Raible Designs
Demos and Videos
There are online demos of AppFuse as well as a few videos. In addition, there are a number of public sites . powered by AppFuse
Online Demos
Use username and password to login as an administrator - will allow you to login as a user. Click on the links below to admin admin user/user
Easy CRUD with Struts 2
Watch QuickTime Video
14.2 MB, 6 minutes 6 seconds
view a live demo.
JSF + Spring + Hibernate
Struts 2 + Spring + Hibernate
Spring MVC + Spring + Hibernate
Tapestry + Spring + Hibernate
Videos
Hello World
Watch QuickTime Video
13.2 MB, 6 minutes 14 seconds
Here you can download high quality videos (they're much clearer) 50.88 MB:
https://appfuse.dev.java.net/files/documents/1397/58384/appfuse-2.0-videos.zip
The projects created in these videos can be downloaded from the project. appfuse-demos
FAQ
This page is a growing list of frequently asked questions about AppFuse.
Table of Contents
What is AppFuse?
What are AppFuse's conventions for package naming?
What is the difference between AppFuse 1.x and 2.x?
Where are the Java source files and JSPs in 2.x?
Can I use Ant instead of Maven in 2.x?
Can I run AppFuse 2.x using Java SE 1.4?
How do I customize the header and footer messages in 2.x?
How do I customize Login and Error Pages in 2.x?
Why don't I have to install Tomcat with 2.x?
What if I already have Tomcat installed and I'd like to use it?
What does "basic" and "modular" mean when it comes to AppFuse 2.x archetypes?
How do I tell IDEA to ignore deployment descriptors when compiling?
How can I export my database using DbUnit?
How can I change my AppFuse-generated project to use iBATIS or JPA?
Is there any documentation that describes what all the filters do in web.xml?
How do I configure LDAP Authentication?
How do I debug my application when it's running in Jetty?
How do I make Jetty start on a specific port?
When saving Chinese or Japanese characters in a form, I'm getting java.sql.SQLException: Incorrect string value. How do I solve this?
When using jetty:run, CSS and JavaScript files are locked - how can I fix this?
Using Struts, how can I dynamically add columns to a Table using a list of beans nested in my table row data?
What is AppFuse?
AppFuse is an open source project and application that uses open source tools built on the Java platform to help you develop Web applications
quickly and efficiently. It was originally developed to eliminate the ramp-up time found when building new web applications for customers. At its
core, AppFuse is a project skeleton, similar to the one that's created by your IDE when you click through a wizard to create a new web project.
AppFuse 1.x uses Ant to create your project, as well as build/test/deploy it. AppFuse 2.x uses Maven 2 to create your project as well as
build/test/deploy it. IDE support is much better in 2.x because you can generate the IDE project files with Maven plugins. AppFuse 1.x uses
XDoclet and JDK 1.4+. AppFuse 2.x uses annotations and JDK 5+.
What are AppFuse's conventions for package naming?
It's recommended you start with com.companyname if you're commercial or org.organizationname if you're non-profit. Most folks match their
internet domain name. From there, use your application name.
From there, AppFuse expects you to use the following conventions:
com.company.app.model -> Entities
-> Dao Interfaces com.company.app.dao
-> Hibernate Implementations com.company.app.dao.hibernate
-> Service Interfaces com.company.app.service
-> Service implementation com.company.app.service.impl
-> Struts Actions (this really depends on the framework you're using) com.company.app.webapp.action
What is the difference between AppFuse 1.x and 2.x?
AppFuse 2.0 works rather differently from AppFuse 1.x - Maven keeps the AppFuse core classes as dependencies. You add your code, and
Maven will merge in the code from AppFuse. This should make it much easier for you to upgrade to future releases of AppFuse.
If you run and point your browser to you will see that you have a fully fledged AppFuse project present. If mvn jetty:run-war http://localhost:8080/
you need to change any of the files in the web project, simply run in the web project to populate the source mvn war:inplace src/main/webapp
directory. You will need to delete WEB-INF/lib and WEB-INF/classes/struts.xml (if you're using Struts) after doing this.
Where are the Java source files and JSPs in 2.x?
AppFuse 2.x is a fair amount different from 1.x in that you don't get all the source to start your project with. The main reason for this is to make it
possible for you to upgrade your application to a newer version of AppFuse. For a more detailed explanation, please see . this mailing list thread
If you'd like to modify modify AppFuse's core entity classes, see . If you'd like to convert your project so it doesn't rely how to modify core classes
on AppFuse dependencies and includes AppFuse's source instead, run . mvn appfuse:full-source
Can I use Ant instead of Maven in 2.x?
If you create a project using one of the basic archetypes in M5 and then run , you can use a modified version of mvn appfuse:full-source
AppFuse Light's build.xml to build/test/deploy your project. Below are the steps needed to add Ant support to a basic archetype:
Run from your project's directory mvn appfuse:full-source
Download build.xml into your project.
Edit build.xml to replace occurrences of "appfuse-light" with your project's name.
Download maven-ant-tasks-2.0.9.jar and copy it to a "lib" directory in your project. You will need to create this directory if it doesn't
already exist. You can also add this JAR to your $ANT_HOME/lib directory.
We don't plan on supporting Ant for modular archetypes. If someone wants to contribute Ant support for them and support it, we'll be happy to add
it.
Can I run AppFuse 2.x using Java SE 1.4?
AppFuse 2.x requires Java 5 for development, but not for deployment. You should be able to use the to convert your WAR Retrotranslator Plugin
to be 1.4-compliant.
How do I customize the header and footer messages in 2.x?
If you would like change the following heading:
AppFuse
Providing integration and style to open source Java
Change and change values for the and keys. To modify src/main/resources/ApplicationResources.properties webapp.name webapp.tagline
1.
2.
the "Your Company Here" text and its URL in the footer, you'll need to modify the and in this same file. company.name company.url
How do I customize Login and Error Pages in 2.x
If you would like change the any of the pages that appear in the root directory of your application, for example:
login.jsp, , , error.jsp 404.jsp logout.jsp
Put copies of your modified jsp files into . src/main/webapp
If you want to copy existing versions of these files and modify them, look for them in your directory. target/YOUR_APP_NAME/
Why don't I have to install Tomcat with 2.x?
If you run , the Maven Cargo plugin will download and install Tomcat and run the integration tests against it. If you want to mvn integration-test
see your project running in a server, you have two options:
Run - this will fire up a Jetty instance and it will be available at . mvn jetty:run-war http://localhost:8080
Run and your application will be deployed to Tomcat and available at mvn cargo:start -Dcargo.wait=true
. http://localhost:8081/applicationname-version
You can also add the to your and use and . Maven 2 Tomcat Plugin pom.xml mvn tomcat:run mvn tomcat:run-war
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<path>/</path>
</configuration>
</plugin>
What if I already have Tomcat installed and I'd like to use it?
If you want to change to point to an existing instance of Tomcat, you should be able to change the bottom of pom.xml from: Cargo
<container>
<containerId>${cargo.container}</containerId>
<!--home>${cargo.container.home}</home-->
<zipUrlInstaller>
<url>${cargo.container.url}</url>
<installDir>${installDir}</installDir>
</zipUrlInstaller>
</container>
To:
<container>
<containerId>${cargo.container}</containerId>
<home>${cargo.container.home}</home>
</container>
You can also . deploy to a running instance of Tomcat with Cargo
What does "basic" and "modular" mean when it comes to AppFuse 2.x archetypes?
Basic archetypes are meant for developing web applications with no re-usable backend. This is the recommended archetype to use with AppFuse
2.x. The assume you're using this archetype. Tutorials
Unlike Ant, Maven requires you to have a different "module" for each artifact you want to produce (i.e. JAR or WAR). This is what the modular
archetypes are for. If you're an experienced Maven 2 user, you might consider this archetype. It's also useful if you need a backend that can be
used by multiple clients.
How do I tell IDEA to ignore deployment descriptors when compiling?
Right-click on the file in the messages window and choose "Exclude From Compile".
How can I export my database using DbUnit?
Running will export your database to . You can override the destination location by passing in a mvn dbunit:export target/dbunit/export.xml
parameter: -Ddest
mvn dbunit:export -Ddest=sample-data.xml
How can I change my AppFuse-generated project to use iBATIS or JPA?
As of AppFuse 2.0 M5+, it's as easy as changing your changing the property in your root to or ( <dao.framework> pom.xml ibatis jpa
in 2.0 M5). For further instructions, please see the and tutorials. jpa-hibernate JPA iBATIS
Is there any documentation that describes what all the filters do in web.xml?
See the for a list of what each filter in web.xml is used for. Web Filters Reference Guide
How do I configure LDAP Authentication?
See the page for a sample configuration. LDAP Authentication
How do I debug my application when it's running in Jetty?
Dan Allen has a nice writeup of how to do . remoting debugging with Jetty
How do I make Jetty start on a specific port?
There are two easy methods depending on whether you want the change to be permanent (i.e. each time you run 'mvn jetty:run-war' or a manual
port change.
Permanent: In your project pom.xml look for the plugin with the artifactid 'maven-jetty-plugin' and add the <connectors> elements to it:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.5</version>
<configuration>
...
<connectors>
<connector implementation= > "org.mortbay.jetty.nio.SelectChannelConnector"
<port>8081</port>
</connector>
</connectors>
</configuration>
</plugin>
Manual: run ' ' mvn jetty:run-war -Djetty.port=8081
When saving Chinese or Japanese characters in a form, I'm getting
java.sql.SQLException: Incorrect string value. How do I solve this?
To solve this problem, you'll need to drop and recreate your database with UTF-8 enabled. The following example shows how to do this with a
database named : myproject
mysqladmin -u root -p drop myproject
mysqladmin -u root -p create myproject
mysql -u root -p
<enter password>
mysql> ALTER DATABASE myproject CHARACTER SET utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
DEFAULT COLLATE utf8_general_ci;
mysql> exit
You can also configure MySQL to use UTF-8 by default by adding the following to your c:\Windows\my.ini or /etc/my.cnf (on Unix) file:
[mysqld]
default-character-set=utf8
When using jetty:run, CSS and JavaScript files are locked - how can I fix this?
Jetty buffers static content for webapps such as html files, css files, images etc and uses memory mapped files to do this if the NIO connectors
are being used. The problem is that on Windows, memory mapping a file causes the file to be locked, so that the file cannot be updated or
replaced. This means that effectively you have to stop Jetty in order to update a file.
The problem is explained more in . To fix this, add a line with <webDefaultXml> to your maven-jetty-plugin configuration: Jetty's documentation
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.5</version>
<configuration>
...
<webDefaultXml>src/main/resources/webdefault.xml</webDefaultXml>
</configuration>
The default webdefault.xml file is found in the at . Extract it to a convenient lib/jetty.jar org/mortbay/jetty/webapp/webdefault.xml
disk location and edit it to change useFileMappedBuffer to false:
<init-param>
<param-name>useFileMappedBuffer</param-name>
<param-value> </param-value> false
</init-param>
Using Struts, how can I dynamically add columns to a Table using a list of beans nested
in my table row data?
This is the scenario. You are presenting a list of your data on a standard mymodelList.jsp form, using the . Your data bean has Display tag library
an attribute that is a list of related data beans. In this scenario, you wish to display that related data in extra columns in your table. Here is one
way to achieve this.
The following code example assumes that your Action class has generated a list of parentBean objects and exposes that with a getParentBeans()
method that returns a List<ParentBean>. The ParentBean object includes an attribute that is a list of ChildBean objects.
Our simple beans have the following structure:
ParentBean
String: id
String: title
List<ChildBean> childBeans
ChildBean
String: id
String: name
Date: lastUpdated
... and the markup goes something like this...
parentBeanList.jsp
<%-- Normal page header and footer stuff excluded brevity --%> for
<display:table name= class= requestURI= parentBeans "parentBeans" "table" "" id=" " export="true"
25"> pagesize="
<%-- is a normal column displaying the attribute --%> this "ParentBean.title"
<display:column property= sortable= href= "title" " " true "editParentBean.html"
media= paramId= paramProperty= titleKey= /> "html" "id" "id" "parentBean.title"
<display:column property= media= titleKey= /> "title" "csv excel xml pdf" "parentBean.title"
<%-- Iterate through the childBeans list present and display a name and lastUpdated column if for
each --%>
<%-- We gain access to our parentBean's childBeans list using the #attr.parentBeans.childBeans
reference --%>
<s: test= > if "#attr.parentBeans.childBeans != && #attr.parentBeans.childBeans.size() > 0" null
<%-- IMPORTANT NOTE - in example, the List is actually implemented by a TreeMap (to this
facilitate sorting) so the
reference is to the list's method, otherwise the iterator will a Map "values()" return
object (containing
a key and your bean) rather than just the bean. If your childBeans list is a normal List
(eg ArrayList)
you'd simply put 'value= ' in the next line --%> "#attr.parentBeans.childBeans"
<s:iterator id= value= status= > "childBean" "#attr.parentBeans.childBeans.values()" "col"
<%-- Now, complete the display:column object. --%>
<display:column sortable= titleKey= > " " false "childbean.name"
<%-- Note, the refeence to $\{id/| in the next row is obtained by using the id
attribute value from
the <display:table tag (see above). In example, we edit a childBean by this
going to the
editor its ParentBean --%> for
<a href= > "editParentBean.html?id=$\{parentBeans.id/|"
$\{childBean.name/|
</a>
</display:column>
<display:column sortable= titleKey= > " " false "childbean.lastUpdated"
<fmt:formatDate value= pattern= /> "$\{lastUpdated/|" "$\{timePattern/|"
</display:column>
</s:iterator>
</s: > if
<%-- Paging and export properties excluded brevity --%> for
</display:table>
News
See , , and for more AppFuse propaganda. Articles Blogs Roadmap Presentations
Monday, April 4, 2011
AppFuse 2.1 Released!
Last changed Apr 04, 2011 10:10 by Matt Raible
Labels: release
The AppFuse Team is pleased to announce the release of AppFuse 2.1. This release includes upgrades to all dependencies to bring them
up-to-date with their latest releases. Most notable are JPA 2, JSF 2, Tapestry 5 and Spring 3. In addition, we've migrated from XFire to CXF and
enabled REST for web services. There's even a new archetype that leverages Enunciate to generate web service endpoints, appfuse-ws
documentation and downloadable clients. This release fixes many issues with archetypes, improving startup time and allowing jetty:run to be used
for quick turnaround while developing. For more details on specific changes see the . release notes
What is AppFuse?
AppFuse is an open source project and application that uses open source frameworks to help you develop Web applications
with Java quickly and efficiently. It was originally developed to eliminate the ramp-up time when building new web applications.
At its core, AppFuse is a project skeleton, similar to the one that's created by your IDE when you click through a wizard to
create a new web project. If you use , you can achieve zero-turnaround in your project and develop features JRebel with IntelliJ
without restarting the server.
Get Started Now
Release Details
now include all the source for the web modules so using jetty:run and your IDE will work much smoother now. The backend is still Archetypes
embedded in JARs, enabling you to choose with persistence framework (Hibernate, iBATIS or JPA) you'd like to use. If you want to modify the
source for that, or run "appfuse:full-source". add the core classes to your project
AppFuse comes in a number of different flavors. It offers "light", "basic" and "modular" and archetypes. Light archetypes use an embedded H2
database and contain a simple CRUD example. Light archetypes allow code generation and full-source features, but do not currently support
Stripes or Wicket. Basic archetypes have web services using CXF, authentication from Spring Security and features including signup, login, file
upload and CSS theming. Modular archetypes are similar to basic archetypes, except they have multiple modules which allows you to separate
your services from your web project.
AppFuse provides archetypes for JSF, Spring MVC, Struts 2 and Tapestry 5. The light archetypes are available for these frameworks, as well as
for Spring MVC + FreeMarker, Stripes and Wicket. You can see demos of these archetypes at . http://demo.appfuse.org
For information on creating a new project, please see the . QuickStart Guide
If you have questions about AppFuse, please read the or join the . If you find any issues, please report them on the mailing FAQ user mailing list
list or . create an issue in JIRA
Thanks to everyone for their help contributing patches, writing documentation and participating on the mailing lists.
We greatly appreciate the help from , particularly , , , and . Atlassian and Contegix are especially our sponsors Atlassian Contegix JetBrains Java.net
awesome: to the AppFuse project. Atlassian has donated licenses to all its products and Contegix has donated an entire server
by | | Posted at Apr 04, 2011 Matt Raible 0 comments Edit
Monday, November 15, 2010
AppFuse 2.1.0 Milestone 2 Released
Last changed Nov 15, 2010 16:39 by Matt Raible
Labels: release
The AppFuse Team is pleased to announce the 2nd milestone release of AppFuse 2.1. This release includes upgrades to all dependencies to
bring them up-to-date with their latest releases. Most notable are Spring 3 and Struts 2.1. This release fixes many issues with archetypes and
contains many improvements to support Maven 3. For more details on specific changes see the . 2.1.0 M2 release notes
What is AppFuse?
AppFuse is an open source project and application that uses open source frameworks to help you develop Web applications
quickly and efficiently. It was originally developed to eliminate the ramp-up time when building new web applications. At its core,
AppFuse is a project skeleton, similar to the one that's created by your IDE when you click through a wizard to create a new
web project. If you use , you can achieve zero-turnaround in your project and develop features without JRebel with AppFuse
restarting the server.
Get Started Now
Release Details
now include all the source for the web modules so using jetty:run and your IDE will work much smoother now. The backend is still Archetypes
embedded in JARs, enabling you to choose with persistence framework (Hibernate, iBATIS or JPA) you'd like to use. If you want to modify the
source for that, or run "appfuse:full-source". add the core classes to your project
AppFuse comes in a number of different flavors. It offers "light", "basic" and "modular" and archetypes. Light archetypes use an embedded H2
database and contain a simple CRUD example. In the final 2.1.0 release, the light archetypes will allow code generation like the basic and
modular archetypes. Basic archetypes have web services using CXF, authentication from Spring Security and features including signup, login, file
upload and CSS theming. Modular archetypes are similar to basic archetypes, except they have multiple modules which allows you to separate
your services from your web project.
AppFuse provides archetypes for JSF, Spring MVC, Struts 2 and Tapestry 5. The light archetypes are available for these frameworks, as well as
for Spring MVC + FreeMarker, Stripes and Wicket.
Please note that this release does not contain updates to the documentation. Code generation will work, but it's likely that some content in the
won't match. For example, you can use annotations (vs. XML) for Spring MVC and Tapestry is a whole new framework. I'll be working on tutorials
documentation over the next several weeks in preparation for the 2.1 final release.
For information on creating a new project, please see the . QuickStart Guide
If you have questions about AppFuse, please read the or join the . If you find bugs, please . FAQ user mailing list create an issue in JIRA
Thanks to everyone for their help contributing patches, writing documentation and participating on the mailing lists.
by | | Posted at Nov 15, 2010 Matt Raible 0 comments Edit
Thursday, November 19, 2009
AppFuse 2.1.0 Milestone 1 Released
Last changed Nov 19, 2009 22:42 by Matt Raible
Labels: release
The AppFuse Team is pleased to announce the first milestone release of AppFuse 2.1. This release includes upgrades to all dependencies to
bring them up-to-date with their latest releases. Most notable are , and Tapestry 5. Hibernate Spring
What is AppFuse?
AppFuse is an open source project and application that uses open source tools built on the Java platform to help you develop
Web applications quickly and efficiently. It was originally developed to eliminate the ramp-up time found when building new web
applications for customers. At its core, AppFuse is a project skeleton, similar to the one that's created by your IDE when you
click through a wizard to create a new web project.
Get Started Now
Release Details
now include all the source for the web modules so using jetty:run and your IDE will work much smoother now. The backend is still Archetypes
embedded in JARs, enabling you to choose with persistence framework (Hibernate, iBATIS or JPA) you'd like to use. If you want to modify the
source for that, or run "appfuse:full-source". add the core classes to your project
In addition, AppFuse Light has been and has archetypes available too. AppFuse provides archetypes for JSF, Spring MVC, converted to Maven
Struts 2 and Tapestry 5. The archetypes are available for these frameworks, as well as for Spring MVC + FreeMarker, Stripes and Wicket. light
Other notable improvements:
Added thanks to a patch from . Compass support Shay Banon
Upgraded from for Web Services. XFire to CXF
Moved Maven repository to for snapshots and releasing to Maven Central. There are no longer any Sonatype's OSS Repository Hosting
AppFuse-specific artifacts, all are available in central. Thanks to for this great service and its . Sonatype excellent repository manager
Upgraded to Canoo WebTest 3.0. Now if we could just get its moved to Codehaus. Maven Plugin
Added to AppFuse Light archetypes. Ajaxified Body
Infrastructure upgrades, including , , , and . Many thanks to and for JIRA 4 Confluence 3 FishEye 2 Bamboo 2 Crowd 1.6 Atlassian Contegix
their excellent products and services.
For more details on specific changes see the . release notes
Please note that this release does not contain updates to the documentation. Code generation will work, but it's likely that some content in the
won't match. For example, you can use annotations (vs. XML) for dependency injection and Tapestry is a whole new framework. I'll be tutorials
working on documentation over the next several weeks in preparation for Milestone 2.
AppFuse is available as several Maven archetypes. For information on creating a new project, please see the . QuickStart Guide
To learn more about AppFuse, please read Ryan Withers' . Igniting your applications with AppFuse
The 2.x series of AppFuse has a minimum requirement of the following specification versions:
Java Servlet 2.4 and JSP 2.0 (2.1 for JSF)
Java 5+
If you have questions about AppFuse, please read the or join the . If you find bugs, please . FAQ user mailing list create an issue in JIRA
Thanks to everyone for their help contributing code, writing documentation, posting to the mailing lists, and logging issues.
by | | Posted at Nov 19, 2009 Matt Raible 0 comments Edit
Thursday, November 5, 2009
A Letter to the AppFuse Community
Labels: status
I wrote a blog post titled "A Letter to the AppFuse Community" tonight to let y'all know what's going on with the AppFuse project and my thoughts
on its future. Don't worry, it's mostly good stuff. You can find it at the following URL:
http://raibledesigns.com/rd/entry/a_letter_to_the_appfuse
Thanks for your support,
Matt
by | | Posted at Nov 05, 2009 Matt Raible 0 comments Edit
Thursday, May 22, 2008
New Tutorials - External Sorting with Display Tag and Integrating Compass 2.0
Chris Barham has been a busy guy lately. Not only has he written a tutorial on integrating external sorting and pagination with the Display Tag,
but he's also written a tutorial on how to integrate Compass 2.0 into AppFuse. Check out the links below for more information:
AppFuse + DisplayTag: External Sorting and Paging Example
Integrating Compass 2.0 into AppFuse
Awesome work Chris.
by | | Posted at May 22, 2008 Matt Raible 0 comments Edit
Tuesday, May 13, 2008
New Documentation!
If you're looking for an excellent article explaining what AppFuse is, please see Ryan Withers' . For Igniting your applications with AppFuse
in-depth coverage of AppFuse and all its supporting frameworks, there's no better place to go than David Whitehurst's . Thanks to AppFuse Primer
both Ryan and David for their contributions to this project.
by | | Posted at May 13, 2008 Matt Raible 0 comments Edit
Sunday, May 11, 2008
AppFuse 2.0.2 Released
Last changed May 11, 2008 23:41 by Matt Raible
Labels: , release appfuse
The AppFuse Team is pleased to announce the release of AppFuse 2.0.2. This release includes upgrades to Spring Security 2.0, jMock 2.4, the
ability to customize code generation templates and many bug fixes.
For information on upgrading from 2.0.1, see the or . AppFuse 2.0.2 is available as a Maven archetype. For information Release Notes changelog
on creating a new project using AppFuse, please see the or the . QuickStart Guide Demos and Videos
The 2.0 series of AppFuse has a minimum requirement of the following specification versions:
Java Servlet 2.4 and JSP 2.0
Java 5+
If you've used AppFuse 1.x, but not 2.x, you'll want to read the . Join the if you have any questions. The FAQ user mailing list Maven Reference
has a map of Ant -> Maven commands. might also be useful if you've never used Maven before. Guide Maven for Newbies
Thanks to everyone for their help contributing code, writing documentation, posting to the mailing lists, and logging issues.
We greatly appreciate the help from , particularly , , , and . Atlassian and Contegix are especially our sponsors Atlassian Contegix JetBrains Java.net
awesome: to the AppFuse project. Atlassian has donated licenses to all its products and Contegix has donated an entire server
by | | Posted at May 11, 2008 Matt Raible 0 comments Edit
Wednesday, December 5, 2007
MarkMail and FishEye
We've recently added some some new features to the AppFuse project. The first is we've installed FishEye and Crucible (a code review tool) on
AppFuse's server at Contegix. We've used FishEye , but now we have it on our own servers. You can view it at: in the past
http://source.appfuse.org
The 2nd news item is that the good folks at (primarily Jason Hunter) has setup a kick-ass mailing list archive for us at: Mark Logic
http://appfuse.markmail.org
This is an easily searchable set of archives and goes all the way back to when our mailing list started back in March 2004. In the future, they hope
to provide RSS/Atom feeds and allow posting (like Nabble does). I've added a link to these archives to the page. mailing list
by | | Posted at Dec 05, 2007 Matt Raible 0 comments Edit
Wednesday, November 28, 2007
Integrating Crowd with AppFuse and Acegi
Last changed Nov 28, 2007 12:22 by Matt Raible
The good folks at Atlassian have written a nice tutorial on to create a nice SSO solution. is a integrating Crowd with AppFuse and Acegi Crowd
web-based single sign-on (SSO) tool that simplifies application provisioning and identity management. The AppFuse project uses it to maintain a
single user store for , (this site), and . It's worked for us. JIRA Confluence Bamboo awesome
by | | Posted at Nov 28, 2007 Matt Raible 0 comments Edit
Monday, November 26, 2007
AppFuse 2.0.1 Released
Last changed Nov 26, 2007 10:19 by Matt Raible
The AppFuse Team is pleased to announce the release of AppFuse 2.0.1. This release squashes a number of bugs and includes an upgrade to
Spring 2.5. To learn more about Spring 2.5's features, see InfoQ's article. What's New in Spring 2.5: Part 1
For information on upgrading from 2.0, see the or . AppFuse 2.0.1 is available as a Maven archetype. For 2.0.1 Release Notes changelog
information on creating a new project using AppFuse, please see the or the . QuickStart Guide Demos and Videos
The 2.0 series of AppFuse has a minimum requirement of the following specification versions:
Java Servlet 2.4 and JSP 2.0 (2.1 for JSF)
Java 5+
If you've used AppFuse 1.x, but not 2.x, you'll want to read the . Join the if you have any questions. The FAQ user mailing list Maven Reference
has a map of Ant -> Maven commands. might also be useful if you've never used Maven before. There is Guide Maven for Newbies some support
in this release. for Ant
Thanks to everyone for their help contributing code, writing documentation, posting to the mailing lists, and logging issues.
We greatly appreciate the help from , particularly , , , and . Atlassian and Contegix are especially our sponsors Atlassian Contegix JetBrains Java.net
awesome: to the AppFuse project. Atlassian has donated licenses to all its products and Contegix has donated an entire server
by | | Posted at Nov 26, 2007 Matt Raible 0 comments Edit
Thursday, September 20, 2007
Thanks goodness for free bandwidth
Last changed Sep 20, 2007 11:24 by Matt Raible
It's a good thing this project gets ! Looking at September's stats for (the site that hosts our Maven free bandwidth from Contegix static.appfuse.org
repo), we're averaging 2.15 GB per day. Thanks Contegix!
by | | Posted at Sep 20, 2007 Matt Raible 0 comments Edit
Tuesday, September 18, 2007
AppFuse 2.0 Released!
Last changed Sep 18, 2007 16:08 by Matt Raible
The AppFuse Team is pleased to announce the release of AppFuse 2.0!
The road to AppFuse 2.0 has been a long journey through Mavenland, annotations and generics. We're pleased to announce that we're finally
finished after 13 months of development. Thanks to all the developers, contributors and users for helping test, polish and prove that AppFuse 2 is
an excellent solution for developing Java-based applications. Your time, patience and usage of AppFuse has made it the strong foundation it is
today.
This release contains a number of bug fixes for AMP, an upgrade to Tapestry 4.1.3, the addition of Tacos, support for Oracle and changes to
prevent XSS attacks.
AppFuse 2.0 is available as a Maven archetype. For information on creating a new project using AppFuse, please see the or the QuickStart Guide
. Demos and Videos
If you've used AppFuse 1.x, but not 2.x, you'll want to read the . Join the if you have any questions. The FAQ user mailing list Maven Reference
has a map of Ant -> Maven commands. might also be useful if you've never used Maven before. There is Guide Maven for Newbies some support
in this release. for Ant
For more information, please see the . The 2.0 series of AppFuse has a minimum requirement of the following specification 2.0 Release Notes
versions:
Java Servlet 2.4 and JSP 2.0 (2.1 for JSF)
Java 5+
New features in AppFuse 2.0 include:
Maven 2 Integration
Upgraded WebWork to Struts 2
JDK 5, Annotations, JSP 2.0, Servlet 2.4
JPA Support
Generic CRUD backend
Full Eclipse, IDEA and NetBeans support
Fast startup and no deploy with Maven Jetty Plugin
Testable on multiple appservers and databases with Cargo and profiles
We appreciate the time and effort everyone has put toward contributing code and documentation, posting to the mailing lists, and logging issues.
We also greatly appreciate the help from , particularly , , , and . Atlassian and Contegix are our sponsors Atlassian Contegix JetBrains Java.net
especially awesome: to the AppFuse project. Atlassian has donated licenses to all its products and Contegix has donated an entire server
by | | Posted at Sep 18, 2007 Matt Raible 0 comments Edit
Tuesday, September 4, 2007
AppFuse 2.0 RC1 Released
Last changed Sep 05, 2007 10:38 by Matt Raible
Labels: , appfuse release
The AppFuse Team is pleased to announce the release of AppFuse 2.0 RC1!
This release marks a huge step in the march to releasing AppFuse 2.0. This release puts the finishing touches on the AppFuse Maven Plugin
(AMP), which offers CRUD generation, as well as the ability to change AppFuse from "embedded mode" to "full source" (like 1.x). In addition,
we've addressed over 100 issues in preparation for the final 2.0 release. We hope to fix any bugs related to this release and release 2.0 Final in
the next week or two.
The still represent how M5 works, but things have been simplified (now you don't need to run after ). videos appfuse:install appfuse:gen
AppFuse 2.0 is available as a Maven archetype. For information on creating a new project using this release, please see the or QuickStart Guide
the . Hello World video
If you've used AppFuse 1.x, but not 2.x, you'll want to read the . Join the if you have any questions. The FAQ user mailing list Maven Reference
has a map of Ant -> Maven commands. might also be useful if you've never used Maven before. There is Guide Maven for Newbies some support
in this release. for Ant
For more information, please see the . The 2.0 series of AppFuse has a minimum requirement of the following 2.0 RC1 Release Notes
specification versions:
Java Servlet 2.4 and JSP 2.0 (2.1 for JSF)
Java 5+
We appreciate the time and effort everyone has put toward contributing code and documentation, posting to the mailing lists, and logging issues.
We also greatly appreciate the help from , particularly , , , and . Atlassian and Contegix are our sponsors Atlassian Contegix JetBrains Java.net
especially awesome: to the AppFuse project. Thanks Atlassian has donated licenses to all its products and Contegix has donated an entire server
guys - you rock!
Update: I've uploaded a to java.net. This PDF contains the relevant pages from the wiki that 247-page PDF version of the RC1 documentation
help you develop with AppFuse 2.0.
by | | Posted at Sep 04, 2007 Matt Raible 0 comments Edit
Friday, August 10, 2007
AppFuse vs. Grails vs. Rails
AppFuse often gets compared to and when folks are talking about full-stack productivity-enhancing frameworks. If you'd like Ruby on Rails Grails
to learn my opinion on this, please read on my Raible Designs blog. AppFuse vs. Grails vs. Rails
by | | Posted at Aug 10, 2007 Matt Raible 0 comments Edit
Friday, July 27, 2007
New Server at Contegix
Last changed Jul 27, 2007 08:28 by Matt Raible
Contegix has been gracious enough to donate a server to the AppFuse project. Not only do we get a whole server to ourselves, but they're
managing it and making sure it stays up all the time.
I've moved onto their servers, as well as Confluence. Confluence is at wiki.appfuse.org and as DNS entries begin to change, JIRA appfuse.org
will switch to this server. apache.appfuse.org is the new "static" server and the DNS change has started for that as well. demo1.appfuse.org is the
new location of and DNS changes are pending. demo.appfuse.org
If you have a moment, please play a bit with wiki.appfuse.org, apache.appfuse.org and demo1.appfuse.org to see if you see anything strange.
In addition to our normal services, we've also got received new licenses from Atlassian for (SSO) and (Continuous Integration Crowd Bamboo
server). Since Atlassian's tools are built on a lot of the same software that AppFuse uses, I feel like we're somewhat eating our own dogfood.
We merged the accounts for JIRA and Confluence into Crowd. If you had accounts in both, JIRA won (as long as you had the same username,
etc.).
The builds for AppFuse 2.x are still done by , but I hope to change this in the near future. If someone has time to fiddle with Bamboo in the Hudson
next few days - let me know and I'll give you appropriate permissions.
Thanks Contegix - you guys rock!
by | | Posted at Jul 27, 2007 Matt Raible 0 comments Edit
Articles
As of January 2007, no articles have been written about AppFuse 2.0. The good news is this site has a plethora of information that should serve
you well. If you have trouble finding anything, please . let us know on the mailing list
AppFuse 1.x Articles
AppFuse: Start Your J2EE Web Apps - AppFuse is a web application to accelerate developing J2EE web applications. It's based on open
source tools such as Hibernate, Spring, and Struts. It also provides many out-of-the-box features such as security and user management.
Creator Matt Raible provides an overview of its history and features.
Seven simple reasons to use AppFuse ( ) - Getting started with open source tools for the Java platform such as Spring, Chinese
Hibernate, or MySQL can be difficult. Throw in Ant or Maven, a little Ajax with DWR, and a Web framework say, JSF and you're up to
your eyeballs just trying to configure your application. AppFuse removes the pain of integrating open source projects. It also makes
testing a first-class citizen, allows you to generate your entire UI from database tables, and supports Web services with XFire.
Furthermore, AppFuse's community is healthy and happy and one of the few places where users of different Web frameworks actually
get along.
In addition, there's a with no English translation. Chinese Article
Blogs
The page has a list of AppFuse-related blogs from developers and users.
Raible Designs
( is a UI Architect specializing in open source web frameworks. for Matt Raible Contact me
rates.)
Livin' it up in Vegas at TSSJS 2011
Adding Search to AppFuse with Compass
WebSockets with Johnny Wey at Denver JUG
JSR 303 and JVM Web Framework Support
Upgrading to JSF 2
Fixing XSS in JSP 2
Upcoming Conferences: TSSJS in Las Vegas and 33rd Degree in Krak
Implementing Ajax Authentication using jQuery, Spring Security and HTTPS
Integration Testing with HTTP, HTTPS and Maven
Implementing Extensionless URLs with Tapestry, Spring MVC, Struts 2 and JSF
Sanjiv Jivan's Blog
(Yet Another J2EE Blog)
Smart GWT 2.4 Released
Smart GWT Touch & Mobile support
Smart GWT 2.2 Released
DeltaWalker : My new favorite OSX diff/merge tool
St. Partricks Day Smart GWT teaser
Smart GWT 2.1 Released with lots of goodies
Smart GWT 2.0 Released with Enterprise Blue skin
SmartGWT 1.3 Released
When CSV exports should not always be comma separated
Solving the DTO / Anemic Domain Model dilemma with GWT
David L. Whitehurst
(Quality Software Development Consultant)
Rule Language
What do you really think of Cloud Computing?
Benefits of a Continuous Build
Version Control Management
Created by Matt Raible
Created by Matt Raible
Created by Matt Raible
An AppFuse-Like JSON-to-Flex example
Running WebSphere Security local within Rational Application Developer (RAD)
Dear Mr. Jim Goodnight (2nd Edition)
Java Guys Try Ruby on Rails
Looking for a Remote Architect or Team Lead?
CAS'ifying the JBoss jmx-console
Rambling about...
(Everyting and nothing
in particular.)
Triptance.com is a candidate for BBVA Open Talent awards
How to startup in Spain: Tetuan Valley Startup School
Getting head dumps on OutOfMemoryException
Naive scripts for mirroring P2 repositories
First impressions on Eclipse 3.5 RC4, IAM, Scala IDE and Lift
Saving different Active Record classes in a single transaction
Why are my bundles not working?
Optimizing Oracle and Hibernate performance, how it turned out
Optimizing Oracle and Hibernate performance
IAM has two new committers
Presentations
This page has a list of articles and presentations about AppFuse
What's new in AppFuse 2.0
Seven Simple Reasons to use AppFuse
Migrating from Struts 1 to Struts 2
What's New in AppFuse 2.0
The 2.0 version of AppFuse is designed to make developing Java web applications with Spring much easier. By using
and leveraging Maven 2, users will be able to quickly add/remove dependencies, as well as develop their applications quickly and efficiently from
their favorite IDE. This release will includes a move to annotations, JSP 2.0 and Spring 2.0.
This presentations covers what's new in AppFuse 2.0, as well as describe experiences migrating from Ant to Maven, Spring 1.x to 2.0, and
leveraging annotations for Java development.
View Presentation
Seven Simple Reasons to Use AppFuse
AppFuse is an open source project/application that uses best-of-breed Java open source tools to help you develop web
applications quickly and efficiently. Not only does it provide documentation on how to develop light-weight POJO-based applications, it includes
features that many applications need out-of-the-box: authentication and authorization, remember me, password hint, skinnability, file upload, Ajax
libraries, signup and SSL switching. This is one of the main features in AppFuse that separates it from the other "CRUD Generation" frameworks
like Ruby on Rails, Trails and Grails. AppFuse is already an application when you start using it, which means code examples are already in your
project. Furthermore, because features already exist, the amount of boiler-plate code that most projects need will be eliminated.
In this session, you will learn Seven Simple Reasons to Use AppFuse. If you don't use it to start your own projects, hopefully you will see that it
provides much of the boiler-plate code that can be used in Java-based web applications. Since it's Apache Licensed, you're more than welcome
to copy/paste any code from it into your own applications.
View Presentation
Migrating from Struts 1 to Struts 2
Struts has outgrown its reputation as a simple web framework and has become more of a brand. Because of this, two
next generation frameworks are being developed within the project: Shale and Action 2.0. Action 2.0 is based on WebWork, and though its
backing beans are similar to JSF, its architecture is much simpler, and easier to use.
Migrating to Struts Action 2.0 is more about unlearning Struts than it is about learning the "WebWork Way". Once you understand how simple
WebWork is, you'll find that Struts Action 2.0 is a powerful framework that supports action-based navigation, page-based navigation,
AOP/Interceptors, components and rich Ajax support.
Come to this session to see code comparisons and learn about migration strategies to use the kick-ass web framework of 2006.
View Presentation
Project Information
AppFuse provides the open-source community with an excellent example of an application that can be used to kickstart the initial creation of a
professional web application. Everything is configured and ready-to-run as soon as it's downloaded. The single most important goal of AppFuse is
to provide a foundational application where you don't have to worry about configuring versions, jar dependencies, or integrating bleeding-edge
Java technologies. That's where AppFuse provides some comfort. AppFuse solves many integration issues before you fall short trying to do it all
by yourself. All of the hot new Java technologies are being considered for inclusion into AppFuse and only the best of breed will finally make the
public releases.
Visit here often and please keep an eye on AppFuse. This is where Java development begins. And while AppFuse is free, it takes long hours and
hard work, so get the source, create a new project, and log any bugs you find in the source we gave you at our web site. JIRA issue tracking
History
In late 2002 Matt Raible, a software developer, had a vision. This vision was AppFuse. Matt began with sample application concepts or
architectures that demonstrate the integration of bleeding-edge Java/J2EE technologies that were available to the open-source community. The
application has evolved now from a pattern-driven Struts-Xdoclet application he was using for a book chapter he was authoring on Struts to a
professional web application that he implemented at Comcast . Like most developers or software managers, we like things that work. AppFuse is
the jumpstart application that works. AppFuse takes a good number of complicated technologies and integrates them in a single application in a
modular fashion. This makes it easy to use. And while you're still learning Hibernate or Spring, e.g. you're not waiting on the application to work or
come alive.
Most model or archetype projects are simplistic in nature. Example projects are normally simple because you want to copy them for your next
project. This is where AppFuse breaks all the rules. Matt developed this complex model application to do it all. But, Matt's logic was different. For
example, if you don't need a secure login for your users, you just remove that part. Or, if you prefer to use iBatis instead of Hibernate, you can
because an iBatis implementation is there and it works just like the Hibernate one.
AppFuse has become the model application that Matt Raible has perfected over the years with help from the open-source public. That's you.
Please and give it a try for your next web project. download it
Timelines
Below are history and roadmap timelines for the AppFuse project. They were created with . You can read more about AppFuse's OmniGraffle
history in . AppFuse: Start Your J2EE Web Apps
AppFuse History
Future Roadmap
1.
2.
3.
4.
5.
6.
7.
1.
2.
3.
4.
Developer Guide
Committer Information
Below is a list of things you'll need to do after you've become an AppFuse committer.
Create an account on . Subscribe to the , and mailing lists. https://appfuse.dev.java.net users developers issues
Create an account in , you should be able to use it to login to and and . We use to manage SSO JIRA Confluence Bamboo FishEye Crowd
across the different apps.
Once you've been granted the Developer role on java.net, you should be able to checkout the source using the following command. See
the page if you need help using Subversion. Source Repository
svn checkout https://appfuse.dev.java.net/svn/appfuse/trunk appfuse
Install MySQL and an SMTP Server as described in the . QuickStart Guide
Execute the following command and grab a beer. Maven will download artifacts, compile, test and run all the Canoo Web tests in Tomcat.
cd appfuse
mvn install
To test archetypes, run from the root directory. ant -f archetypes/build.xml
To test , run from the root directory. AMP ant -f plugins/appfuse-maven-plugin/build.xml
If everything passes, you're ready to start contribute some code! The following steps should help you understand the project better.
In 2.0.x, AppFuse uses a war-overlay system where is a WAR that's overlayed into other WARs ( ). The web/common web/*
allows WAR projects to depend on the classpath of their dependent WARs. It's likely we'll maven-warpath-plugin move away from this in
. Because of this setup, when testing web modules, you have to use instead of . 2.1 mvn jetty:run-war mvn jetty:run
Read and . Project Policies Continuous Integration
Add your picture and bio to the page. Project Team
Please ask any questions you may have on the developers mailing list.
Deploying Snapshots
To deploy AppFuse snapshots to , create a ~/.m2/settings.xml file with the following settings: http://static.appfuse.org/repository
1.
2.
3.
<?xml version= encoding= ?> "1.0" "UTF-8"
<settings>
<servers>
<server>
appfuse-snapshots <id> </id>
username <username> </username>
password <password> </password>
</server>
</servers>
</settings>
Then you can run "mvn deploy" from the AppFuse project. Please contact Matt Raible for the username and password.
Deploying Plugin Websites
To deploy AppFuse plugins' documentation to , create a ~/.m2/settings.xml file with the following settings: http://static.appfuse.org/plugins
<?xml version= encoding= ?> "1.0" "UTF-8"
<settings>
<servers>
<server>
appfuse-plugins <id> </id>
username <username> </username>
password <password> </password>
</server>
</servers>
</settings>
Then you can run "mvn deploy" from the "plugins" module. Please contact Matt Raible for the username and password.
Currently deployed plugin websites include the and the . AppFuse Plugin WarPath Plugin
Continuous Integration
Bamboo is used for continuous integration on the AppFuse project. You can view the current status of the build at the following URL:
http://builds.appfuse.org
If you'd like to be notified of build status, you can subscribe to its . RSS feed
Project Policies
The following policies and procedures are intended to ensure that AppFuse will continue to achieve its project objectives and support the
community in the context of an expanding development team.
This project uses . Please log a task in JIRA for any changes you make to SVN, with the exception of very minor changes that users JIRA
are unlikely to ever be interested in searching for and/or the change affects code that has never been in an officially released version of
the project (e.g. ongoing changes to a new feature in SVN HEAD that hasn't been released previously).
Any users running from SVN HEAD are warmly encouraged to ( ) so that they can keep an eye subscribe to the commits mailing list RSS
on commit comments. Developers are encouraged to join this mailing and read the commit comments. If anyone has a concern with any
commit, please raise it on ( ) so that the broader community can participate. Alternatively, contact the author of the the dev mailing list RSS
change directly if you think that would be more appropriate or diplomatic.
Please make your commit comments informative, yet not too detailed. If you include the JIRA issue number (i.e. APF-200), the changes
will show up under the "FishEye" link in JIRA. Detailed comments are ideally placed in the JIRA task. In the case of a contribution by a
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
non-developer, please use the SVN commits to reflect who provided the contribution and add that person's name to /pom.xml in the
contributors section. If the contributors section does not list the name of someone who has contributed accepted code, please add them.
If you add a major new feature, please announce it on the developers mailing list. That way people using the project have an idea of what
is coming up in the next release, and any implementation-specific comments can be received prior to the first release when users will
start expecting some degree of consistency and stability. It also encourages people to try out your new feature.
Until we add some sort of source formatting (i.e. Jalopy), please follow Sun's . In other words, curly braces on Code Conventions for Java
the same line and 4 spaces instead of tabs.
The /sandbox can be used to obtain feedback from fellow developers and the community about your code, general approach or new
ideas. If you have SVN rights, please use /sandbox instead of emailing ZIP files to other developers for feedback. The community should
understand that code in the sandbox is unsupported, subject to refactoring, may not have any unit tests, and may be removed at any
time. The /sandbox will never be included in official releases. It's a "scratching pad" only.
Never check in code if the unit tests fail. This means, at minimum, successfully running "mvn" from the root directory. Always name your
unit test classes so they end in "*Test" - this ensures that Maven picks them up. If there is code in SVN which you didn't write and it is
breaking the unit tests, please correct it yourself - don't leave SVN "broken" whilst waiting for the responsible developer to address it (the
delay causes confusing and long-running threads on the list and forum). You can always rollback to the previous working version if in
doubt of how the class works (just remember to comment the commit appropriately and let the author know).
Please update the Reference Guide, Tutorials and JavaDocs for any new major features. The JavaDocs should always be correct. The
reference guide may be kept updated with less rigor, although please briefly discuss any major new features.
Developers should try to monitor the and mailing lists. RSS feeds are available for both of these lists via . The user list user issues Nabble
is very active, and it takes a lot of work if not shared around. Please don't hesitate to reply to users. Please read Kathy Sierra's How to
for advice on how we can make the AppFuse Community a great place to be. Build a User Community
You should feel free to put to vote any proposed new developers. New developers should firstly be encouraged to attach patches to JIRA
tasks to illustrate their understanding of the project, or, if they're long-time users, they might be given access without this JIRA stage if
they're undertaking a major new feature.
Developers should be subscribed to the developer mailing list. Obviously it would take significant time to read every thread, but reading
the high priority messages (as indicated by the subject line) is needed to ensure we all have a way of communicating.
Please do not hesitate to assign yourself any JIRA task that is unassigned, or assigned to me and not in the "In Progress" status. Also
feel free to approach fellow developers to volunteer to work on tasks they might be assigned but haven't started.
No code in SVN is "sacred". If you have a good idea or refactoring for an area of code that someone else wrote, raise it on developer list
or contact the author directly. Please don't commit changes to such code unless it is a unit test failure correction, or you've firstly raised it
on the developer list or directly with the author.
People's priorities are ever-changing, and we're all short on time. For this reason it's perfectly understandable that over time developers
will move on to other things. This is not a negative reflection in any way - just part of any long-term project. If a developer no longer has
the time or inclination to participate in the project, please send an email to dev@appfuse.dev.java.net or myself. I will remove the SVN
rights and reassign any JIRA tasks. Importantly, this helps find a new maintainer of the former developer's code (or, in very extreme
cases, their code might be relocated to the sandbox or removed).
Keep the warm community spirit. The AppFuse community is a nice place to be - especially compared with some of the other open
source communities out there where people are abused, ignored, insulted or excluded. No policy or procedure (including those above)
should ever compromise operating in a considerate and diplomatic manner that respects the dignity of each individual member of the
community. If in doubt, please contact me directly first. If I am ever guilty of this, please let me know and I will correct myself.
Thanks for your help in connection with the above. If you have any suggestions for improving these policies and procedures, please use the
developer list to raise them.
Matt Raible
Project Admin
Release Process
To keep this list current, it is that release managers refer to and follow this list each time a distribution is created. If strongly recommended
any of the steps need to be amended, then please update the list.
1
Review for any issues without a fix version set, and for any issues that should be resolved for the pending release. JIRA
2
Delete the appfuse artifacts in your local Maven2 repository and obtain a fresh checkout:
svn co https://svn.java.net/svn/appfuse~svn/trunk appfuse-#-#
Make sure and disable to ensure artifacts are not deployed during a release. Bamboo's deploy plan
3
Find and replace #.#.#-SNAPSHOT in build.xml and *.java. Find and replace <appfuse.version>#.#.#-SNAPSHOT</appfuse.version> with
<appfuse.version>#.#.#</appfuse.version>. Use "Preparing for #.#.# Release" as the commit message.
Make sure your MAVEN_OPTS environment variable has at least 128MB of memory and no debugging options. An
ideal setting is . -Xms128M -Xmx256M
4
Run the Maven Release Plugin to prepare the release:
This may fail because AppFuse plugins and dependencies can't be found. Run the following command to fix this
problem.
mvn install -DskipTests -f target/checkout/pom.xml
6
Run the Maven Release Plugin again - using the same command you did in Step 5 (installing plugins again is unnecessary).
7 Review and Close the Use "Staged release of AppFuse #.#.#." as the Close message. Promote the release to Staged Release AppFuse
after closing. Releases
8
Update with tag/release date; Update with new version; Create new release notes page, and link to prior release JIRA QuickStart Guide
page and JIRA filters. Add News story with link to JIRA Release Notes and Upgrade Guide.
9
Export the Confluence documentation as a PDF and upload to java.net.
10
Create a bundle of all the dependencies used by AppFuse and upload to java.net.
11
Update demos on demo.appfuse.org.
12
Find and replace #.#.# with #.#.#-SNAPSHOT in build.xml and *.java. Find and replace <appfuse.version>#.#.#</appfuse.version> with
<appfuse.version>#.#.#-SNAPSHOT</appfuse.version>. Use "Preparing for next development iteration" as the commit message.
13
Deploy the new snapshot from the AppFuse trunk (with the latest POMs):