更新日期:2024年09月11日
该示例主要内容为在JBOSS 服务器上配置GBase 数据源。对JBOSS 本身的安装以
及Web 工程的创建不做讨论。
本示例基本信息如下:
JBOSS: jboss-4.0.3
GBase JDBC: GBase JDBC 驱动
JDK: JDK1.6
JBOSS 安装路径为: $JBOSS_HOME
GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1107
步骤
步骤1
将GBase JDBC 驱动包GBase JDBC 驱动 拷贝至jboss 目录$JBOSS_HOME
\server\default\lib 下。
步骤2
进入目录$JBOSS_HOME \server\default\deploy,并在该目录下创建gbasedb-ds.xml
文件,文件内容如下:
-
-
-
-
-
-
er
步骤3
在Web 工程的WebRoot\META-INF 目录下添加 jbosscmp-jdbc.xml 文件,
内容如下:
步骤4
创建测试servlet,代码如下:
package gbasejboss;
import java.io.IOException;
import java.io.PrintWriter;
GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1109
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
public class gbaseServlet extends HttpServlet {
public gbaseServlet() {
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:/GBaseDB");
//获得连接
conn = ds.getConnection();
if (conn != null){
out.println("The GBase connection is ok!!");
System.out.println("ok");
}else{
out.println("The GBase connection occur error!");
System.out.println("dddd");
}
//测试SQL 语句
GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1110
Statement st = conn.createStatement();
ResultSet rs1= st.executeQuery("select cust_name from customers where
cust_id=1");
while(rs1.next()){
//输出SQL 语句结果
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 {
}
}
步骤5
修改Web 工程 WebRoot\WEB-INF 目录下的web.xml 文件,添加如下内容:
步骤6
将Web 工程部署到Jboss 服务器,启动服务器,通过url:
http://localhost:8080/GBaseJboss/gbaseServlet 测试servlet
结果应显示如下:
The GBase connection is ok!! GBase 8a
#ifdef WIN32
# include
# define sleep(x) Sleep(x*1000)
#else
# include
#endif
#include
#include
#include
#include
#include
#include "sqlgbase.h"
#define isSuc(result) ((result) == SQL_SUCCESS || (result) ==
SQL_SUCCESS_WITH_INFO)
#define FOR_TIMES 50
#define CON_NUM 50
SQLHANDLE henv;
int seg;
#ifdef WIN32
GBase 8a 程序员手册ODBC 篇
南大通用数据技术股份有限公司
- 61 -
CRITICAL_SECTION thread_quit_lock;
#define THREAD_ID() GetCurrentThreadId()
#else
pthread_mutex_t thread_quit_lock;
#define THREAD_ID() pthread_self()
#endif
void getError(SQLSMALLINT type, SQLHANDLE handle)
{
SQLCHAR sqlstate[1024];
SQLCHAR errormes[1024];
SQLINTEGER numerror;
SQLSMALLINT errlen;
SQLGetDiagRec(type, handle, 1, sqlstate, &numerror, errormes,
1024, &errlen);
printf("sqlstate:%s\terrmsg:%s\terrno:%d\n",sqlstate,
errormes, numerror);
}
char* connStr = "DRIVER=GBase 8a ODBC 8.3
Driver;UID=gbase;PWD=gbase20110531;"
"SERVER={192.168.9.173;192.168.9.174;192.168.9.175};DATABASE
=test; PORT=5258;"
"GCLUSTER_ID=aaa;POOL_MAX_ACTIVE_SIZE=70;POOL_MAX_IDLE=65;"
"POOL_INIT_SIZE=10;"
"POOL_TEST_BORROW=0;"
"POOL_LBS=1;"
"POOL_CHECKOUT_TIMEOUT=5000;"
"POOL_MANAGER=1;"
"POOL_TEST_INVALID_CONN_PERIOD=2000;"
"POOL_KEEP_IDLE=1; POOL_MIN_IDLE=12;"
GBase 8a 程序员手册ODBC 篇
- 62 -
南大通用数据技术股份有限公司
"POOL_CLEAR_OVERDUE=1; POOL_USED_LIFE=400000;
POOL_IDLE_LIFE=0;";
#ifdef WIN32
DWORD WINAPI thread_bf(LPVOID arg)
#else
int thread_bf(void* arg)
#endif
{
SQLHDBC hdbc;
SQLHANDLE hsmt;
int sret = 0;
int i =0 ;
clock_t t1, t2;
time_t t;
int rc = 0;
while(i < FOR_TIMES)
{
t1 = t2 = clock();
SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
sret = SQLDriverConnect(hdbc,
NULL, connStr, SQL_NTS,NULL,
0, NULL, 0);
if (!isSuc(sret))
{
getError(SQL_HANDLE_DBC, hdbc);
}
else
{
t2 = clock();
time(&t);
printf("thread id %u\t\tconnect success! use %lu
msec\t%s.\n",THREAD_ID(), (t2 - t1), ctime(&t));
rc = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hsmt);
if (rc == SQL_SUCCESS)
{
GBase 8a 程序员手册ODBC 篇
南大通用数据技术股份有限公司
- 63 -
SQLExecDirect(hsmt,
"show
databases",
strlen("show
databases"));
SQLFreeHandle(SQL_HANDLE_STMT, hsmt);
}
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
}
i++;
}
#ifdef WIN32
EnterCriticalSection(&thread_quit_lock);
seg--;
LeaveCriticalSection(&thread_quit_lock);
#else
pthread_mutex_lock(&thread_quit_lock);
seg--;
pthread_mutex_unlock(&thread_quit_lock);
#endif
return 0;
}
void t1_bf()
{
SQLHDBC hdbc;
int rc = 0, i = 0;
#ifdef WIN32
InitializeCriticalSection(&thread_quit_lock);
#else
pthread_mutex_init(&thread_quit_lock, NULL);
#endif
SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_O
DBC3,0);
GBase 8a 程序员手册ODBC 篇
- 64 -
南大通用数据技术股份有限公司
seg = CON_NUM;
while(i
#ifdef WIN32
CreateThread(NULL, 0, thread_bf, NULL, 0, NULL);
#else
pthread_t thread;
pthread_create(&thread, 0, thread_bf, NULL);
#endif
i++;
}
while(seg > 0)sleep(1);
SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
rc
=
SQLDriverConnect(hdbc,
NULL,
connStr,
SQL_NTS,NULL,
0,
NULL,
0);
if (!isSuc(rc))
{
getError(SQL_HANDLE_DBC, hdbc);
return;
}
SQLSetConnectAttr(hdbc, SQL_ATTR_GBASE_POOL_FREE,
SQL_FREE_GBASE_POOL, NULL);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}