APPFUSE使用记录
之前部门配了一个Struts2的JAVA开发框架使用情况不是很理想,想通过Appfuse了解一下别人的做法,过程无比的艰辛。如果早知道APPFUSE需要不断的下载文件,我肯定不会用。
1、项目介绍
appfuse是一个框架生成工具。如果全部设置妥当,可以通过几个简单的命令,达到生成整个JAVA开发框架的目的,想使用Struts,spring或者其他的开源工具,而又缺少合理的开发框架的,可以一试。 APPFUSE是使用MAVEN来运行的。MAVEN和ANT类似。
2、项目的获得
查看了很多资料,走了不少弯路。不少文章说“获得APPFUSE的两种方式,MAVEN下载或者CVS”,不太准确。
最好还是下载Maven以后,再appfuse-dependencies-2.0.2.zip或者 appfuse-dependencies-2.0.1.zip解压到Maven的.m2\repository目录下面去。
环境:jdk1.5.0_11,MYSQL 5.0,TOMCAT 6.0.14,apache-maven-2.0.10,appfuse-dependencies-2.0.1.zip。
注意版本。MS因为“DLL HELL”经常受人抨击,但是JAVA的简直就是“Version hell under hell”
3、遇到的问题和解决
(1)环境变量设置。
写批处理文件的时候,“SET MAVEN_HOME=D:\appfuse\apache-maven-2.0.10;” ,后面多了一个分号,浪费了半个小时。
(2)MYSQL
在服务管理器中启动失败。查看操作系统日志内容 “Default storage engine (InnoDB) is not available”。
网上搜索到一个解决方法:“更改 myini 里面Default storage engine=InnoDB修改为MYISAM”,事实证明这么做不好,MYSQL是启动了,但是后面引发了其他的错误。
最后的解决:解决方法:
1、删除在MySQL安装目录下的Data目录中的ib_logfile0,ib_logfile1,INFOoDB\ibdata1
2、重新启动MySQL的Service
(3)apache-tomcat-6.0.14.zip
跑的过程中,会自动下载apache-tomcat-6.0.14.zip,为了节约时间,自己手动下载了一个,但是一直报错。后来发现是官方上的apache-tomcat-6.0.14.zip出了问题,下载下来的只有4.8M,总共有6.2M。所以解压错误。
(4)SQL SERVER2005连接
把MYSQL更改为2005的时候,注意把TCP/IP打开,同时端口使用下面的IPALL 的TCP动态端口。默认是2385
(5)SQL SERVER2005下,使用mvn appfuse:gen model命令生成POJO出错
Can't generate seam entities| org.hibernate.cfg.JDBCBinderException: Duplicate class name
因为默认了去生成DBO和SYS等用户下的所有表和视图。出现了重名的POJO,所以报错。
target\test-classes\hibernate.reveng.xml 里面加入<schema-selection match-schema="dbo"/>
(6)生成DAO,SERVICE报错
Property 'http://apache.org/xml/features/nonvalidating/load-external-dtd' is not recognized.
org.xml.sax.SAXNotRecognizedExceptio
解决:更换APPFUSE 2.0.2为2.0.1。项目作者MATT拿这个BUG没辙。。。。
(7)生成奇怪的POJO
数据库里面有Table1,结果生成了Table1.java和Table1Id.java两个对象。导致后面的一系列问题。
解决:数据库里面取消双主键
最后评论一下:APPFUSE,实现了常用开源框架的自动生成,不论是Struts,struts2,springMVC等,都能直接生成从持久到逻辑和测试,甚至页面的基本文件。
Appfuse的SAMPLE是诱人的。只简单的敲了几个命令,就实现了一个系统登录用户的CRUD,界面漂亮美观大方,确实很吸引人(外国人做门面不必国内差)。“让系统自动生成40%到60%的代码”,当然,这个只是作者的预想。而且看起来作者实现了自己的想法,但是在使用中不断出现的BUG和复杂的更新手段,拙劣的下载工具,使得项目的使用比较艰难和艰辛。节省的代码时间远没有解决运行APPFUSE碰到的问题花费的时间多。追求“高大全”的工具,最后结局就是开发者陷入深渊,使用者陷入地域
如果作者真想达到他的目的,不如把各个框架的组合做一个个小的DEMO供人参考来得实在。