为了学习如何集成各种开源技术,比如Hibernate, Spring, Struts, 以及Ant/XDoclet, 创建了AppFuse。 AppFuse 的迷人之处在于你可以开始接触Hibernate, Spring, 以及Struts 而不用对他们了解甚多。使用测试驱动的开发, AppFuse 以及其教程叫告诉你如何快速有效的开发J2EE web 应用。
AppFuse的诞生
2002年早些时候,我想要获得一个合同,那时候我还是一个独立开发人员。我自己要完成所有的事情,从收集需求到创建数据库到前端的DHTML 页面。虽然我有多年的前端开发经验,Struts, HTML, 等等,但是业务逻辑对我来说却是新的。所以我不停的查找J2EE 模式来完成我的新客户的这个新工作。最后我实现了业务代表(Business Delegates), DAO, 和服务定为器(ServiceLocator) --这些都是在J2EE蓝图所述。当该合同完成的时候,我又获得一个新的差事,撰写一本关于JSP 2.0的书。出版商是Wrox ,书名是Professional JSP 2.0。我写了两章,一章是关于Struts,另一章是web 安全。
在撰写技术书籍的时候,一般都要使用例子程序来帮助说明概念。但是对于那些广泛传播的例子来说,我已经读够了。所以我决定写一个漂亮的,而且在写作晚了之后还能够使用的例子。起初的想法是能够有一个应用能够帮助我说明如何入门Struts以及使用XDoclet 来完成大量繁重的工作。它也必须具有很多安全特征,以便我能够将它用在我写作的另外一章,Web安全中。所以我开始开发struts-xdoclet。
数周后,我认为"struts-xdoclet" 难以说明,所以我将它命名为Appuse。我为Struts章节开发了一个示例程序StrutsResume。在发布Struts Resume之后,我需要提取一些素材来完成我想要的通用的起始程序AppFuse。它花了我差不多3个月,不过最终我在April 2003发布了AppUse的第一个正式版本。
从初始发布版本, AppFuse 已经进行了很多改动和改进。根据经验作了大量的技术决策。最令人痛苦的是让我的值对象(VO) 和ActionForms 保持同步,所以ActionsForm 我使用XDoclet来产生。我发现编写JDBC 是很令人乏味的事情,而更令人乏味的是在添加了新的数据库列之后更新SQL语句和VO。为了解决这个问题,我选择了使用 Hibernate 作为持久层,并使用Ant/XDoclet来动态创建数据库表。为了不丢失表中的数据,我集成了DBUnit, 他在每次单元测试的时候都可以手工使用。我决定使用Tomcat/MySQL 来作为默认的服务器和数据库,因为我最熟悉它们。我集成了大量的单元/继承测试,所以我必须进行测地的修改来校验所有的东西是否都能正确工作,包括JSP,这时通过ant test-all 的一个配置来实现的。
在 2004年3月,我将AppFuse 项目从SF转移到java.net.。有好些原因是我这样做。首先,它是SF的一个子项目,并且其用户基础增长很快。它需要专门的邮件列表和论坛。第二,java.net 好像在项目的推广方面很有特色,而且我听说他们的CVS 系统要稳定一些。我在java.net 的经验更加好,它是一个非常稳定的系统,管理员非常支持项目而且帮助推广它。
什么是AppFuse?
那么,介绍了这些历史之后,什么是AppFuse呢? 在其最核心的部分, AppFuse 是一个web 应用,你可以将其包装为一个.war 并且部署到一个J2EE 1.3-兼容的应用服务器。其设计师帮助你能够使用其build.xml文件中的新target创建一个新的项目。new target允许你指明一个新的项目名称,和数据库名称。一旦你创建了一个项目,你可以使用 ant setup创建MySQL数据库并将它部署到Tomcat 中。
此外,你可以使用ant test-all来校验你的新应用的基本功能。这样,你可以冷笑着说, "者有什么大不了的?每个人都可以创建一个.war 文件并部署到Tomcat." 。呵呵,我同意。但是你是否有一个setup-tomcat target 可以配置Tomcat 的JNDI 连接池资源和mail services? AppFuse 所作的大部分事情都不是造火箭的高科技。实际上,大不了是目录创建,构建文件,以及一系列基础类。但是它却大大的加速了开发高质量,良好测试的应用的开始。
AppFuse 试图尽可能的简化build, test, 和 deploy 应用的负担。它基本上消除了设置和配置的工作,这通常是比较麻烦的事情。而且像Ant, JUnit, XDoclet, Hibernate, 以及Spring 这样的工具是很难入门的。另外,像认证, 密码提示,"remember me," 用户注册,以及用户管理等几乎是每一个web 应用都需要的特征。AppFuse 还提供了一个教程,涉及到开发DAOs, business delegate, Struts actions(Spring controllers), 集成tiles 和validation, 以及使用基于Ant-的XDoclet 任务来从模型对象产生master/detail JSP 。它使用了一些灵活的标记苦,比如Struts Menu和Display Tag。
在我看来,其最好的部分,是他强调了Java 社区的理念和建议。目录结构和build 文件使用了Erik Hatcher 和Steve Loughran'的精彩书籍Java Development with Ant这本书。在这本书中,Erik构建了一个示例应用,这也激励了我使用Ant 和XDoclet – 并用在我的Struts 开发之中。
当我开始学习使用Hibernate时,我犯了很多错误。首先,我在每个DAO方法中都打开和关闭其会话对象。当Gavin 告诉我这是一个不好的想法,我才将它修改成使用OpenSessionInView 模式。我将每一个session object 传递到每一个方法体中,这件事社区中反复问我这样做的逻辑。我回答说: "我想让它们更加有效的工作—你有什么好主意吗?" 而更好的办法是让Session 作为是构造期的参数,这样他工作的很好。
接下来,去年,我发现Spring framework,并发现它是我看到的最漂亮的方案。使用它的ORM 支持,可以消除AppFuse中的一些Session 处理;因为Spring 可以优雅的处理它们。AppFuse 现在使用Spring'的OpenSessionInViewFilter。我所需要做的就是在web.xml中配置它,而它自己管理我的会话打开和关闭。在集成Spring 到AppFuse的表现层的时候,我删除了2,3个类,并将LOC减少到大约75%。以前遇到的所有Hibernate 问题都迎刃而解。另外,我也能够快速的添加使用iBATIS的DAO实现, 而该实现在前一年还是一个对象。在该项目中,我发现iBATIS 非常容易使用,并且在复杂的数据库方案下面也工作的很好。
AppFuse i不仅是你的Web应用的起跳点,也是一个展示集成Hibernate, Spring, 和Struts的例子。教程中具体说明了如何继承这些不同的开放源码组件。某种意义上说, AppFuse 是一个各种开源技术的粘合剂。在我发现Spring的时候,它非常的适合,因为它是一个粘合配置组件,以及不同层之间的送达耦合。Erik'的书已经说明了这种优势。Spring 大大简化了我对AppFuse 的开发而使我更加关注于最佳的J2EE实践。简言之,这时我所用的最好的J2EE工具。我也知道Spring 并不是J2EE 应用的终结者,因为以前的AppFuse 也运行得很好。但是,它有助于回答以前所有的"我应该怎样..."的问题,这就是妙药。
未来如何?
AppFuse 1.5在5月发布。其主要特征是可以使用Spring MVC 而不是Struts。所有的教程也都作了更新,以教育用户如何使用Spring (或Struts)。对 AppFuse 1.6, 我计划添加对WebWork 和 SiteMesh的支持,以及使其可以更加容易地在Eclipse 和IDEA.中运行单元测试。到年底,我希望添加对Tapestry 和JSF 作为是MVC 的支持特征。中间层和侯端 (Spring + Hibernate) 将不会变的太多。I现在他已经非常不错了。这并不是说我认为AppFuse 是完美的。我希望能够继续收到建议和反馈。这样才能驱使我继续改进他。
当我发现有更新的和更容易的方法来开发Web应用,都会应用到AppFuse中。有人问我为什么AppFuse 不支持Middlegen. 原因很简单: 我从没用过,或者需要项目中使用Middlegen 。所以我看不出有何原因添加对它的支持。如果我有个项目使用过Middlegen, 你可以打赌我将会在AppFuse中添加对它的支持。最近,我开始使用Spring的 MVC 框架来代替Struts. 首先,我发现它比较难以理解,所以我用Spring MVC实现了Web层。因为web 层包含了其他很多用在Web应用中的特征,比如模板,校验,文件上传,意外处理等等,我通过集成来学习Spring MVC的来龙去脉。
使用和学习AppFuse 是一个跟踪器最新发布和期依赖项目的好方法。并且因为AppFuse的单元测试覆盖率,我可以很容易的测试新的版本。这也可能通过测试AppFuse来找出Tomcat 和 MySQL之类的Bug。随我来说,它就是一个测试最新开源项目版本的测试工具。
AppFuse Light
Equinox是AppFuse的一个轻量版本。你可以把它看成是Struts中的struts-blank和Spring 中的webapp-minimal应用。这个初学者版本对我来说,以为他还不够强装。只是想简化它,没有构建时的依赖性。
其设计理念是向开发者展示如何构建Spring Live中的QuickStart一章的骨架Struts/Spring/Hibernate 应用。未来会添加更多的功能。但主要目标还是关注于骨架的实现。
如何使用?
最好的办法是download它,并阅读QuickStart Guide. AppFuse是Java Enterprise Community的一个部分。其主页是appfuse.dev.java.net.
ps:转自http://www.blogcn.com/User11/surelau/index.html
分享到:
相关推荐
标题:AppFuse 2.0.2 - 快速启动Web应用开发的开源框架 描述:AppFuse 2.0.2文档,PDF格式,详细介绍了AppFuse的应用、特性和如何利用它加速Web应用的开发过程。 AppFuse是一款用于“快速启动”Web应用开发的开源...
**玩转AppFuse:使用AppFuse建设MVC网站** ...它将复杂的框架集成在一起,提供了简单易用的接口,使得开发过程更加顺畅。通过深入理解和实践,你可以充分利用AppFuse的优势,提升你的开发效率和代码质量。
Appfuse是一款开源的Java Web应用框架,它旨在简化开发过程,提供一个快速开发基础Web应用程序的平台。Appfuse使用了Maven作为构建工具,结合Spring、Hibernate、Struts2等流行框架,为开发者提供了一个标准的架构...
3. **Spring框架集成**:自2004年2月起,AppFuse开始引入Spring框架,这大大提升了其功能和性能。Spring提供了对Hibernate/iBATIS的支持,声明式事务处理,依赖注入和层解耦,使得应用程序更易于理解和维护。 4. **...
在实际使用中,你可以按照以下步骤使用 AppFuse: 1. **选择模板**:根据你的项目需求,从 AppFuse 提供的多种模板中挑选适合的类型。 2. **生成项目**:使用 Maven 的 archetype:generate 命令,输入相应的 ...
它提供了一个基础框架,集成了许多流行的开源库,如Spring、Hibernate、Struts或Spring Boot等,帮助开发者快速搭建应用骨架。AppFuse 可以根据选定的技术栈自动生成项目的目录结构、配置文件以及基本的CRUD操作,...
- **安全框架集成**:AppFuse 支持多种安全框架的集成,如 Spring Security 等。 - **认证与授权**:提供了基于角色的访问控制机制,可以方便地实现用户认证和权限管理。 - **加密**:支持数据加密技术,如 ...
4. **Spring Modules**:Spring Modules提供了与特定框架集成的模块,比如Spring Modules for Hibernate,可以简化数据库操作。在集成jbpm时,可能需要利用Spring Modules来优化数据访问层,确保与jbpm的数据交互...
这个框架集成了多种流行的技术,如Spring、Hibernate、Struts或Spring Boot等,旨在简化开发过程,减少开发者在基础架构上花费的时间,从而可以更加专注于业务逻辑的实现。 AppFuse 提供了一种模板化的方法来创建新...
综上所述,AppFuse 2.0 RC1文档是一个全面的资源集合,不仅提供了AppFuse的基础使用教程,还深入探讨了高级主题,如安全性、持续集成和多框架集成,是Web开发人员学习和掌握AppFuse不可或缺的指南。
AppFuse 是一个开源项目,它为开发Java Web应用程序提供了一个快速启动的基础。它结合了多种框架和最佳实践,使得开发者可以快速构建出安全、可维护的Web应用。AppFuse 使用Maven作为构建工具,整合了Spring、...
AppFuse 是一个开源框架,旨在快速启动 Java Web 应用程序的开发。它使用了 MVC(Model-View-Controller)设计模式,并集成了多种流行的技术和库,如 Spring、Hibernate、Struts2 等,帮助开发者快速构建可扩展且...
- **定位**:AppFuse 更像是一个项目的骨架或模板,它通过集成各种工具和技术(如 Java, Maven, Struts 等),提供了快速构建 Web 应用的基础框架。这类似于使用 IDE 的向导功能来创建 Web 项目的过程。 #### 二、...
AppFuse是一个开源项目,它提供了一个快速开发Java Web应用程序的基础框架。这个版本的文档很可能是关于如何使用AppFuse 2.0.2,包括其特性和安装指南,以及如何构建基于它的应用。 描述中提到的"NULL"意味着没有...
AppFuse 是一个开源项目,旨在简化Java Web应用程序的开发。它提供了一个基础框架,整合了多种流行的开源技术,如Spring、Hibernate、Struts等,帮助开发者快速构建安全、可扩展的Web应用。AppFuse的核心设计理念是...
总的来说,基于AppFuse的B2C电子商务系统研究与实现是一个涉及众多技术栈的综合项目,涵盖了Web开发的各个方面,包括但不限于框架集成、数据库操作、前端交互、安全性、性能优化等。通过这个项目,开发者不仅可以...
AppFuse是一个集成了众多当前最流行开源框架与工具(包括Hibernate、ibatis、Struts、Spring、DBUnit、Maven、Log4J、Struts Menu、Xdoclet、SiteMesh、OSCache、JUnit、JSTL等(现在还有lucene的,无敌了))于一身的...