返回首页

gbase数据、南大通用产品文档:GBase8aGBase JDBC 在Tomcat 应用中使用示例

更新日期:2024年09月11日

该示例主要内容为在Tomcat 服务器上配置GBase 数据源。对Tomcat 本身
的安装以及Web 工程的创建不做讨论。
本示例基本信息如下:
Tomcat: tomcat-5.5.30
GBase JDBC: GBase JDBC 驱动

GBase 8a 程序员手册JDBC 篇
南大通用数据技术股份有限公司

- 159 -
JDK: JDK1.6
Tomcat 安装路径假设为: $TOMCAT_HOME
步骤如下:
1) 将GBase JDBC 驱动包GBase JDBC 驱动拷贝至tomcat 目录
$TOMCAT_HOME\common\lib 。
2) 通过在$TOMCAT_HOME\conf\Catalina\localhost 目录下增加声明资源
文件,
该文件以Web 应用名称为名
(例:GBaseapp.xml)

配置JNDI
DataSource,
内容部分如下:


name="jdbc/GBaseDB"
type="javax.sql.DataSource"
password="somepassword"
driverClassName="com.gbase.jdbc.Driver"
maxIdle="2"
maxWait="50"
username="user"
url="jdbc:gbase://localhost:5258/test"
maxActive="4"/>

3) 修改Web 应用目录 WebRoot\WEB-INF 下的web.xml,添加如下内容:


GBase 8a 程序员手册JDBC 篇


- 160 -

南大通用数据技术股份有限公司

gbasetomcatServlet

gbasetomcat.gbasetomcatServlet




gbasetomcatServlet
/gbasetomcatServlet


DB Connection
jdbc/GBaseDB
javax.sql.DataSource
Container

4) 创建Servlet 测试连接池,代码如下:
package gbasetomcat;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;

GBase 8a 程序员手册JDBC 篇
南大通用数据技术股份有限公司

- 161 -
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

public class gbasetomcatServlet extends HttpServlet {

public gbasetomcatServlet() {
super();
}
public void destroy() {
super.destroy();
}

public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
PrintWriter out = response.getWriter();

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
System.out.println("come");
Context initCtx = new InitialContext();
//获得连接池
DataSource ds =
(DataSource)initCtx.lookup("java:comp/env/jdbc/GBase
DB");
//创建连接
conn = ds.getConnection();
if (conn != null){
out.println("The Gbase connection is ok!!");
System.out.println("ok");

GBase 8a 程序员手册JDBC 篇


- 162 -

南大通用数据技术股份有限公司
}else{
out.println("The Gbase connection occur error");
System.out.println("error");
}
//使用连接创建Statement 对象执行SQL 语句
Statement st = conn.createStatement();
ResultSet rs1= st.executeQuery("select cust_name from
customers where cust_id=1");
//获得执行结果,输出结果
while(rs1.next()){
out.println(rs1.getString(1));
System.out.println(rs1.getString(1));
}
}catch(Exception e){
System.out.println("Exception"+e);
}
}

public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}

public void init() throws ServletException {
}
}
启动Tomcat 服务器,通过
http://localhost:8080/GbaseTomcat/gbasetomcatServlet 访问,
如果输出结
果如下,说明GBase 连接池配置成功。结果:
The Gbase connection is ok!! GBase 8a

您可以编辑与 ON-Bar 一起安装的脚本,以定制备份与恢复命令以及存储管理器命令。
在 UNIX™ 操作系统上,onbar shell 脚本位于 $GBS_HOME/bin 目录中。
编辑脚本并备份原始文件的副本,以便在需要时还原。
重要: 请小心编辑脚本并测试更改。请勿更改脚本底部的清除代码。这样做可能导致意外行
为,例如,在备份验证期间遗留临时文件。
该脚本包含用于 Storage Manager 的命令,并备份 Storage Manager 目录。如果要使用不
同的存储管理器,请删除特定于 Storage Manager 的行,并(可选)为所使用的存储管理
器添加命令。
脚本包含以下部分:

此处添加启动处理
如果需要,使用这一部分初始化存储管理器,并且设置环境变量。


此处结束启动处理
这一部分启动 onbar_d 驱动程序并检查返回码。将这一部分用于 onbar_d 和存储管理器
命令。

此处添加清除处理
这部分中的代码在备份操作完成后将 Storage Manager 目录备份到 ISMData 卷池
中。如果使用第三方存储管理器,请删除特定于 Storage Manager 的信息。
如果对卷池使用不同于 ISMData 的名称,请将其更改为在 ISM_DATA_POOL 配
置参数中指定的名称。
这部分会除去 archecker 临时文件。

此处结束清除处理
使用这一部分返回 onbar_d 错误代码。

在重新安装期间更新 ON-Bar 脚本
重新安装数据库服务器后,可能需要更新与 ON-Bar 一起安装的脚本。安装过程备份了现
有定制脚本,以便您可以复用其内容。

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 94 -

安装程序在 UNIX™ 上安装缺省 onbar shell 脚本。如果缺省脚本与本地脚本不同,那么
安装程序将备份本地脚本,并发出消息通知您本地脚本已被重命名。重命名的文件的命名
约定为 onbar.date,其中 date 是重命名文件时的日期。例如,文件 onbar.2012.05.15 于
2012 年 5 月 15 日重命名。
您可以通过从重命名的脚本向缺省脚本添加信息来更新缺省脚本。

打印备份引导文件
当备份成功时,使用下面示例的方法向 onbar 脚本添加命令来打印紧急引导文件。每次发
出 onbar -b 命令时,都将打印紧急引导文件。
以下示例适用于 UNIX™:
onbar_d "$@" # receives onbar arguments from command line return_code =
$?
# check return code

# if backup (onbar -b) is successful, prints emergency boot file
if [$return_code -eq 0 -a "$1" = "-b"]; then
servernum=‘awk '/^SERVERNUM/ {print $2}' $GBS_HOME/etc/$ONCONFIG
'
lpr \$GBS_HOME/etc/ixbar.$servernum
fi
exit $return_code

将备份的逻辑日志迁移到磁带
可以将存储管理器设置为将逻辑日志备份到磁盘上,接着编写脚本自动将这些逻辑日志从
磁盘迁移到磁带,以便进行工作环境之外的保存。编辑onbar 脚本使其在 onbar_d 进程完
成后调用该迁移脚本。以下示例显示了调用迁移脚本的脚本:
以下示例适用于 UNIX™:
onbar_d "$@" # starts the backup or restore
EXIT_CODE=$? # any errors?

PHYS_ONLY=false #if it's physical-only, do nothing
for OPTION in $*; do
if [$OPTION = -p]; then
PHYS_ONLY = true


GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 95 -

fi
done
if ! PHYS_ONLY; then # if logs were backed up, call another
migrate_logs # program to move them to tape
fi

使用 LTXHWM 配置参数来指定长事务高水印。长事务高水印是可用的日志空间百分率,当
填满时,触发数据库服务器来检查长事务。
onconfig.std 值
LTXHWM 70
如未出现
80(如果 DYNAMIC_LOGS 设置为 1 或 2)50(如果 DYNAMIC_LOGS 设置为 0)

1 - 100
单位
百分比
生效
编辑 onconfig 文件并重启数据库服务器之后。
当您通过运行 onmode -wf 命令在 onconfig 文件中动态地重置该值时。
当您通过运行 onmode -wm 命令重置内存中的该值时。
用法
当逻辑日志空间达到 LTXHWM 阈值时,数据库服务器启动回滚事务。如果您降低 LTXHWM
值,则增加日志文件的大小或数目来减少回滚的可能性。
如果 DYNAMIC_LOGS 设置为 1 或 2,则当有长事务时,数据库服务器可添加足够数目的日
志文件来完成事务或防止回滚挂起。
如果您不想添加过多的逻辑日志,则应将 LTXHWM 设置为一个较小值(大约 60)。如果关
闭动态日志记录(DYNAMIC_LOGS = 0),则应将 LTXHWM 设置更低(大约 50)来避免逻辑
空间耗尽。
警告: 如果您将 LTXHWM 和 LTXEHWM 都设置为 100,则从不终止长事务。虽然您可为了
对自己有利而使用此配置,但是对于正常的数据库服务器操作,您应将 LTXHWM 设置低于
100。
如果您设置 LTXHWM 为 100,则数据库服务器发出警告消息:
LTXHWM is set to 100%. This long transaction high water mark will never be reached.
Transactions will not be aborted automatically by the server, regardless of their length.
如果事务挂起,则请遵循 GBase 8s 管理员指南中关于管理逻辑日志文件的章节指导,从
长事务挂起恢复。