`
szqfsx123
  • 浏览: 42193 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

转appfuse快速开发指南

 
阅读更多
  • appfuse是什么?   
         AppFuse是一个集成了当前最流行的Web应用框架的一个更高层次的Web开发框架,也可以说是一个Web开发基础平台,它与它所集成的各种框架相比,它提供了一部分所有Web系统开发过程中都需要开发的一些功能,如登陆、用户密码加密,用户管理、根据不同的用户可以展现不同的菜单,可以自动生成40%-60%左右的代码,自带了默认的一些在CSS中设定的样式,使用这些样式能很快的改变整个系统的外观,还有自动化测试的功能。 

 

  • appfuse能干什么?
        它最大的价值就是为我们提供了一个Web开发的新的方式和思路,尽管这些技术在国外都已进很流行了,但在国内能够将Hibernate、Struts、Spring、DBUnit、Ant、Log4J、Struts Menu、Xdoclet、SiteMesh、Velocity、JUnit、JSTL、WebWork这些技术集成到一个框架中的还不多见,所以即使不使用它的全部功能,它也给我们提供了一个很好的借鉴、学习的机会。 AppFuse的另一个启示是:我们可以依靠开源软件的功能降低开发成本,而且可以阅读开源软件的代码提高所在团队的整体实力。

 

  • appfuse有什么?
      一.Struts
    1. AppFuse中默认的MVC框架是Struts,而且使用的是LookupDispatchAction,并且使用的是按钮(button),在XP下用IE浏览效果还可以,但如果在2000或者98下,就使外观很难看,而且当时我还遇到一个问题:如果按钮显示中文,则在DisplayTag中翻页失灵,而且报错,后来我把BaseAction的相关方法改变了,才可以使用,因为国内的客户都比较重视界面,所以后来我将那些按钮都改成图片了,当然也要添加一些方法了,有点麻烦!
    2. Struts中的标签如今推荐使用的只有html部分的标签了,其他的标签或者可以使用JSTL替代,或者已经不推荐使用了,而且AppFuse中推荐使用JSTL,而JSTL和struts的标签的联合使用时,需要的不是<html:标签>,而是<html-el:标签>,这个问题曾经困扰了我整整2天。
    3. Struts的Validation的校验规则并不完善,比如如果使用客户端的javascript校验,则在邮箱中输入汉字根本校验不出来,到了服务器端报错。
    4. 最严重的问题是AppFuse生成的Struts的validation.xml文件中有许多多余的“.”,如果你去掉了,常常在执行ant的deploy任务时又恢复原样。这样是提交表单的时候经常会报javascript的脚本错误或者缺少对象或者缺少value,所以我会手工的修改这个文件,然后把修改后的文件备份,当重新生成有错误的文件时,我会用备份的没有错误的文件去覆盖。
    5. Struts的validatioin对于使用同一个FormBean的Action的校验方式比较复杂。(待解决)。
    二.Hibernate
    1. Hibernate是现在受到越来越多的人推崇的一个ORM工具(框架、类库),它将我们从繁琐的使用JDBC的开发过程中解放出来,但同时也带来了新的问题,如学习曲线,执行效率,数据库设计优化,还有最重要的灵活性。Hibernate不是一个很容易上手的东西,要完全驾驭它还需要读很多资料,但好的资料却很少。
    2. 使用Xdoclet可以很方便的生成Hibernate中的持久类的配置文件(*.hbm.xml),但对一些特殊的映射却无能为力,如使用序列的id生成规则,序列的名字没有地方写,所以也只好先利用它生成主要的内容,然后手工修改。
    3. 同样还是id的生成策略问题,如果使用序列、hilo等需要一些数据库机制支持的策略时,schemaExport并不能自动生成序列或者保存当前id的表,这项工作仍然要手工解决。
    4. Hibernate中提供了几种关联,一对一、一对多、多对多,但对于怎样调整效率却没有一个很明确的提示,还要根据情况判定,这就带来和一些弹性的设计。
    5. Hibernate中可以选择的操作数据库的方式有3种,其中HQL功能最强大,但有些功能使用标准查询可能会更方便,但会有一些限制,所以虽然它很灵活,但易用性不如JDBC好。
    三.Spring
    在AppFuse的过程中,Spring完全隐藏在幕后,除了一些配置外,几乎感觉不到它的存在,所以我在使用它的过程中并没有遇到什么麻烦,这里只是简单的介绍一下它在AppFuse中起到的作用。
    1. Spring在AppFuse中起到的主要作用是对Hibernate的Session和事务的管理,利用Spring封装的Hibernate模板类,我们大大地减少了实现DAO的代码行数。
    2. Spring还起到了连接映射文件和类之间的关联,及接口和实现类之间的关联,这些都依赖于Spring的IoC的机制的实现。
    3. 对于字符进行编码和解码部分用到了Spring自带的Filter,只需要在配置文件中配置就好了。

    四.SiteMesh
    SiteMesh是一个基于Decorator模式的技术,它可以修饰返回的网页文件,它的工作方式受到越来越多的人的推崇,这点从Manning出版的一些技术书籍中可以看出来。
    我在使用SiteMesh的过程中并不顺利,我参考了《Java Open Source Programming》,这本书中说SiteMesh在默认的情况下不对下载文件进行装饰,但我在下载文件时发现,我的文件内容被丢弃了,取而代之的是SiteMesh的模板的内容,后来我通过修改SiteMesh的配置文件解决了这个问题,但感觉还有一些不太清楚的地方需要学习。

    五.DisplayTag
    DisplayTag是一个优秀的显示内容的标签,从SourceForge的访问量来看,它是很活跃的项目,仅次于Ant、Hibernate、Xdoclet等几个著名的项目,我总结,它的主要功能有4项:显示、分页、排序、将显示的数据写入指定类型的文件中,然后下载。
    1. 据我使用的情况看,我只使用了分页和显示的功能,因为当时我没有很好的解决中文编码的问题,所以排序会有问题,直到昨天,我在朋友的帮助下解决了这个问题,至此我可以放心使用的功能又增加了排序(我昨天简单的测试了一下是可以的)。

    2. 但对于将显示的内容生成到一个指定格式的文件中的功能却有着很多缺陷,如:
    (1) 生成的文件中只有显示的数据,那些没有显示在界面上的的数据,则不会被写到文件中。
    (2) 如果修改了DisplayTag的显示的内容,比如添加一列,在这列中的内容不是字符,而是HTML的标签,则生成的文件只有这些HTML标签,而没有数据。
    (3) 即使DisplayTag中没有我们定制的HTML脚本,生成的文件偶尔也有问题,比如:它会把“007”生成为“7”,把字符串自动的转换为整型值。有时候还生成空白内容的文件。
    (4) DisplayTag生成的Excel文件兼容性不好,有时在Excel2003中不能正常打开,或者在XP下打开报错。
    后来,我看了作者写的《Spring Live》,书中说如果想实现稳定的Excel,推荐使用POI,于是我使用POI生成Excel,稳定性和兼容性都不错。

    六.DBUnit
    DBUnit是一个可以被Ant集成的向数据库中添加数据和备份数据的一个类库,配置很方便,因为AppFuse已经集成好了,所以使用也很容易。
    但是如果你使用EditPlus之类的工具手工修改了AppFuse生成的内容,则执行Ant的setup、setup-db或者deploy的任务时,常常报错,说无效的格式,这是因为这个被手工修改的文件再次被AppFuse执行后,它的第一行的文件声明的前几个字母是无效的,是因为本地的字符集编码的原因而引起了乱码,如果把这几个无效的字母去掉,问题就解决了。

    七.Struts Menu
    Struts Menu也是AppFuse的作者开发的一个开源软件,它可以根据配置文件读取当前用户可以使用的功能菜单,这个功能是我一直以来都想要的,我也找到了一些代码,但实现的都不如这个完善,没什么好说的,使用简单,配置容易,很好的解决了我的问题。
    问题是我只使用了AppFuse提供的2个角色,对于多个角色的实验我还没有做。

    八.XDoclet
    在AppFuse中,使用Xdoclet生成了几乎一切的配置文件:Struts-config.xml、web.xml、validation.xml、*.hbm.xml等文件,如果使用AppGen的话,还会生成更多的文件,这一切都是使用Xdoclet实现的。
    问题是我在Struts部分提到的,生成的Validation.xml文件中会多生成一个“.”,另外在生成资源文件时也会多生成一个“.”,目前我没有很好的阅读这段代码,不知道是不是Xdoclet的问题。

    九.Ant
    Ant并没有什么问题,但在执行作者写的Ant任务的时候,有一些任务不能正常执行,比如,运行模拟对象测试的任务,作者也在1.7版本的修复列表中提到以前版本有些ant任务不能执行,在1.7中修改了一些ant任务,使他们能够正常的执行了。
    实际上,我们如果使用AppGen进行开发的话,使用的任务一般不超过8个。

    十.JSTL
    JSTL是个好东西,我常用的有<c:>和<fmt:>部分的标签,但是如果使用JSTL进行逻辑判断,我并没有感觉比使用JSP的代码块优雅多少。另外,熟悉JSTL也需要一段时间,我就经历了面对着JSP页面不知道该怎么写JSTL语法的困境。当然,AppFuse中使用的基本都是JSTL,包括向DisplayTag传递显示的数据,使用的都是JSTL语法,这方面的资料挺多,我参考的是电子工业出版社出的《JSP2.0技术》,说的很详细。

    十一.Tomcat
    你也许会说:“Tomcat就不用说了吧?”,是的,Tomcat一般都会使用,但是―――――――――――――Tomcat5和Tomcat4.X对于中文编码使用了不同的机制,这个问题困扰了我好久,我解决了页面上写入汉字显示乱码的问题,我也曾经以为DisplayTag对汉字不能排序,也不能正常分页是因为DisplayTag的开发者都是老外,是因为他们没有考虑中文的关系的原因。
    直到昨天,我才知道这一切都是因为Tomcat5对汉字编码的实现的方式和Tomcat4不一样的原因,如果感兴趣,可以看看这个帖子:http://www.javaworld.com.tw/jute/post/view?bid=9&id=44042&sty=1&tpg=1&age=0

    十二.JavaScript
    JavaScript简单易学,但想运用自如就不太容易了。AppFuse中嵌入了几个js文件,里面包含了许多函数,值得我们好好的研究一下,比如,如果有一个必填字段没有填写,AppFuse会自动的聚焦在那个input上,类似的小技巧有很多,你可以自己去翻看。
    但AppFuse自带的JavaScript脚本有一个Bug,就是当DisplatyTag中没有可以显示的数据时,你用鼠标单击,它会报JavaScript错误,你仔细研究一下function highlightTableRows(tableId) 就知道了:我的解决办法是在location.href = link.getAttribute("href");前面添加一行判断:if (link != null)。

    十三.资源文件国际化
    对于Struts和DisplayTag都涉及到资源文件国际化AppFuse1.6.1很好的解决了Struts资源映射文件国际化的问题,你只需要在对应本国语言的资源文件中写入汉字,Ant中有一项执行native2ascii的任务,AppFuse自动的为你进行了资源文件的编码转换,而对于DisplayTag的资源文件问题,还要自己执行native2ascii命令,为了避免每次都输入一串命令,我用Delphi写了个小工具,可视化的选择资源文件,点击按钮自动执行该命令,底层依赖于JDK。

 

 

 

1:安装jdk和maven
 1)JAVA_HOME 设置为刚才安装的JDK的安装路径

 2)M2_HOME设置为Maven的安装路径

 3)path 部分 添加:%M2_HOME%\bin;%JAVA_HOME%\bin
    关于maven的本地仓库和maven proxy设置详见【Maven安装和使用】

2:构建项目
    mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-struts -    DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0.2 -DgroupId=com.onet.bd -    DartifactId=BDSystem
    可以参考appfuse官方网站上的构建命令,其中DgroupId:所构建项目的包名称,DartifactId:项目名称。

3:运行工程
    mvn jetty:run-war
    打开浏览器http:localhost:8080/即可以看到生成的web项目

4:获得源文件 
    mvn appfuse:full-source

6:生成eclipse项目文件
    mvn install eclipse:eclipse

 

 

 

 

 

1. 由表生成model  运行mvn appfuse:gen-model 
    会在model包中生成Person.java查看原代码,原来model中有两个ID的生成策略,如下:
    @Id @GeneratedValue(strategy=IDENTITY) @GeneratedValue(strategy = GenerationType.AUTO)
    删除@GeneratedValue(strategy=IDENTITY),只剩下一个。

2.由model 生成CRUD 运行mvn appfuse:gen -Dentity=Person会生成personList.jsp、
    personForm.jsp、PersonAction.java 但是没有自动生成dao与service 而是采用的
    GenericManager<Person, Long>中的方法。如果想生成相应的service和dao需要修改pom.xml
    配置文件。在项目下的pom.xml中查找genericCore,大概在940行 找到 将属性true 改为false
    像这样<amp.genericCore>false</amp.genericCore>,重新运行 mvn appfuse:gen -Dentity=Person
    在eclipse中查看代码 dao 与 service也都生成了。

3.乱码问题
    对于APPFUSE生成的工程运行时乱码是很常见的现象,造成该现象的原因也有几种: 
    为了偷懒,这里引用一篇网上的文章:http://www.blogjava.net/43880800/archive/2006/11/18/81892.html 
    对于国际化文件*.properties文件的编辑,有两个ECLIPSE插件可以推荐使用PropertiesEditor 和 
    ResourceBundleEditor 再次偷懒引用一篇网文:http://blog.csdn.net/lmjq/archive/2007/06/21/1660137.aspx 

 

 

 

 

 

 

mvn appfuse:gen-model  根据数据库的表生成java类
mvn appfuse:gen 根据 POJOs.生成并安装Tests, DAO, Managers, Controllers and Views
mvn appfuse:full-source 把运行所需要的org.appfuse中的依赖类转换成你的包名称
mvn eclipse:eclipse 生成eclipse的项目的配置文件,用户可以直接把项目导入到eclipse中
mvn jetty:run-war  打包并且发布你的应用程序到Jetty, 查看在 http://localhost:8080
mvn appfuse:install                 把生成的源代码及配置文件写入到src中
mvn integration-test  启动TOMCAT(或别的服务器)进行测试
mvn appfuse:remove             删除appfuse:gen.生成的代码
mvn appfuse:clean                 清除target下的所有内容 

 

 

 

 

 

 

出处:http://www.blogjava.net/shiwenfeng/default.html?page=4

 

 

 

注:如果要使用Ibatis ,参考官网设置:

http://appfuse.org/display/APF/Using+iBATIS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.1 经验说明

AppFuseMatt Raible开发的一个指导性的入门级J2EE框架,它集成了众多当前最流行开源框架与工具(包括HibernateibatisStrutsSpringDBUnitAntMavenLog4JStruts MenuXdocletSiteMeshOSCacheEHCacheJUnitJSTL等)于一身的WEB开发框架。后期的版本更是提供了对TaperstryJSF的支持。

 

AppFuse提供了WEB系统开发过程中都需要开发的一些功能,比如登陆、用户密码加密、用户管理、角色和权限管理、根据不同的用户可以展现不同的菜单等,J2EE开发者也可以在此基础上开发加入自己的功能模块。

 

为了简化开发,AppFuse预定义好了一套目录结构、基类、用来创建数据库、配置Tomcat、测试部署应用的任务,帮助快速自动生成源程序和自动维护部分配置文件。

 

本文讲解下如何利用AppFuse在较短的时间内生成配置好WEB开发框架,并生成每个系统都会使用的权限管理,提高效率,敏捷开发,从而作为大家开发Java企业应用的方便起点。

1.2适用范围

MyEclipse6.6工具进行Web开发,敏捷开发,项目原型验证开发

1.3注意事项

开发环境:MyEclipse6.6JDK 1.6Java EE 5.0Tomcat6.0Struts2以上,Spring2.0Hibernate3.0MySQL5.5MySQL Workbench 5.2.25 CE

 

设置环境变量

配置 JAVA_HOME MAVEN _HOME

JAVA_HOME     D:\Java Tools\Java\jdk1.6.0_14

MAVEN_HOME   D:\apache-maven-2.2.1

 

PATH中添加%JAVA_HOME%\bin;% MAVEN _HOME%\bin;

2. 经验内容

2.1 内容描述

2.1.1 AppFuse2.1.0新功能介绍

Archetypes 现在包括web模块的所有源码,可以更加顺利地使用jetty:run 和在 IDE 中运行。The backend is still embedded in JARs,可以选择您爱用的持久层框架(Hibernate, iBATIS or JPA)

此外,AppFuse轻量级版本也转移到MavenAppFuse提供了用于JSF, Spring MVC, Struts2Tapestry5archetype

其他重要的改进:

  • 添加了 Compass 支持
  • Web Services  XFire 升级为 CXF
  • Maven 资源库移到 Sonatype's OSS Repository Hosting
  • Canoo WebTest 升级为 3.0.
  • 添加 Ajaxified Body AppFuse Light archetypes.

基础的升级,包括 JIRA 4, Confluence 3, FishEye 2, Bamboo 2 Crowd 1.6.

2.1.2 AppFuse生成WEB开发框架

1.        下载appfuse-dependencies-2.1.0.tar.gz解压。

Appfuse的官方网站是http://appfuse.org/display/APF/Home,解压后目录结构如下图:

2.        下载apache-maven-2.2.1-bin.zip解压。

2.1 Maven2.2.1的官方网站是http://maven.apache.org/download.html,解压后目录结构如下图:

 

 

2.2 打开D:\apache-maven-2.2.1\conf\settings.xml文件,修改localRepository值内容为:

<localRepository>D:/apache-maven-2.2.1/m2/repository</localRepository>

 

注意:localRepository值默认指向C:\Documents and Settings\chenming\.m2\repository的,感觉有问题,建议自行改变repository的位置。

 

2.3 然后将appfuse-dependencies-2.1.0.tar.gz解压到D:/apache-maven-2.2.1/m2/repository下面,如下图所示:

 

3.        执行mvn archetype:generate命令创建项目。

3.1创建自己存放项目的目录

比如在D盘根目录下建立一个文件夹appfuse_project,用来保存Appfuse生成的Web项目。

 

3.2 执行mvn archetype:generate命令,生成项目

运行cmd命令,进入D:\appfuse-tms目录,然后运行以下命令

mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes

-DarchetypeArtifactId=appfuse-basic-struts-archetype -DarchetypeVersion=2.1.0

-DgroupId=com.launch.tms -DartifactId=tms

-DarchetypeRepository=http://oss.sonatype.org/content/repositories/appfuse

 

其中DgroupId= com.launch.tms 主包名

DartifactId=tms               项目名

 

AppFuse针对不同框架,提供了light版和basic版的项目模板,light版是简单版本,只有基本功能,basic版是扩展版本,提供了安全性支持,密码找回等常用功能。

 

如果不知道上述参数如何使用,参照 http://appfuse.org/display/APF/AppFuse+QuickStart

 

具体执行效果见下图所示:

 

 

看到上面的BUILD SUCCESSFUL证明TMS项目创建成功了。

D:\appfuse-tms\tms目录下,可以看到AppFuse生成的项目文件。

4.        修改pom.xml文件。

4.1添加maven-eclipse插件

 

pom.xml文件pluginmaven-compiler-plugin的上面,添加maven-eclipse插件,不添加这段会提示svn的一个错误。

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-eclipse-plugin</artifactId>

<version>2.6</version>

</plugin>

 

4.2配置数据库

pom.xml文件最下面的Database settings,修改数据库连接密码,文档最后面(jdbc.password)。

如果数据库名不是默认的tms,可以在pom.xml文件中查找db.name,然后修改为自己的数据库名,例如appfuse

 

本文以MySQL为例来说明,具体配置内容如下所示:

<!-- Database settings -->

<dbunit.dataTypeFactoryName>org.dbunit.ext.mysql.MySqlDataTypeFactory</dbunit.dataTypeFactoryName>

   <dbunit.operation.type>CLEAN_INSERT</dbunit.operation.type>

   <hibernate.dialect>org.hibernate.dialect.MySQL5InnoDBDialect</hibernate.dialect>

   <jdbc.groupId>mysql</jdbc.groupId>

   <jdbc.artifactId>mysql-connector-java</jdbc.artifactId>

   <jdbc.version>5.1.14</jdbc.version>

   <jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>

<jdbc.url>jdbc:mysql://localhost/${db.name}?createDatabaseIfNotExist=true&amp;amp;useUnicode=true&amp;amp;characterEncoding=utf-8&amp;amp;autoReconnect=true</jdbc.url>

   <jdbc.username>root</jdbc.username>

   <jdbc.password>000000</jdbc.password>

5.      模式转换(嵌入式转为全源代码模式)

进入项目根目录,运行命令:mvn appfuse:full-source,命令执行完成之后,将生成appfuse的源代码,包括UserRole等实体模型与操作。结果如下图所示:

 

   

由此生成的AppFuse源代码如下图:

 

同时,在D:\appfuse-tms\tms\src\main\java\com\cnlaunch\tms目录下面,你会看到自动生成的modeldao源代码。

6.      修改hibernate.cfg.xml文件头部内容

修改src\main\resources\hibernate.cfg.xml文件的头部内容

修改前:

http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd

修改后:

http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd

7.      执行mvn appfuse:copy-templates命令

如果src\test\resources\appfuse\model目录不存在,则须执行上述命令生成,执行后如图所示:

 

如果数据库中存在外键时,只须将src\test\resources\appfuse\model下面的Ejb3PropertyGetAnnotation.ftl文件中的${pojo.generateJoinColumnsAnnotation(property)}修改为${pojo.generateJoinColumnsAnnotation(property, cfg)}即可。

8.      修改hibernate.reveng.xml文件

如果src\test\resources\目录中hibernate.reveng.xml文件不存在,则可以去D:\appfuse-tms\tms\target\test-classes目录下COPY这个文件到src\test\resources\下面。如果没有,则自己新建一个这样的文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-reverse-engineering

  SYSTEM "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" >

 

<hibernate-reverse-engineering>

<schema-selection match-schema="PASSPORT"/>

    <type-mapping>

        <!-- jdbc-type is name fom java.sql.Types -->

        <sql-type jdbc-type="VARCHAR" length='1' hibernate-type="java.lang.String"/>

        <!-- length, scale and precision can be used to specify the mapping precisly -->

        <sql-type jdbc-type="NUMERIC" precision='1' hibernate-type="java.lang.Integer"/>

        <!-- the type-mappings are ordered. This mapping will be consulted last,

        thus overriden by the previous one if precision=1 for the column -->

        <sql-type jdbc-type="BIGINT" hibernate-type="java.lang.Integer"/>

        <sql-type jdbc-type="INTEGER" hibernate-type="java.lang.Integer"/>

        <sql-type jdbc-type="NUMERIC" hibernate-type="java.lang.Integer"/>

    </type-mapping>

 

    <!-- BIN$ is recycle bin tables in Oracle -->

    <table-filter match-name="BIN$.*" exclude="true"/>

 

    <!-- Exclude AppFuse tables from all catalogs/schemas -->

    <!--排除数据库不必生成的Model文件,比如一些关系表或已存在的实体Bean -->

    <table-filter match-name="app_user" exclude="true"/>

<table-filter match-name="user " exclude="true"/>

    <table-filter match-name="role" exclude="true"/>

    <table-filter match-name="user_role" exclude="true"/>

</hibernate-reverse-engineering>

 

注意:通过mvn appfuse:full-source命令生成的UserRole,最好先不要改动它,因为涉及到DAOServiceSignupAciton等地方,建议最好先象上面一样,过滤掉UserRole这两张表,不要产生相应的Model。因为如果你的UserRole数据表与AppFuse生成的UserRole字段不一致,会无法执行mvn appfuse:gen -Dentity=Employee命令,报一大堆BUG

9.      执行mvn appfuse:gen-model命令

执行该命令前,要确认已在MYSQL中建立了相应的数据库,并建立相应的数据表。MYSQL默认采用utf8编码,而且数据库和数据表都采用utf8编码方式。

例如建立一张职员表Employee
     CREATE TABLE `Employee` (
        `id` bigint(20) NOT NULL auto_increment,
        `code` varchar(10) NOT NULL,
        `dept` varchar(50) NOT NULL,
        `name` varchar(20) NOT NULL,
        `status` varchar(10) NOT NULL,
        `telephone` varchar(20) default NULL,
        `title` varchar(50) NOT NULL,
        PRIMARY KEY  (`id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

初次执行mvn appfuse:gen-model命令时,会报错,提示有一些依赖库的版本不存在。例如${slf4j.version}不存在的情况,如下所示:

16) org.slf4j:jcl-over-slf4j:jar:${slf4j.version}

  Try downloading the file manually from the project website.

  Then, install it using the command:

  mvn install:install-file -DgroupId=org.slf4j -DartifactId=jcl-over-slf4j -

Dversion=${slf4j.version} -Dpackaging=jar -Dfile=/path/to/file

  Alternatively, if you host your own repository you can deploy the file there:

mvn deploy:deploy-file -DgroupId=org.slf4j -DartifactId=jcl-over-slf4j -Dversion=${slf4j.version} -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

 

  Path to dependency:

        1) com.cnlaunch.tms:tms:war:1.0-SNAPSHOT

        2) org.slf4j:jcl-over-slf4j:jar:${slf4j.version}

----------

31 required artifacts are missing.

总共缺少31个必要的依赖库,如下所示:

 

<aspectj.version>1.6.10</aspectj.version>

        <commons.beanutils.version>1.8.3</commons.beanutils.version>

        <commons.collections.version>3.2.1</commons.collections.version>

        <commons.dbcp.version>1.3</commons.dbcp.version>

        <commons.lang.version>2.6</commons.lang.version>

        <compass.version>2.2.0</compass.version>

        <cxf.version>2.3.3</cxf.version>

        <dwr.version>2.0.3</dwr.version>

        <ehcache.version>2.3.1</ehcache.version>

        <ehcache.web.version>2.0.3</ehcache.web.version>

        <hibernate.version>3.6.1.Final</hibernate.version>

        <javamail.version>1.4.1</javamail.version>

        <jpa.version>2.0-cr-1</jpa.version>

        <jstl.version>1.1.2</jstl.version>

        <log4j.version>1.2.16</log4j.version>

        <sitemesh.version>2.4.2</sitemesh.version>

        <slf4j.version>1.6.1</slf4j.version>

        <spring.security.version>3.0.5.RELEASE</spring.security.version>

        <struts.menu.version>2.4.3</struts.menu.version>

        <urlrewrite.version>3.1.0</urlrewrite.version>

        <velocity.version>1.4</velocity.version>

 

将上述内容添加到pom.xml<properties>标签内,再次执行mvn appfuse:gen-model命令则会显示如下结果:

 

此时,会在src\main\java\com\cnlaunch\tms\model目录下产生一个Employee.java文件。

10.  model生成CRUD

执行mvn appfuse:gen -Dentity=Employee命令后,会在target\appfuse\generated-sources\src\main\webapp\WEB-INF\pages产生employeeList.jspemployeeForm.jsp页面;target\appfuse\generated-sources\src\main\java\com\cnlaunch\tms\webapp\action产生EmployeeAction.java,但是没有自动生成daoservice 而是采用的GenericManager<Employee, Long>中的方法。

 

解决办法如下:

    pom.xml文件中查找genericCore,将属性true 改为false

 

再次执行mvn appfuse:gen -Dentity=Employee命令,结果如下:

 

src\main\java\com\cnlaunch\tms目录中查看daoservicewebapp\action目录,发现EmployeeDaoEmployeeManagerEmployeeAction都生成了。

target\appfuse\generated-sources目录中也有相同的这些文件。

11.  生成eclipse项目

执行mvn eclipse:eclipse命令,结果如下:

 

执行mvn war:inplace命令,拷贝一些jar包到项目的lib下面;

 

打开eclipsemyeclipse工具,导入你的项目,添加一些缺少的依赖库即可。

 

解决 eclipse 里部署 test包报错的问题:从依赖包里查找以下jar包并导入junit-4.4.jarspring-test-2.5.4.jarjmock-1.1.0.jarjmock-junit4-2.4.0.jarsubethasmtp-wiser-1.2.jar,这些jar的版本要弄清楚,在依赖包里搜索即可。

 

 

 

 

 

 

1>
AppFuse has a Maven Plugin that allows you to generate all the code in these tutorials. However, we recommend you complete these tutorials before using it so you're familiar with all the code that's being generated.

One of the nice features of AppFuse 2.x is you no longer need to create a DAO or Manager for type-safe CRUD functionality. You merely need to create Spring bean definitions. This means you should be able to easily develop a front-end without worrying about writing code for the backend (until you need customized functionality of course).

<2>
What the full-source plugin does:

Exports all sources from Subversion into your project. It reads the dao.framework and web.framework properties to determine what you need.
Removes warpath plugin from pom.xml.
Calculates dependencies by reading pom.xml files form the various AppFuse modules. It replaces your dependencies with these new ones. The order of the dependencies added is alphabetical based on groupId.
Reads properties from the root AppFuse pom.xml and adds the ones that don't exist to your project.
Renames packages to match your project's groupId.


If you want to customize the code generation templates (written in FreeMarker), you can copy them
into your project using the following command:
appfuse:copy-templates


<3>
改成:
<sql-type jdbc-type="NUMERIC" hibernate-type="java.lang.Integer"/>
//那么生成的javabean 字段也是Integer

Generates Java classes from existing database tables. If you want to customize the reverse engineering strategy,
 you can modify the default hibernate.reveng.xml and put it in src/test/resources.
 You can also override the location by specifying the "revengfile" property in the <configuration>. For example:

<configuration>
  <componentProperties>
    <revengfile>path/to/hibernate.reveng.xml</revengfile>
  </componentProperties>
  <genericCore>${amp.genericCore}</genericCore>
  <fullSource>${amp.fullSource}</fullSource>
</configuration>

Oracle Users: If you create a custom hibernate.reveng.xml, make sure to capitalize the table names
in
<schema-selection match-schema="MY_SCHEMA_NAME"/>.

You'll also need to add the following line to
your jdbc.properties file:

hibernatetool.metadatadialect=org.hibernate.cfg.reveng.dialect.OracleMetaDataDialect

 

<4>
appfuse:copy-templates: Copies FreeMarker templates for CRUD generation into src/test/resources/appfuse.
These templates can be customized to fit your needs. You can delete the templates you don't customize and
the default templates will be used instead.


<5>在DAO用ibatis时,我遇到的问题
执行: mvn appfuse:full-source
[ERROR] 175002 : svn: PROPFIND request failed on '/svn/appfuse~svn/tags/APPFUSE_2.1.0/data/ibatis/src'
解决:
<groupId>org.appfuse.plugins</groupId>
                <artifactId>appfuse-maven-plugin</artifactId>
                <version>${appfuse.version}</version>
                <configuration>
                    <genericCore>${amp.genericCore}</genericCore>
                    <fullSource>${amp.fullSource}</fullSource>
                      <trunk>https://svn.java.net/svn/appfuse~svn/</trunk>
                </configuration>
即添加:
  <trunk>https://svn.java.net/svn/appfuse~svn/</trunk>

保留上面配置执行: mvn appfuse:copy-templates
 svn: PROPFIND request failed on '/svn/appfuse~svn/tags/APPFUSE_2.1.0/plugins/appfuse-maven-plugin/src/main/resources/appfuse/dao'
解决:
删除<trunk>https://svn.java.net/svn/appfuse~svn/</trunk>


<6> 环境:ibatis + oracle
[INFO] Preparing appfuse:gen-model
[INFO] [native2ascii:native2ascii {execution: native2ascii-utf8}]
[INFO] [native2ascii:native2ascii {execution: native2ascii-8859_1}]
[INFO] [resources:resources {execution: default-resources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 42 resources
[INFO] Copying 16 resources
[INFO] Copying 8 resources
[INFO] Copying 16 resources
[INFO] Copying 16 resources
[WARNING] POM for 'org.apache.ibatis:ibatis-sqlmap:pom:${ibatis.version}:compile' i
Its dependencies (if any) will NOT be available to the current build.
[INFO] [appfuse:gen-model {execution: default-cli}]
[INFO] Writing 'hibernate.reveng.xml' to target\test-classes\hibernate.reveng.xml \\可见model的产生需要借助
hibernate.reveng.xml

<7>
HibernateException: Could not parse configuration: file:/D:/mavenTest/MyProj/src/main/resources/hibernate.cfg.xml
Caused by: org.dom4j.DocumentException: Connection timed out: connect Nested exception: Connection timed out: connect
        at org.dom4j.io.SAXReader.read(SAXReader.java:484)
        at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1518)
        解决:
<!-- NOTE: If you're working offline, you might have to change the DOCTYPE to the following:
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">-->
   


《8》
[INFO] Request to merge when 'filtering' is not identical

解决:

      <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-eclipse-plugin</artifactId>
              <version>2.6</version></plugin>  //2.8好像有问题
            <plugin>

<9>
mvn appfuse:gen -Dentiry=Person  会生产Dao,service,..外, 还会生产相应的测试代码.  所以改变template要在这步
操作之前进行


<9>

[INFO] Unable to find resource 'org.codehaus.mojo:mojo-sandbox:pom:2-SNAPSHOT' in repository appfuse-snapshots (http://oss.sonatype.org/content/reposi
tories/appfuse-snapshots)
[INFO] ------------------------------------------------------------------------
原因: 自己不小心去掉了appfuse-maven-plugin <plugin> 的配置

<10.
[ERROR] 175002 : svn: PROPFIND request failed on '/svn/appfuse~svn/!svn/vcc/default'
[ERROR] 175002 : svn: can not read HTTP status line
[INFO] ------------------------------------------------------------------------
原因: 可能是网络问题, 过分吧钟在试

 

《9》
按官方说明来:用ibatis时,把hibernate3-maven-plugin 换成 sql-maven-plugin 出现生成xxxSQL.xml文件错误
如:   <result property="userName" column="userName"/>
 hibernate3-maven-plugin 后:  <result property="userName" column="USER_NAME"/>正确
 
 <10>
 appfuse 代码的自动生成,jpa注解, hibernate3-maven-plugin 视乎不能少;
 hibernate.reveng.xml 映射类型也不能少
 
 
 <11>
 appfuse,oracle,ibatis 时, 生成xxxSQL.xml 日期映射不正确.
 如:  <parameter property="birthdate" jdbcType="varchar" javaType="date"/>
 解决:\MyProj\src\test\resources\appfuse\model\Ejb3PropertyGetAnnotation.ftl
 注释:
  <#-- ${pojo.generateBasicAnnotation(property)} -->

<12>
ERROR freemarker.runtime -
Method public java.lang.String org.hibernate.tool.hbm2x.pojo.EntityPOJOClass.generateJoinColumnsAnnotation
change ${pojo.generateJoinColumnsAnnotation(property)} to ${pojo.generateJoinColumnsAnnotation(property, cfg)} in Ejb3PropertyGetAnnotation.ftl
to have access to ftl files you have to get they with the appropriate goal appfuse:copy-templates
> mvn appfuse:gen-model with a db that as a table with a FK doesn't work


《13>
oracle, 务必要在jdbc.properties加:
hibernatetool.metadatadialect=org.hibernate.cfg.reveng.dialect.OracleMetaDataDialect
否则:hibernate.reveng.xml 设置的属性无法生效

 

 

 

 

分享到:
评论

相关推荐

    使用 AppFuse 快速构建 java

    使用 AppFuse 快速构建 java 使用 AppFuse 快速构建 java

    appfuse开放web service指南

    appfuse开放web service指南 appfuse开放web service指南

    Appfuse教程Appfuse开发.pdf

    Appfuse是由Matt Raible开发的一个指导性的入门级J2EE框架,它对如何集成流行的Spring、Hibernate、iBatis、struts、Xdoclet、junit 等基础框架给出了示范。提供了对Taperstry和JSF的支持。  AppFuse是一个集成了...

    使用AppFuse快速构建J2EE应用

    本文以一个J2EE开发者的角度,借助一个简单的应用示例,在融合了个人经验的基础上介绍了如何用AppFuse一...通过阅读本文,读者不仅能够学会用AppFuse进行开发,而且能够充分体会到AppFuse提供的“快速开发”的优越性。

    appfuse快速上手

    appfuse快速上手AppFuse+QuickStart.html

    AppFuse

    本文以一个 J2EE 开发者的角度,借助一个简单的应用示例,在融合了个人经验的基础上介绍了如何用 ...通过阅读本文,读者不仅能够学会用 AppFuse 进行开发,而且能够充分体会到 AppFuse 提供的“快速开发”的优越性。

    玩转appfuse--使用appfuse建设MVC网站

    使用appfuse进行网站开发,appfuse是关于Spring,Struts2,MVC3,Hibernate等技术的案例,可以加快建设网站。 1.文档说明。 2.可以执行的案例,亲测无误。

    appfuse开发文档

    appfuse缩减开发时间,为程序员缩减大约85%的开发时间。本教程将带你进入appfuse的开发工作

    Appfuse开发教程

    Appfuse开发教程

    appfuse

    使用appfuse2.0,下载过来的实例源码,没有jar包

    SSH学习及开发框架-appfuse

    appfuse 有struts2+hibernate+spring的整合 springmvc+hibernate+spring的整合 多模块,但模块都有 学习开发参考使用非常方便 可以到官方下载最新版的,我只是把自己下载的打包整理一下 注意哈,都是基于maven的...

    可直接使用的appfuse项目

    AppFuse是一个集成了众多当前最流行开源框架与工具(包括Hibernate、ibatis、Struts、Spring、DBUnit、Maven、Log4J、Struts Menu、Xdoclet、SiteMesh、OSCache、JUnit、JSTL等(现在还有lucene的,无敌了))于一身的...

    APPFUSE工具研究.doc

    Appfuse是一个开源的工程应用,它集成了现在最流行的开发框架到该应用中,使用Maven可以很方便的开发和部署因为。也可以集成到现在流行的开源开发工具如eclipse,idea...现在让我们简单的看看APPFUSE开发应用的简单性。

    appfuse开发框架(myapp)使用说明文档

    对用appfuse 做快速开发进行说明 本框架推荐使用的Tomcat版本为5.0.*,JDK使用1.4。若使用JDK 1.5+,则要将Tomcat安装目录下的common\endorsed 里面两个JAR(xercesImpl.jar,xmlParserAPIs.jar)去掉。Ps:...

    appfuse 学习笔记

    Appfuse 一个开放源码的项目和应用程序,帮助我们快速而高效的地开发。

    使用 AppFuse 快速构建 J2EE 应用

    NULL 博文链接:https://chixianhuadeyu.iteye.com/blog/368469

Global site tag (gtag.js) - Google Analytics