AppFuse3.5对接oracle数据库

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>
时间: 2024-11-02 15:21:14

AppFuse3.5对接oracle数据库的相关文章

Oracle数据库备份的云端先行者 多备份

Oracle数据库的备份方法很多,包括业内比较认可的冷备份.热备份等,但无论使用哪种备份方法,备份的目的都是为了在出现故障后能够以尽可能小的时间和代价恢复系统.但较为遗憾的是,在云概念兴起的当下,Oracle似乎在云端并没有做过多少布局.如果你想把数据备份到云端,不好意思,只能另想办法了. 办法总是会有的.以数据云端备份为主营业务的木浪科技推出的产品多备份就可以轻松解决这个问题.多备份能够一键备份.恢复.迁移包括Oracle数据库在内的数据库及网站文件. Oracle数据库本身自带了很多数据恢复

实现c# 直接连接Oracle数据库操作,不用安装各种插件

在c#中连接oracle数据库,遭遇了各种痛苦. 采用VS默认的方式连接oracle发现有版本限制,而且还需要安装oracle的客户端,否则连接不了.客户端的版本与Oracle数据库的版本对接不上也连接不了. 在网上也找了很多,尝试过使用ODP.NET来连接,发现一样不行,就连引用dll后,一跑就会报错.麻烦死了. 最终,找到了一种方法,使用第三方的库来实现,找了一个破解版的.测试之后可行,不需要安装客户端,也不需要安装其他的,直接就可以连接上了. 测试环境: PC机:WIN7 64位,安装有o

win7 64位系统 PB连接oracle数据库出现“oracle library oci.dll could not be loaded”问题的解决方法

今天与大家分享一个自己的学习笔记,希望能给遇到同样问题的人带来帮助. 不知道大家在win7 64位系统下用 PB连接oracle数据库时,是否遇到过“oracle library oci.dll could not be loaded”问题. 今天,在win7 64位系统下用 PB连接oracle数据库时,一直出现上述错误,在百度上找了很久,都没有找到一个完整的解决方案,咨询了很多人,(他们都说是我的PB和oracle没装好,但我装的时候没出现任何问题,一切都很顺利,而且PB和oracle都能正

Oracle数据库——触发器的创建与应用

一.涉及内容 1.理解触发器的概念.作用和类型. 2.练习触发器的创建和使用. 二.具体操作 (实验) 1.利用触发器对在scott.emp表上执行的DML操作进行安全性检查,只有scott用户登录数据库后才能向该表中执行DML操作.(第1题中,user是系统函数,返回当前用户.字符串中使用两个单引号表示一个单引号.) 要求:分别以system用户和scott用户对emp 表执行DML操作,试验触发器的运行效果. (1)在scott用户下创建触发器 语句: create or replace t

使用PL/SQL连接oracle数据库,并将数据进行导出备份和导入恢复

这种操作百度一搜一大片,今天整理以前做的项目时自己备份了一下数据库,试着将数据进行导出备份和导入恢复了一下:下面是操作过程: 1 开启服务 2 配置监听 找到下面文件: 记事本打开 在导航器的下拉菜单中选择:将数据库添加到树, 然后点击确定 然后使用PL/SQL就可以登录了: 3 建立新表空间和新用户 使用system用户登录:执行如下sql语句建立表空间和新用户,以及给用户授权 建立表空间 Create tablespace myyyjc datafile 'D:\app\Administra

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性 作者:赵全文  网名:guestart 我们生产环境的Oracle数据库都做了RMAN备份,是采用了一周的RMAN备份保留策略:除了使用RMAN备份以外,我们还使用了爱数(Eisoo)备份软件来进行备份,可以说是做到了有备无患.可是,如果有一天,Oracle数据库由于主机层面硬件原因或是数据库层面的原因不能对外提供高可用服务的时候,假设数据丢了一大部分,我们只有用RMAN备份来进行恢复,再如果发现,RMAN备份失效了,那就往地缝里

PL/SQLDeveloper导入导出Oracle数据库方法

前一篇博客介绍了Navicat工具备份Oracle的方法,这篇博客介绍一下使用PL/SQL Developer工具导入导出Oracle数据库的方法. PL/SQL Developer是Oracle数据库用于导入导出数据库的主要工具之一,本文主要介绍利用PL/SQL导入导出Oracle数据库的过程. 1.Oracle数据库导出步骤 1.1 Tools→Export User Objects...选项,导出.sql文件. 说明:此步骤导出的是建表语句(包括存储结构). 1.2 Tools→Expor

Linux环境下Oracle数据库启动停止命令

切换root至oracle数据库账号 su – oracle 查看数据库服务状态: ps -ef |grep oracle netstat –an|grep 1521 查看数据库监听状态: [[email protected] ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 25-NOV-2016 03:36:45 Copyright (c) 1991, 2009, Oracle. All righ

Oracle数据库中文乱码问题

最近碰到Oracle乱码问题,刚开始甚是头疼,以前在合肥出差的时候,这种问题也碰到过,当时直接抛给了“乌压压一片”(一个搞数据的同事儿),这次没办法躲过,只好硬着头皮上.虽然我这次碰到的是Oracle乱码问题中的一个,但是我决定将这个乱码问题整理清楚(不整清楚,就觉得身边有个定时炸弹,怕下次整数据库的时候会突然又爆炸). 解决这个问题的关键在于理解字符集的概念,所以在正文开始之前,有必要先提一下字符集的相关知识!(这部分知识,对于解决j2ee中文参数传递过程中出现的乱码,也非常具有参考意义) 一