首页 > 应用开发 > Java > APPFuse's FAQ
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+.
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
com.company.app.dao -> Dao Interfaces
com.company.app.dao.hibernate -> Hibernate Implementations
com.company.app.service -> Service Interfaces
com.company.app.service.impl -> Service implementation
com.company.app.webapp.action -> Struts Actions (this really depends on the framework you're using)
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 mvn jetty:run-war and point your browser to http://localhost:8080/
you will see that you have a fully fledged AppFuse project present. If you need to change any of the files in the web project, simply run mvn war:inplace in the web project to populate the src/main/webapp source directory. You will need to delete WEB-INF/lib and WEB-INF/classes/struts.xml (if you're using Struts) after doing this.
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 how to modify core classes. If you'd like to convert your project so it doesn't rely on AppFuse dependencies and includes AppFuse's source instead, run mvn appfuse:full-source.
If you create a project using one of the basic archetypes in M5 and then run mvn appfuse:full-source, you can use a modified version of AppFuse Light's build.xml to build/test/deploy your project. Below are the steps needed to add Ant support to a basic archetype:
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.
AppFuse 2.x requires Java 5 for development, but not for deployment. You should be able to use the Retrotranslator Plugin
to convert your WAR to be 1.4-compliant.
If you would like change the following heading:
AppFuse
Providing integration and style to open source Java
Change src/main/resources/ApplicationResources.properties and change values for the webapp.name and webapp.tagline keys. To modify the "Your Company Here" text and its URL in the footer, you'll need to modify the company.name and company.url in this same file.
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 target/YOUR_APP_NAME/ directory.
If you run mvn integration-test, the Maven Cargo plugin will download and install Tomcat and run the integration tests against it. If you want to see your project running in a server, you have two options:
You can also add the Maven 2 Tomcat Plugin
to your pom.xml and use mvn tomcat:run and mvn tomcat:run-war.
org.codehaus.mojo tomcat-maven-plugin /
If you want to change Cargo
to point to an existing instance of Tomcat, you should be able to change the bottom of pom.xml from:
${cargo.container} ${cargo.container.home} ${cargo.container.url} ${installDir}
To:
${cargo.container} ${cargo.container.home}
You can also deploy to a running instance of Tomcat with Cargo
.
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 tutorials assume you're using this archetype.
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.
Right-click on the file in the messages window and choose "Exclude From Compile".
Running mvn dbunit:export will export your database to target/dbunit/export.xml. You can override the destination location by passing in a -Ddest parameter:
mvn dbunit:export -Ddest=sample-data.xml
As of AppFuse 2.0 M5+, it's as easy as changing your changing the
See the Web Filters Reference Guide for a list of what each filter in web.xml is used for.
See the LDAP Authentication page for a sample configuration.
Dan Allen has a nice writeup of how to do remoting debugging with Jetty
.
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
org.mortbay.jetty maven-jetty-plugin 6.1.5 ... "org.mortbay.jetty.nio.SelectChannelConnector"> 8081
Manual: run 'mvn jetty:run-war -Djetty.port=8081'
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 -pmysql> 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:Windowsmy.ini or /etc/my.cnf (on Unix) file:
[mysqld] default-character-set=utf8
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 Jetty's documentation
. To fix this, add a line with
org.mortbay.jetty maven-jetty-plugin 6.1.5 ... src/main/resources/webdefault.xml
The default webdefault.xml file is found in the lib/jetty.jar at org/mortbay/jetty/webapp/webdefault.xml. Extract it to a convenient disk location and edit it to change useFileMappedBuffer to false:
useFileMappedBuffer false
This is the scenario. You are presenting a list of your data on a standard mymodelList.jsp form, using the Display tag library
. Your data bean has 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
Our simple beans have the following structure:
... and the markup goes something like this...
for brevity --->
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/48033/viewspace-1004414/ ,如需转载,请注明出处,否则将追究法律责任。