1 . 问题概述
中国登记结算公司为了验证报表模型和附带的样例[内建的不算],都是需要连接携带的DEMO数据源才能够运行,
应用程序[润乾报表]需要部署到UNIX服务器上,
DEMO自带的HSQL数据库里面有中文表名无法通过执行脚本移植到DB2数据库上[DB2不支持中文表名,
即使可以工作量大],另外安装部署HSQL数据库,需要在UNIX上执行脚本,
过多的配置问题,种种原因比较麻烦,采取了另一种方式…
2 . 案例
中国登记结算上海分公司
3 . HSQL优点
轻巧,只有600多K,运行速度非常快,适合在项目开发的时候使用。作为单元测试数据库。单元测试的时候,
启动HSQLDB的file模式,数据不存盘,可以保证测试原子性。 来回复制,随身携带。 
不需要安装,使用非常方便。稳定,而且支持的数据量足够大。 小型项目作为现场数据库使用,
不需要安装Oracle之类的大型DB,减轻了维护成本,并且,HSQLDB非常容易备份。
在我们日常开发中给我们带来更多的便捷。让Hsqldb随WebAPP一起启动。
比平时用的DB2、Oracle、SQLServer…都要简洁方便许多,更重要从开发角度考虑Hsqldb的性能已经足够了 
Hsqldb 提供的所有工具都能以java class 归档文件(也就是jar)的标准方式运行。
在下面运行AWT 版本的DatabaseManager 的例子中,hsqldb.jar 位于相对于当前路径的../lib 下面。 
java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager 运行工具
4 . JAVA程序的调用和配置文件的说明
我们借助Listener来实现此功能。web.xml配置信息如下: 
<context-param>
<param-name>hsql.dbPath</param-name>
<param-value>/database/runqianDB</param-value>
</context-param>
<context-param>
<param-name>hsql.dbName</param-name>
<param-value>runqianDB</param-value>
</context-param>
<context-param>
<param-name>hsql.port</param-name>
<param-value>9001</param-value>
</context-param>
<listener>
<listener-class>
systop.com.systopbase.common.HsqlListener
</listener-class>
</listener>
配置说明:hsql.dbPath:采用的相对路径,database直接放在WebRoot目录下.
hsql.dbName:需要说明的是在WebRoot/database/runqianDB目录下确认有runqian.script和runqian.properties两个文件.
hsql.port:设置hsqldb的端口,默认是9001.

 
构造函数说明:systop.com.systopbase.common.HsqlListener 

package systop.com.systopbase.common; 
import org.hsqldb.Server;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/**
* @ClassName: HsqlListener
* @Version:1.0
* @Author: zHouHuiHui
* 该类的职责是在WebApp启动时自动开启HSQL服务. 依然使用Server方式,不受AppServer的影响.
*/
public class HsqlListener implements ServletContextListener {
/**
* * Listener 初始化方法.
*/
public void contextInitialized(ServletContextEvent sce) {
String dbName = sce.getServletContext().getInitParameter("hsql.dbName");
String cfgDir = sce.getServletContext().getRealPath(sce.getServletContext().getInitParameter("hsql.dbPath"));
System.out.println("cfgDir:"+cfgDir);
int port = -1;
try {
port = Integer.parseInt(sce.getServletContext().getInitParameter(
"hsql.port"));
} catch (Exception e) {
port = 9001;
}
if (dbName == null || dbName.equals("")) {
System.out.println("Cant' get hsqldb.dbName from web.xml Context Param");
return
}
File dbDir = new File(cfgDir);
if (!dbDir.exists()) {// 判断目录是否存在
if (!dbDir.mkdirs()) {// 如果不存在创建,如果创建失败直接返回
System.out.println("Can not create DB Dir for Hsql:" + dbDir);
return
}
}
// 以下代码是做数据库恢复的。我们把原始的数据库放在classpath下,当启动web的时候,检查目标
// 数据库是否存在,如果不存在,就把原始数据库复制为指定的数据库
if (!cfgDir.endsWith("/")) {
cfgDir = cfgDir + "/"
}
File scriptFile = new File(cfgDir + dbName + ".script");
File propertiesFile = new File(cfgDir + dbName + ".properties");
if (scriptFile.exists() && propertiesFile.exists()) {// 判断数据文件是否存在
this.startServer(cfgDir, dbName, port);
} else {
System.out.println("Connect failed:Connect Hsqldb error or database files not exits!");
}
}
/**
* 启动Hsqldb服务的方法。
*
* @param dbPath
* 数据库路径
* @param dbName
* 数据库名称
* @param port
* 所使用的端口号
*/
private void startServer(String dbPath, String dbName, int port) {
Server server = new Server();// 它是hsqldb.jar里面的类
server.setDatabaseName(0, dbName);
server.setDatabasePath(0, dbPath + dbName);
if (port != -1) {
server.setPort(port);
}
server.setSilent(true);
server.start();
System.out.println("HSQL数据库启动了***");
// 等待Server启动
try {
Thread.sleep(800);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void contextDestroyed(ServletContextEvent arg0) {
// 这里就不用说了,自然是关闭数据库操作
Connection conn = null
try {
Class.forName("org.hsqldb.jdbcDriver");
conn = DriverManager.getConnection(
"jdbc:hsqldb:hsql://localhost:9001/runqianDB", "sa", "");
Statement stmt = conn.createStatement();
stmt.executeUpdate("SHUTDOWN;");
} catch (Exception e) {// do nothing
}
}
}


6.运行连接:java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager 


剩下的操作和别的数据库一样了,关于HSQL的详细介绍有兴趣可参见网络
5 . HSQL随WEB程序一起启动
启动应用程序Tomcat,如图表明成功,可访问主页,报表:

HSQL结合润乾报表同步部署问题的更多相关文章

  1. 润乾报表整合到Tomcat服务器的部署过程

    转载自:http://www.cnblogs.com/avivaye/archive/2012/11/16/2773681.html 使用第三方的报表设计器/服务器来快速的开发报表. 润乾服务器是使用 ...

  2. tomcat下部署润乾报表

    因为项目需要,需要在项目中配置润乾报表,之前一直是用的jboss服务器,此处调整为tomcat时出错,然后各种找错,找答案,最后终于好了,然后总结一下. 首先在apache-tomcat-6.0.43 ...

  3. Rsync同步部署web服务端配置

    Rsync同步部署web服务端配置 1,参数详解: -v, --verbose 详细模式输出. -q, --quiet 精简输出模式. -c, --checksum 打开校验开关,强制对文件传输进行校 ...

  4. LVS+MYCAT+读写分离+MYSQL主备同步部署手册

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  5. unison + inotify 实现文件实时双向同步部署步骤

    unison + inotify 实现文件实时双向同步部署步骤 一. Unison简介 Unison是Windows.Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或 ...

  6. 【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  7. MySQL面试题中:主从同步部署介绍

    主从同步部署1.两台相同版本的mysql数据库,一台做主库,一台从库 主库开启binlog 在配置文件中的[mysqld]模块中添加log-bin=mysql-bin和server-id=1,一定要保 ...

  8. 今天我碰到了由于web.xml文件表头信息导致润乾报表启动失败的问题,解决方案如下

    下面是从2.3,2.4.2.5 3.0集中版本的web.xml头信息的细节,当发现系统启动不报错但是该生成的功能没有正常生成,特别是在这次配置润乾报表的时候发现用2.4版本的时候,在web.xml中配 ...

  9. 润乾报表JSF FORM 标签中使用填报表解决方案

     需求 润乾报表的标签需要在jsf页面中和其他填报控件一起使用,润乾报表负责展现录入部分数据,并且这部分数据和页面的其它控件的数据存在前台和后台的交互. 问题 润乾报表在前台会生成自己的form, ...

随机推荐

  1. 剑指offer六十一之序列化二叉树(待补充)

    一.题目 请实现两个函数,分别用来序列化和反序列化二叉树二.思路 三.代码 --------------------------------------------- 参考链接:

  2. 使用canvas绘制渐变色矩形和使用按键控制人物移动

    使用canvas绘制渐变色矩形和使用按键控制人物移动 1.使用canvas绘制渐变色矩形 效果演示 相关代码: <!DOCTYPE html> <html lang="en ...

  3. 第5章—构建Spring Web应用程序—关于spring中的validate注解后台校验的解析

    关于spring中的validate注解后台校验的解析 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判 ...

  4. Zookeeper+ActiveMQ集群搭建

    搭建三台虚拟机安装centos7.要提前安装好jdk环境 1.环境准备,搭建三台虚拟机ip分别是 192.168.192.130 192.168.192.131 192.168.192.134 Zoo ...

  5. 【C#小知识】C#中一些易混淆概念总结(五)---------深入解析C#继承

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  6. Python -- 图片处理

    使用PIL库 转换图片格式(jpg  -->  png) from PIL import Image Image.open('E:/art.jpg').save('E:/art.png')

  7. 电信固定ip宽带80与8080端口踩坑

    本文只是作为记录,避免后面遇到此类问题耗费时间. 实际情况:公司有个固定电信宽带是固定IP的,想把固定IP映射到测试环境ip,实现可以公网通过固定ip访问,内网通过局域网ip访问. 测试环境服务是占用 ...

  8. centos7-默认启动方式改变

    在图形界面使用 ctrl+alt+F2切换到dos界面 dos界面 ctrl+alt+F2切换回图形界面 在命令上 输入 init 3 命令 切换到dos界面 输入 init 5命令 切换到图形界面 ...

  9. docker 创建jdk镜像

    基于上一个创建的基础镜像, wenbronk/centos Dockerfile ############################################ # version : we ...

  10. php的error_log()记录日志

    <?php date_default_timezone_set('PRC');//设置时区,否则会有警告 //把This s a error保存到/home/log-yyyy-MM-dd.txt ...