设为首页 收藏本站
查看: 890|回复: 0

[经验分享] AppFuse3.5对接oracle数据库

[复制链接]

尚未签到

发表于 2017-3-1 06:55:39 | 显示全部楼层 |阅读模式
  AppFuse是一个使用Java语言开发web应用系统的集成框架。java开发人员最头痛的事情就是面对大量的框架不知该如何选择。这些框架性能如何,兼容性如何等等都需要筛选比较。Appfuse作者Matt Raible对于这些框架做了深入研究,把这些框架中最优秀的部分拿出来集成到一起,形成了最优秀的集成框架。目前这个框架的最新稳定版本是3.5.
  AppFuse中的基础框架:


  • Bootstrap 和jQuery
  • Maven, Hibernate, Spring 和Spring Security
  • Java 7, Annotations, JSP 2.1, Servlet 3.0
  • Web框架: GWT, JSF, Struts 2, Spring MVC, Tapestry 5, Wicket
  • JPA
  AppFuse提供了许多应用需要的开箱即用的功能,包括:


  • 验证和授权
  • 用户管理
  • 记住我 (保存登录信息,不必每次都登录)
  • 密码提示
  • 注册和登记
  • SSL切换
  • 电子邮件
  • Extension-less URLs (不知道该怎么翻译,求助!!!)
  • 文件上传
  • 生成CRUD后端
  • 完全支持Eclipse, IDEA 和NetBeans
  • 使用Maven和Jetty等插件,进行快速启动和部署
  • 使用Cargo以及Maven的多模式选项(profiles)支持多种前台应用和多种数据库的选择部署,并且做到可测试
  最新的AppFuse和Maven关系紧密。几乎所有的操作都通过Maven来执行,所以要对Maven以及模块化开发有一定的了解,对Maven profiles有比较深入的了解,对Maven的仓库结构也需要有一定了解。
  AppFuse支持多种数据库(Derby、H2、HSQLDB、MySQL、Oracle、PostgreSQL、SQL Server),默认数据库是MySQL。在我切换到Oracle数据库的时候,发现了一下问题,才有了此文。下面我介绍发现的问题和解决方法。
  1.首先下载安装Maven 3.1.0+,网上有很多教程,这里就不赘述了。当然,你还需要JDK7+, MySQL 5.5+ 。
  2.使用Maven生成包含AppFuse框架的空项目:
  mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-modular-spring-archetype -DarchetypeVersion=3.5.0 -DgroupId=com.myCompany.myProject -DartifactId=myProject -DarchetypeRepository=https://oss.sonatype.org/content/repositories/appfuse
  首先解释一下:这是个mvn生成(archetype:generate)框架代码的命令,后续会用到。其中myCompany是公司名称,myProject是项目名称。AppFuse版本是3.5.0。最关键的部分是appfuse-modular-spring-archetype,modular代表多模块,spring代表前段框架是spring MVC。
  启动命令行(cmd)。修改当前目录到Java的workspace(你想要放置代码的目录)。输入上面的一大串以mvn开头的字符,回车。由于天朝众人皆知的原因和Google的退出,有些jar包可能找不到源头,可能你被迫必须FQ(FreeGate)才能完成这个命令。也可能由于网速太慢,下载超时,你需要反复尝试上面的命令。
  总之,需要艰辛的努力,还可能需要一些非常规手段。。。
  神奇的事情发生了,你发现你的workspace下面多了一个文件夹。
  别着急,你还需要小小的几步。
  3.下载框架中用到的源代码和模板。
  mvn appfuse:full-source
  这个时候如果系统运行环境JDK和数据库MySql(root的密码为空)已经准备好,就可以到web目录下运行命令mvn jetty:run部署启动项目,登录http://localhost:8080访问你的项目了!
  4.生成项目文件。
  命令行当前目录切换到myproject目录下。如果你使用的是eclipse,你可以运行:mvn eclipse:eclipse 命令。如果你使用的是idea,运行:mvn idea:idea。项目文件和相关依赖会生成。
  5.切换到Oracle数据库。
  AppFuse为我们准备了多款数据库选择(profiles)。查看这些profiles,可以键入以下命令:
  mvn help:full-profiles  
  显示全部可以profiles。
  mvn help:active-profiles
  显示激活的profiles。
  本来事情很简单,我们只需要执行以下命令即可切换到oracle.
  mvn clean install -P oracle
  清除项目生成的文件,并安装oracle Profile。
  但执行过程中报了三个错误,导致执行失败。
  问题1:找不到odbc jar包。
  我们到Maven的仓库中找到oracle相关的仓库:C:\Users\[localUser]\.m2\repository\com\oracle\ojdbc14\10.2.0.2.0。这个仓库是由AppFuse生成的,但下面缺少Jar包。我们需要从Oracle网站上下载一个10.2.0.2.0版本对应的ojdbc14-.jar放到这个目录下面,并且改名为:ojdbc14-10.2.0.2.0.jar。
  也有人觉得现在oracle版本已经12了,还用10的驱动,有点过时。你可以安装自己的oracle库。方法是下载oracle相应jar,执行maven命令安装jdbc依赖。我正好安装了oracle数据库11.2G,就用它的驱动了,省的下载。
  mvn install:install-file -Dfile=C:\app/[localUser]/product/11.2.0/dbhome_1/jdbc/lib/ojdbc6_g.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0 -Dpackaging=jar
  如果你本机没有装Oracle,或者全局数据库名不是XE,你可能需要修改默认的数据库连接选项。打开文件:C:\Users\[localUser]\.m2\repository\org\appfuse\appfuse\3.5.0\appfuse-3.5.0.pom。做好备份。找到oracle相关的profile,修改成下面的样子:



        <profile>
<id>oracle</id>
<properties>
<dbunit.dataTypeFactoryName>org.dbunit.ext.oracle.OracleDataTypeFactory</dbunit.dataTypeFactoryName>
<dbunit.schema>MYPROJECT</dbunit.schema>
<!-- Make sure to capitalize the schema name -->
<!--<dbunit.operation.type>CLEAN_INSERT</dbunit.operation.type>-->
<hibernate.dialect>org.hibernate.dialect.Oracle10gDialect</hibernate.dialect>
<hibernate.export.schema.delimiter></hibernate.export.schema.delimiter>
<jdbc.groupId>com.oracle</jdbc.groupId>
<jdbc.artifactId>ojdbc6</jdbc.artifactId>
<jdbc.version>11.2.0</jdbc.version>
<jdbc.driverClassName>oracle.jdbc.OracleDriver</jdbc.driverClassName>
<jdbc.url><![CDATA[jdbc:oracle:thin:@localhost:1521:Orcl]]></jdbc.url>
<jdbc.username>myproject</jdbc.username>
<jdbc.password>myproject</jdbc.password>
<jdbc.validationQuery><![CDATA[SELECT 1 + 1 from DUAL]]></jdbc.validationQuery>
</properties>
</profile>
  其中myproject是我专门为该项目创建的数据库。本机数据库的全局实例名是orcl。jdbc也改成了11.2的。还有一些更改后续会提到。
  问题2:数据库脚本无法执行。到myproject\core\target目录下,找到schema.sql。打开查看,发现一切正常,你到sqlplus下面执行这个sql文件也没有问题。
  文件发生的原因是这个sql不是由sqlplus执行的,而是2.有hibernate执行的!hibernate执行sql语句的时候,不能有段落结束符合“;”。所以报错!解决办法是在appfuse-3.5.0.pom中的oracle profile中增加一个设置,把段落分割符设置成空:
  <hibernate.export.schema.delimiter></hibernate.export.schema.delimiter>
  这样问题就解决了!
  问题3:单元测试不能通过。报一个奇怪的错误:
  Tests run: 9, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.167 sec <<< FAILURE!
testUpdateUser(com.exam.dao.UserDaoTest)  Time elapsed: 0.088 sec  <<< ERROR!
java.lang.Exception: Unexpected exception, expected<org.springframework.dao.DataIntegrityViolationException> but was<org.springframework.orm.hibernate4.HibernateSystemException>
  这个问题已经被提交到AppFuse的邮件列表中,但是还没有正面的回复,只有一个规避的办法。深层次的原因需要有能力的人继续挖掘!
  规避办法是注释掉测试代码UserDaoTest.java的第68行://user2.setRoles(user.getRoles());



        user2.setLastName(user.getLastName());
user2.setPassword(user.getPassword());
user2.setPasswordHint(user.getPasswordHint());
//user2.setRoles(user.getRoles());
        user2.setUsername(user.getUsername());
user2.setWebsite(user.getWebsite());
  修改了这几个问题,oracle profile就会成功激活,测试通过并生成jar包、war包。
  另外,我修改oracle数据库profile(appfuse-3.5.0.pom)的方式比较不可取,更科学的方式是修改myproject下面的pom.xml.



    <properties>
        ...其他设置

<!-- 为链接oracle数据库添加了以下设置项,这些设置项的默认值指向mysql数据库 -->
<dbunit.dataTypeFactoryName>org.dbunit.ext.oracle.OracleDataTypeFactory</dbunit.dataTypeFactoryName>
<dbunit.schema>MYPROJECT</dbunit.schema>
<hibernate.dialect>org.hibernate.dialect.Oracle10gDialect</hibernate.dialect>
<jdbc.groupId>com.oracle</jdbc.groupId>
<jdbc.artifactId>ojdbc6</jdbc.artifactId>
<jdbc.version>11.2.0</jdbc.version>
<jdbc.driverClassName>oracle.jdbc.OracleDriver</jdbc.driverClassName>
<jdbc.url><![CDATA[jdbc:oracle:thin:@localhost:1521:Orcl]]></jdbc.url>
<jdbc.username>myproject</jdbc.username>
<jdbc.password>myproject</jdbc.password>
<jdbc.validationQuery><![CDATA[SELECT 1 + 1 from DUAL]]></jdbc.validationQuery>
</properties>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348487-1-1.html 上篇帖子: Maven 标准目录结构 下篇帖子: Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表