WebLogic JDBCTransaction版精华帖整理.docx

上传人:b****5 文档编号:8436521 上传时间:2023-01-31 格式:DOCX 页数:29 大小:150.95KB
下载 相关 举报
WebLogic JDBCTransaction版精华帖整理.docx_第1页
第1页 / 共29页
WebLogic JDBCTransaction版精华帖整理.docx_第2页
第2页 / 共29页
WebLogic JDBCTransaction版精华帖整理.docx_第3页
第3页 / 共29页
WebLogic JDBCTransaction版精华帖整理.docx_第4页
第4页 / 共29页
WebLogic JDBCTransaction版精华帖整理.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

WebLogic JDBCTransaction版精华帖整理.docx

《WebLogic JDBCTransaction版精华帖整理.docx》由会员分享,可在线阅读,更多相关《WebLogic JDBCTransaction版精华帖整理.docx(29页珍藏版)》请在冰豆网上搜索。

WebLogic JDBCTransaction版精华帖整理.docx

WebLogicJDBCTransaction版精华帖整理

WebLogicJDBC&Transaction版精华帖整理

目录

WebLogicJDBC&Transaction版精华帖整理

目录

1JDBC连接池配置

1.1配置连接池FORWEBLOGIC8.1

1.1.1通过程序配置连接池

1.1.2通过程序查看连接池运行状态信息

1.2配置连接池常见问题

1.2.1连接有效性测试选项

1.2.2不同类型驱动的区别与选择

1.2.3JDBC连SQLSERVER数据库的常见问题

1.2.4XA-DRIVER与普通DRVIER的区别

2JDBC连接池使用

2.1数据库连接方法总结

2.2数据库连接池使用常见问题

2.2.1连接泄漏(poolconnectionleak)

2.2.2处理ORACLE的BLOB字段

2.2.3配置连接池成功程序使用出问题

3事务处理

3.1事务的属性和基本概念

3.1.1Localtransaction和Distributedtransaction有什么区别?

3.1.2跨资源的Transaction如何控制?

3.1.3XA的driver,是否也是一种distribuedtransaction?

3.1.4JTA和JTS到底有什么区别?

3.1.5分布式事务提交或回滚后恩能够否关闭连接?

4论坛常见问题

4.1有谁说说DriverManger的性能和DataSource的区别?

4.2PreparedStatement和Statement的区别在什么地方?

4.3解释一下connectionpool中的physicalconnection和logicconnection的区别

4.4连接池中连接使用出错:

connectionresetbypeer,原因?

4.5数据库链接资源该怎么优化?

4.6如果页面没有执行到关闭连接的地方,页面被关闭,如何去释放这个建立的连接?

5附录

5.1代码1---连接池设置代码

5.2代码2---连接池监控代码

 

1JDBC连接池配置1.1配置连接池FORWEBLOGIC8.1

论坛内经常有人询问如何配置连接池的问题,这里把配置的详细过程都再重复一遍,并包含论坛内对配置连接池出现的问题回答进行整理。

STEP1:

数据库类型和驱动类型的选择,对于各种TYPE的驱动附录内容会做介绍。

STEP2:

连接池连接属性配置,连接URL,用户名/密码,数据库服务名。

STEP3:

测试连接池配置是否正确。

STEP4:

测试成功后进行部署。

STEP5:

部署成功,选择该连接进行连接池的参数配置。

STEP6:

连接池的参数配置。

配置完成后在config.xml 文件中对应的各属性解释如下:

∙InitialCapacity:

创建连接池时所创建的数据库连接的数目。

∙MaximumCapacity:

连接池中连接的最大数目。

∙CapacityIncrement:

连接池容量在最大容量限制范围内的增量。

∙LoginDelay:

在创建每个物理数据库连接之前要延迟的秒数。

∙AllowShrinking:

将该项设置为true时,如果没有使用额外的连接,则允许连接池把容量减小到InitialCapacity。

∙ShrinkFrequency:

在减小连接池容量之前要等待的秒数。

如果将ShrinkFrequency设置为true,那么也必须将AllowShrinking设置为true。

∙TestFrequency:

数据库连接测试之间间隔的秒数。

在每个RefreshPeriod时间间隔之后,如果设置了TestTableName,就会使用TestTableName测试未使用的数据库连接。

∙TestReservedConnections:

如果选择了这个选项,服务器会在把连接提供给客户端之前对其进行测试。

∙TestCreatedConnections:

如果选择了这个选项,就会在创建一个JDBC连接之后和在把它添加到JDBC连接池中的可用连接列表之前,对该JDBC连接进行测试。

∙TestReleasedConnections:

如果选择了这个选项,服务器就会在把连接返回给连接池之前对其进行测试。

∙TestTableName:

用于JDBC连接测试的数据库表名。

如果指定了TestFrequency,并且选择了TestReservedConnections、TestCreatedConnections或TestReleasedConnections,则TableName是必需的。

∙Weblogic.codeset=GBK:

编码格式

1.1.1通过程序配置连接池

配置连接池可以通过weblogic.management.configuration.JDBCConnectionPoolMBean或者是weblogic.management.configuration.JDBCDataSourceMBeanl编程进行。

具体代码见附录部分—代码1(连接池设置)

1.1.2通过程序查看连接池运行状态信息

配置连接池可以通过weblogic.management.configuration.JDBCConnectionPoolMBean或者编程获取运行态的信息。

具体代码见附录部分—代码2(连接池监控)

 

 

1.2配置连接池常见问题1.2.1连接有效性测试选项

Q:

连接池配好后,启动正常,如果ConnectionPool在使用过程中与数据库的联系因为网络的问题或别的原因断掉,是不是必须重新启动weblogic才能重新让ConnectionPool连上数据库?

我现在每次一碰到数据库连不上就要重启一次wlsServer,烦得要命。

此类问题出现的原因:

∙应用服务器到数据库端的网络连接不可靠;

∙数据库在系统运行的情况下重启动;

∙驱动程序的问题造成连接不可用。

A:

WLS里设置连接的检查,一个是获取连接的时候检查该连接是否有效,另外一个就是释放连接的时候检查。

这两个检查在配置连接池的时候都是可以设置的。

设置的参数说明:

参数名称

参数说明

参数选择值

TestConnectionsOnReserve

从连接池获取连接后是否进行有效性测试

True/false

RefreshMinutesparameter

设定connectionpool的刷新时间

刷新的时间间隔

TestTableName

测试的表名,也可以指定SQL

表名或者是SQL

1.2.2不同类型驱动的区别与选择

Q:

请教console中连接池的oracle驱动程序那个多,用哪个好呢?

他们的驱动程序文件分别对应LIB目录下的哪个文件?

A:

BEA_HOMEweblogic81/server/lib目录内,如果需要连接不同的数据库需要把对应的驱动程序置于该目录内。

JDBC驱动的类型与选择,在配置连接池的时候进行选择。

JDBC-1图JDBC-2图

【TYPE1:

JDBC-ODBC桥】

JDBC-1图左边的分支称为TYPE1,即通常由Sun公司提供的JDBC-ODBC桥接器。

它提供了经由一种或多种ODBC驱动进行访问的JDBC接口,而ODBC驱动,在很多情况下也即数据库的客户端,必须加载到客户机。

因而,它适用于下载和自动安装Java程序不重要、实验用途或者没有其它JDBC驱动可用的情况下。

执行效率比较低,对于那些大数据量存取的应用是不适合的.而且,这种方法要求客户端必须安装ODBC 驱动,所以对于基于 internet ,intranet的应用也是不合适的.因为,不可能要求所有客户都能找到ODBC DRIVER。

【TYPE2:

本地API驱动】

JDBC-1图右边的分支成为模式2,类似于JDBC-ODBC桥接器,需要加载到客户机,却是一个部分用Java实现的驱动接口。

它将JDBC调用转换为对数据库(Oracle、Sybase、Informix、DB2等)客户端接口的调用。

这种驱动比起TYPE1执行效率大大提高了,但它仍然需要在客户端加载数据库厂商提供的代码库。

这样就不适合基于internet的应用。

【TYPE3:

网络协议驱动】

JDBC-2图右边的分支称为TYPE3,它同样是一个纯Java驱动,不同于TYPE4的是基于网络协议。

它的机制是将JDBC调用转换为中间网络协议,然后转换为DBMS协议。

中间网络协议层起到一个读取数据库的中间件的作用,能够连接许多类型的数据库,因而是最灵活的JDBC模式。

这种模式的产品比较适用于企业内部互联网,如若支持国际互联网,还需添加对安全、穿过防火墙访问等的支持。

【TYPE4:

本地协议驱动】

图2左边的分支称为TYPE4,它一般是数据库厂商才能实现的纯Java的基于本地协议的驱动,直接调用DBMS(数据库管理系统)使用的网络协议,对于企业内部互联网来说,是一个实用的解决方案。

1.2.3JDBC连SQLSERVER数据库的常见问题

使用TYPE4类驱动程序,目前支持两种版本的SQLSERVER

WebLogicjDriverforMicrosoftSQLServerVersion7.0and2000,这个版本的驱动是WEBLOGIC的默认设置,不需要做其他的配置。

∙支持SQLServer7.0和2000.

∙支持新的数据类型SQLServerVersion7.0and2000.

WebLogicjDriverforMicrosoftSQLServerVersions6.5and7.0,使用这个版本的驱动,必须在CLASSPATH路径里增加ssqlserver4v65.jar。

∙支持SQLServer6.5.

∙支持SQLServer7.0但有以下两个限制:

一,是否按照6.5的语义规则createscolumnsthatdonotallownullvalues.(ThisbehaviorisnormalforSQLServerversion6.5.)。

二,不支持新的SQLServer7.0数据类型。

知道了以上两点后,有些问题就能很明确了。

Q:

ClassNotFoundException的错误。

该错误主要是没有加载SQLSERVER的驱动程序。

A:

JDBC连接SQLSERVER需要三个包:

msutil.jar,msbase.jar,mssqlserver.jar,可以把这三个包拷贝到BEA_HOMEweblogic81/server/lib目录内。

Q:

[Microsoft][SQLServer2000DriverforJDBC]Errorestablishingsocket的错误。

该错误主要是没有加载SQLSERVER的驱动程序。

A:

启动sqlserver2000的服务器网络实用工具后,确保Tcp/Ip协议已启动,默认的应该都启动了,这是进行通讯的条件,再选中Tcp/Ip协议后点击属性,就看到了一个默认端口号,这就是你在getConnection里用到的端口号,必须把程序里用到的端口号,写成这里的值。

Q:

连接SQLSERVER正常,但连接后不能使用或提示SQL错误。

A:

该问题主要原因可能是没有给这个用户分配足够的权限,或者你的SQL语句中用到了SQLSERVER里保留的关键字。

Q:

错误:

java.sql.SQLException:

[Microsoft][SQLServer2000DriverforJDBC]Can'tstartaclonedconnectionwhileinmanualtransactionmode.

A:

这个错误产生的原因一般是当你在一个SQLSERVER的JDBC连接上执行多个STATEMENTS的操作,或者是手动事务状态(AutoCommit=false)并且使用direct(SelectMethod=direct)模式.Direct模式是默认的模式.

解决办法

当你使用手动事务模式时,必须把SelectMethod属性的值设置为Cursor(SelectMethod=Cursor),或者是确保在你的连接上只有一个STATEMENT操作。

1.2.4XA-DRIVER与普通DRVIER的区别

Q:

XA的Driver和普通的Driver有什么区别呢?

A:

XA的Driver支持分布式的事务处理,这是与nonxadriver的最大区别;JDBC2.0规范提供了进行分布式事务的能力。

分布式事务是个单独的事务,可以应用在位于分离服务器上的多个异构数据库。

为了支持分布式事务,JDBC2.0提供了两个新的接口:

javax.sql.XADataSource和javax.sql.XAConnection。

从性能的考虑来说,使用XA的DRIVER会比普通的DRIVER慢。

Q:

XA的连接池,选择了支持本地事务后,是否还支持对全局的操作?

A:

8.1既支持TX,也支持Non-Tx的,Weblogic对所有的已知数据库进行了包装(Wrapper),使接口一致,然而对不同的数据库,根据选择的驱动程序不同,都作了相应的优化和处理。

建立数据源时,如果选择Non-Tx类型,那么它参与到JTA事务中也不会出错,因为Weblogic会启动本地事务,但是前提是必须有一个资源(XAResource)参与到事务中(多个资源的话必须打开模拟两阶段提交协议,不然会出错),但是选择Tx类型的就必须有一个全局事务,除非选择支持本地事务(SupportsLocalTransaction=true)。

另外如果使用了本地事务,就必须设置autocommit为true,或者手工commit/rollback。

1.3配置连接池连接OarcleRAC集群。

前提条件必须使用WebLogicServerversion8.1SP3或者是更新的版本。

更详细的内容请查看

http:

//e-

2JDBC连接池使用2.1数据库连接方法总结

数据库名称

连接串

MySQL

Class.forName("org.gjt.mm.mysql.Driver");DriverManager.getConnection("jdbc:

mysql:

//MyDbComputerNameOrIP:

3306/myDatabaseName",sUsr,sPwd);

PostgreSQL

Class.forName("org.postgresql.Driver");

DriverManager.getConnection("jdbc:

postgresql:

//MyDbComputerNameOrIP/myDatabaseName",sUsr,sPwd);

Oracle

Class.forName("oracle.jdbc.driver.OracleDriver");

DriverManager.getConnection("jdbc:

oracle:

thin:

:

1521:

ORCL",sUsr,sPwd);

Sybase

Class.forName("com.sybase.jdbc2.jdbc.SybDriver");DriverManager.getConnection("jdbc:

sybase:

Tds:

MyDbComputerNameOrIP:

2638",sUsr,sPwd);

//(Default-Username/Password:

"dba"/"sql")

SQLServer

Class.forName("net.sourceforge.jtds.jdbc.Driver");

DriverManager.getConnection("jdbc:

jtds:

sqlserver:

//MyDbComputerNameOrIP:

1433/master",sUsr,sPwd);

ODBC

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

DriverManager.getConnection("jdbc:

odbc:

"+sDsn,sUsr,sPwd);

DB2

Class.forName(".DB2Driver");

DriverManager.getConnection("jdbc:

db2:

//192.9.200.108:

6789/SAMPLE",sUsr,sPwd);

SAPDB

Class.forName("com.sap.dbtech.jdbc.DriverSapDB");

DriverManager.getConnection("jdbc:

sapdb:

//"+host+"/"+database_name,user_name,password)

InterBase

Class.forName("interbase.interclient.Driver");

DriverManager.getConnection("jdbc:

interbase:

//localhost/e:

/testbed/database/employee.gdb","sysdba","masterkey");

MicrosoftSQLServerseries(6.5,7.xand2000)andSybase10

JDBCName:

jTDS

Class.forName("net.sourceforge.jtds.jdbc.Driver");

DriverManager.getConnection("jdbc:

jtds:

sqlserver:

//host:

port/database","user","password");or

DriverManager.getConnection("jdbc:

jtds:

sybase:

//host:

port/database","user","password");

IBMAS400

有装V4R4以上版本的ClientAccessExpress可以在C:

ProgramFilesIBMClientAccessjt400ib找到driver档案jt400.zip,并更改扩展名成为jt400.jar语法

java.sql.DriverManager.registerDriver(newcom.ibm.as400.access.AS400JDBCDriver());

Class.forName("com.ibm.as400.access.AS400JDBCConnection");con=DriverManager.getConnection("jdbc:

as400:

//IP","user","password");

Informix

Class.forName("com.informix.jdbc.IfxDriver").newInstance();

Stringurl="jdbc:

informix-sqli:

//123.45.67.89:

1533/testDB:

INFORMIXSERVER=myserver;user=testuser;password=testpassword";

2.2数据库连接池使用常见问题2.2.1连接泄漏(poolconnectionleak)

造成的原因一般是在使用连接后没有正确的释放连接,或者是释放的过程中出了错误。

【解决办法】

Connectionleak是一件令人头痛的而又常见的错误,所以BEA提供了两种方式来解决他。

首先,通过GC。

那些没有被正常关闭的connection如果满足可爱的JVMGC的条件,GC会调用Connection的finalize()方法。

而从connectionpool中获取的connection是BEA包装过的。

所以WebLogic会妥善处理这些“孤儿”connection。

通过GC进行connection回收是一种很被动的做法。

BEA在WLS8.1中主动出击。

通过设置weblogic-ra.xml中的inactive-connection-timeout-seconds,BEA会根据设置,主动关闭那些超时idle的connection。

这就需要WLS对以分配出的connection进行周期性的检测,来看其是否活动和是否超时。

关于weblogic-ra.xm的文档如下:

http:

//e-

早在WLS6.1,BEA就已经在考虑自动回收“孤儿”connection了,这从JDBCConnectionPoolRuntimeMBean的getLeakedConnectionCount()方法中可见端倪。

在WLS7.0,8.1中的JDBCConnectionPoolRuntimeMBean中getLeakedConnectionCount一直存在。

在8.1中,增加了通过设置idleconnection的timeout时间主动关闭connection的方式,手段越来越完全了。

关于JDBCConnectionPoolRuntimeMBean的详细情况可以参见以下链接:

http:

//e-

http:

//e-

http:

//e-

http:

//e-

http:

//e-

在Dev2Dev的Codelibrary中已经有了一个例子,通过监听JDBCConnectionPoolRuntimeMBean的LeakedConnectionCount属性,如若其超过一设定值,会发出提醒。

在WLS7.0中已经可以通过GC收leakedconnection了,不过JDBCConnectionPoolRuntimeMBean的getLeakedConnectionCou

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1