AppFuse项目笔记(1)

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: AppFuse项目笔记(1)                                       一、Appfuse简介 Appfuse是Matt Raible 开发的一个指导性的入门级J2EE框架,它对如何集成流行的Spring、Hibernate、ibatis、struts、Xdcolet、junit等基础框架给出了示范,最新的1.7版更是提供了对Taperstry和JSF的支持。

AppFuse项目笔记(1)
                                      

一、Appfuse简介

Appfuse是Matt Raible 开发的一个指导性的入门级J2EE框架,它对如何集成流行的Spring、Hibernate、ibatis、struts、Xdcolet、junit等基础框架给出了示范,最新的1.7版更是提供了对Taperstry和JSF的支持。在持久层,AppFuse采用了Hibernate O/R映射工具(http://www.hibernate.org);在容器方面,它采用了Spring Framework(http://www.springframework.org)。用户可以自由选择Struts、Spring/MVC,Webwork,Taperstry、JSF这几个web框架。采用TDD的开发方式,使用JUnit测试各层,甚至测试 jsp 输出的 w/o 错误。为了简化开发,预定义好了一套目录结构、基类、用来创建数据库、配置Tomcat、测试部署应用的 Ant 任务,帮助快速自动生成源程序和自动维护部分配置文件。

参考资料:
https://appfuse.dev.java.net/可以下载Appfuse,目前的版本是1.7。
Appfuse的参考资料和文档可以在http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse查看。

二、Appfuse框架快速入门

AppFuse项目的主要目的是帮助开发人员减少在开始一个项目时所要做的工作。以下是使用它新建一个项目的基本步骤:

1、下载或从CVS (cvs -d :pserver:guest@cvs.dev.java.net:/cvs co appfuse)检出appfuse最新版本之源码。

2、安装J2SE 1.4+, 正确设置JAVA_HOME环境变量, 安装Ant 1.6.2+, 设置ANT_HOME环境变量。

3、安装MySQL 3.23.x+ (建议使用 4.1.7版本)和Tomcat 4.1.x+ (建议使用 5.0.28版本),设置CATALINA_HOME环境变量指向你Tomcat安装目录。

注意: 如果你准备使用MySQL 4.1.7,那么你必须将其默认的字符集设置为UTF-8字符集,并且将其默认的表类型设置为InnoDB类型。也就是说,你要在你的c:\Windows\my.ini 或者/etc/my.cnf 文件中添加以下几行:
[mysqld]
default-character-set=utf8
[mysqld]
default-table-type=innodb

4、安装一个本地的SMTP服务器,或者如果你已经有一个可用的SMTP服务器的话,你可以去修改mail.properties (在web/WEB-INF/classes目录下) 和build.properties (在根目录下 -- 为 log4j信息) 以指向你的SMTP服务器 - 默认地它是指向你的本机的SMTP服务器的。

5、将lib/junit3.8.1/junit.jar文件拷贝到$ANT_HOME/lib目录下。

6、执行 ant new -Dapp.name=YOURAPPNAME -Ddb.name=YOURDBNAME 命令。这将创建一个名为“YOURAPPNAME”的目录。

警告: 该命令对于某些app.name值将不执行 - 不要使用 "test",任何包含 "appfuse" 在其中的名你,或者任何以数字、两个存折号(-) 等等混合出来的名称。

7、转到新的目录,执行ant的setup任务创建数据库,同时将你的应用发布到Tomcat服务器上。只有当你的root用户没有口令建库的任务才会工作。你也可以在需要的时候打开build.properties文件去更改这root用户的口令。如果你想进行测试并且希望了解是否所有方面均可以工作完好,那么你可以执行ant的test-all任务进行全面的测试 -当然前提是当你做测试的时候先将Tomcat服务器停止。

8、执行ant的test-reports任务 - 当这个任务执行完后,会有一条消息告诉你如何查看那些产生的测试报告。

当你确定你通过以上步骤配置好你的AppFuse开发环境后 - 下面你需要做的事就是学习一下指南来了解如何使用 AppFuse 进行你的开发。

可选择的安装

如果你愿意选择用iBATIS做为你的持久层框架,请专门去看一下extras/ibatis目录下的 README.txt 文件。
如果你愿意选择用Spring做为你的WEB层框架,请专门去看一下extras/spring目录下的 README.txt 文件。
如果你愿意选择用WebWork做为你的WEB层框架,请专门去看一下extras/webwork目录下的 README.txt 文件。
如果你愿意选择Tapestry做为你的web层框架,请专门去看一下extras/tapestry目录下的 README.txt 文件。
如果你愿意选择JSF做为你的web层框架,请专门去看一下extras/jsf目录下的 README.txt 文件。
 
如果你希望你能够通过脚本来自动地完成创建和测试,那么可以参考以下的脚本:
rm -r ../appfuse-spring
ant new -Dapp.name=appfuse-spring -Ddb.name=ibatis
cd ../appfuse-spring
ant install-ibatis install-springmvc
cd extras/ibatis
ant uninstall-hibernate
cd ../..
ant setup
ant test-all test-reports

如果你并不想安装iBATIS, Spring MVC 或者 WebWork,在你将你的项目放入代码控制仓库前你应该删除掉它们在extras目录中的安装内容。

--------------------------------------------------------------------------------


通常当你完成了以上所有步骤并使它们可以工作后,最可能的事是你会希望把“org.appfuse”包名,改为类似“com.company”这样的包名。现在做这件事已经非常简单了,所有你需要做的事就是下载一个改包名的工具,看看它的README文件,以了解它的安装和使用。

注意: 使用这个工具前你最好是将你的项目做一个备份,从而保证能够恢复它。

如果你将org.appfuse.webapp.form包改为如test.web.form这样的包名,你得同时去修改一下src/service包中的ConverterUtil类,getOpposingObject方法是你的朋友,让我们来看一下:

name = StringUtils.replace(name, "model", "webapp.form");
name = StringUtils.replace(name, "webapp.form", "model");

三、AppFuse 开发指南

如果你已经下载了AppFuse并且想在你的机器上安装它,你最好按照快速入门中的步骤进行安装。一旦你已经将所有的内容安装好后,以下的指南是你学习如何使用AppFuse进行开发的最好的教程。

注意: 这个开发指南在AppFuse的发布版本中同样包含一份,如果你想更新在你的工程中的那份拷贝(它在docs目录中),可以通过执行 "ant wiki"来完成。

对于AppFuse 1.6.1, 你能够本指南中告诉你的方法生成大部分代码。如果你正在使用的是Struts+Hibernate这样一个组合,你甚至可以完全生成它们。而如果你的web层框架选择了Spring或者WebWork就不那么幸运了, 对于它们来说要写一个自动化的安装脚本存在许多困难,所以你就不得不自己动手来配置那些Controllers和Actions了。这主要是因为我没有对这些web层框架使用XDoclet,同时也是由于使用Ant工具作为安装工具的局限性所致。自动生成代码的工具我称之为 AppGen ,我在 Part I 中讲解如何使用它。

Part I: 在AppFuse中创建新的 DAOs 和对象 - 这是一个关于如何创建一个基于数据为中表的Java对象以及如何创建Java类从而持久化对象到数据库中的教程。

1、关于这个指南:

本指南将向你展示如何在数据库中创建一个新的表,以及如何创建访问这个表的Java代码。

我们将创建一个对象和一些其他的类来将这个对象持久化(保存、装载、删除)到数据库中。用 Java 的语言来说,我们称这个对象是一个POJO对象(Plain Old Java Object ),这个对象基本上与数据库中的某张表是相对应的,其他的类将是:

一个数据访问对象(也称为是一个DAO),一个接口,一个 Hibernate 实现类。
一个 JUnit 类,用来测试我们的 DAO 对象是否可以正确工作。
注意:如果你是在使用 MySQL 并且如果你想要使用事务 (一般说来你肯定会选择使用的),那么你必须将 table-type设置为 InnoDB。你可以这样做,将下面的内容加到你的 mysql 配置文件 (/etc/my.cnf or c:\Windows\my.ini) 中。第二个设置(用来设置UTF-8字符集)是mysql 4.1.7+所需要的。

[mysqld]
default-table-type=innodb
default-character-set=utf8

如果你使用 PostgreSQL 遇到批处理发生混淆的错误,可以试着在你的src/dao/**/hibernate/applicationContext-hibernate.xml文件中加入0配置来关闭批处理。


AppFuse 使用 Hibernate 作为它默认的持久层。 Hibernate 是一个对象关系映射框架,它使你将你的Java对象与数据库的表建立起一种映射。使你可以很容易地在你的对象上执行CRUD (Create, Retrieve, Update, Delete) 操作。

你也同样可以使用iBATIS 作为持久层的另一个可能的选择。如果要在 AppFuse安装iBATIS,请看一下extras/ibatis目录中的 README.txt 文件。如果你想用 iBATIS 替换 Hibernate,我希望你是有足够的理由并且你应该对它是熟悉的。我也希望你能够针对如何在AppFuse中使用iBATIS 为本指南提出好的建议。 ;-)

下面我将用文字来告诉你在实际的开发过程中我是如何做的。
让我们从在AppFuse项目结构中创建一个新的对象,一个DAO和一个测试用例来开始。

内容列表

[1] 创建一个新的对象并且加入 XDoclet 标签
[2] 使用Ant,基于我们新建的对象创建一个新的数据库表
[3] 创建一个新的 DAOTest 以便对于DAO 进行JUnit测试
[4] 创建一个新的 DAO 对于我们这个对象执行 CRUD 操作
[5] 为Person对象和PersonDAO配置Spring配置文件
[6] 运行 DAOTest 进行测试

[1] 创建一个新的对象并且加入 XDoclet 标签

我们需要做的第一件事就是创建一个对象去持久化它。让我们创建一个简单 "Person" 对象 (创建到 src/dao/**/model 目录中) ,我们让它有一个 id, 一个 firstName 和一个 lastName (作为这个对象的属性)。

package org.appfuse.model;

public class Person extends BaseObject {
private Long id;
private String firstName;
private String lastName;

/*
Generate your getters and setters using your favorite IDE:
In Eclipse:
Right-click -> Source -> Generate Getters and Setters
*/
}

这个类应该继承自 BaseObject,由于BaseObject有 3 个抽象方法: (equals(), hashCode() and toString()) ,所以你必须在这个Person类中实现它们。前两个方法是 Hibernate 要求的,最简单的方法是使用工具(如:Commonclipse)来完成它,如果你想知道关于使用这个工具的更多的信息你可以去Lee Grey的网站去找。另外一个你可以使用的工具是Commons4E,它是一个 Eclipse Plugin ,我没有用过,所以我无法告诉你它有什么功能。


如果你使用的是 IntelliJ IDEA ,你可以生成 equals() 和 hashCode(),但是生成不了 toString(),当然有一个 ToStringPlugin,但我从来没有亲自用过。

现在我们已经有了一个创建好的 POJO ,我们需要在里面加上 XDoclet 标签以便由它生成 Hibernate 映射文件。这个映射文件是让 Hibernate 来映射对象到表,映射属性到表的列的。

首先,我们加入一个 @hibernate.class 标签,这个标签告诉 Hibernate 这个对象将映射哪一张表:

/**
* @hibernate.class table="person"
*/
public class Person extends BaseObject {

我们也必须加一个主键映射,否则当生成映射文件的时候XDoclet将出现错误。注意所有这些@hibernate.* 标签应该放置在你的POJO对象的 getter方法的 Javadocs 位置。

/**
* @return Returns the id.
* @hibernate.id column="id"
* generator-class="increment" unsaved-value="null"
*/

public Long getId() {
return this.id;
}

我使用 generator-class="increment" 代替 generate-class="native" ,因为我发现当在其他一些数据库上使用"native"时存在一些问题。如果你只打算使用MySQL,我推荐你使用"native",而我们的这个指南使用“increment”。

[2] 使用Ant,基于我们新建的对象创建一个新的数据库表

你可以通过运行"ant setup-db"来创建person表。这个任务创建一方面会创建Person.hbm.xml文件,另一方面可以在数据库中创建一张"person"表。从ant的控制台,你可以看到Hibernate为你创建的表模型:

[schemaexport] create table person (
[schemaexport] id bigint not null,
[schemaexport] primary key (id)
[schemaexport] );
 

如果你想看一下Hibernate为你生成的 Person.hbm.xml 文件的内容,你可以去 build/dao/gen/**/model 目录去看,下面我列出其内容:


"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">


name="org.appfuse.model.Person"
table="person"
dynamic-update="false"
dynamic-insert="false"
>

name="id"
column="id"
type="java.lang.Long"
unsaved-value="null"
>

 

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
移动开发 小程序 JavaScript
(一)、项目介绍及知识点概述【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】
(一)、项目介绍及知识点概述【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】
41 0
|
25天前
|
网络协议 Ubuntu Java
技术笔记:NML工程入门
技术笔记:NML工程入门
|
2月前
|
前端开发
Github项目分享——免费的画图工具drow,最新前端面试题整理
Github项目分享——免费的画图工具drow,最新前端面试题整理
|
2月前
|
uml
【经验分享】如何在IDEA中快速学习|审查|复习代码工程?
在IDEA中加速工程学习与审查,提升代码质量和维护性,关键操作包括:使用"Structure"浏览工程结构,通过"Find Usages"查找类、方法或变量引用,借助"Show Local Changes As UML"展示UML图。遵循从整体到局部的UML图学习,再到具体代码的详细探索,可系统理解设计理念。详情参考[IDEA UML教程](https://blog.csdn.net/weixin_44701426/article/details/124598053)。
32 1
【经验分享】如何在IDEA中快速学习|审查|复习代码工程?
|
2月前
|
小程序
uniapp项目实践第一章:如何创建uniapp项目
uniapp项目实践第一章:如何创建uniapp项目
47 1
|
2月前
|
敏捷开发 人工智能 Devops
开发必备:2024年整理10款超级好用的项目管理工具
整理10款适合企业研发团队使用的项目管理工具,包括(排名不分先后): 1.PingCode 智能化研发管理工具;2.Ones 大型企业研发管理平台;3.YesDev 研发项目协同管理工具;4.Teambition 阿里巴巴旗下团队协作工具;5.Jira Atlassian公司出品的项目与事务跟踪工具;6.Tower 专注50人以下团队的任务协作 ;7.TAPD 由腾讯出品的一站式敏捷研发协作云平台;8.码云Gitee DevOps一站式研发效能平台;9.禅道 国产开源的项目管理软件;10.Momday 由以色列提供的全新工作平台,内含项目管理模块。
|
12月前
|
前端开发
|
2月前
|
小程序 开发者
uniapp项目笔记
uniapp项目笔记
40 0
|
SQL 前端开发 Java
ssm项目从零到精通的超全解析(含项目源码)
目录前言mvcjsp代码css代码 前言 写这篇文章主要是为了给初学者从浅入深进行巩固(后面会慢慢多这一类的文章) 文中主要包含思路以及代码的逻辑、代码细节的补充等 这个项目主要是ssm框架搭建的一个后台网站 主要涉及的知识点有 spring、springmvc、mybatis 这些知识点可通过我之前的文章进行学习 mvc 代码模块主要涉及mvc 所谓mvc为 M——Model(模型,即JavaBean) V——View(视图,即页面) C——Controller(控制层,即与前端交互的类) 关于为什么
412 1
ssm项目从零到精通的超全解析(含项目源码)
|
前端开发 vr&ar Android开发
百思奇解项目笔记
百思奇解项目笔记
346 0
百思奇解项目笔记