Weblogic的JDBC详解
WebLogic Server 中的JDBC概述 在 WebLogic Server 中,您可以配置数据库连接,方法是先配置 JDBC 数据源和多数据源,然后将这些 JDBC 资源指定到或部署到 WebLogic 域中的服务器或群集。 您配置的每个数据源都包含一个在创建该数据源实例时(在对其进行部署或指定时或在服务器启动时)创建的数据库连接的缓冲池。应用程序会在 JNDI 树中或在本地应用程序上下文 (java:comp/env) 中查找数据源(具体取决于您如何配置和部署该对象),然后会请求一个数据库连接。完成该连接后,应用程序会调用 connection.close(),该方法会将该连接返回到数据源中的连接缓冲池。 下图为JDBC的连接架构
多数据源是一组数据源的提取,可提供与此多数据源相关联的各数据源之间的负载平衡或故障转移处理。就像数据源会绑定到 JNDI 树一样,多数据源会绑定到 JNDI 树或本地应用程序上下文。应用程序会在 JNDI 树中或在本地应用程序上下文 (java:comp/env) 中查找多数据源(就像这些应用程序查找数据源时一样),然后会请求一个数据库连接。多数据源会根据在多数据源配置中选择的算法(负载平衡或故障转移)确定要使用哪一个数据源来满足该请求。
JDBC 配置文件 WebLogic JDBC 配置存储在符合 weblogic-jdbc.xsd Schema(可在 http://www.bea.com/ns/weblogic/91/weblogic-jdbc.xsd 上找到)的 XML 文档中。可以将 JDBC 资源作为系统模块或应用程序模块进行创建或管理。JDBC 应用程序模块是 J2EE 模块的 WebLogic 特定扩展,可在 J2EE 应用程序中进行配置,或作为独立模块进行配置。 无论是正在使用 JDBC 系统模块还是正在使用 JDBC 应用程序模块,每个 JDBC 数据源或多数据源都是通过一个 XML 文件(一个模块)来表示的。 JDBC 系统模块 使用管理控制台或使用 WebLogic 脚本工具 (WLST) 创建 JDBC 资源(数据源或多数据源)时,WebLogic Server 会在域目录的 config/jdbc 子目录中创建一个 JDBC 模块,并在该域的 config.xml 文件中添加一个对该模块的引用。JDBC 模块符合 weblogic-jdbc.xsd Schema(可在 http://www.bea.com/ns/weblogic/91/weblogic-jdbc.xsd 上找到)。 以此方式配置的 JDBC 资源被视为系统模块。系统模块由某个管理员拥有,该管理员可随时删除、修改或添加相似的资源。系统模块可全局定位到域中配置的服务器和群集,因此可用于部署在同一目标上的所有应用程序,也可用于客户端应用程序。还可通过 JMX,将系统模块作为 JDBCSystemResourceMBeans 来访问。 数据源系统模块作为 JDBCSystemResource 元素包括在域的 config.xml 文件中,该元素包括 JDBC 模块文件的名称和该模块部署在其上的目标服务器和群集的列表。下图显示了一个示例,该示例描述了在 config.xml 文件中列出的数据源和该数据源映射到的模块。
在此图示中,config.xml 文件将 examples-demo 数据源作为 jdbc-system-resource 元素列出,该数据源映射到 domain\config\jdbc 文件夹中的 examples-demo.xml模块。 同样,多数据源系统模块作为 jdbc-system-resource 元素包括在域的 config.xml 文件中。多数据源模块包括了一个 data-source-list 参数,该参数可映射到该多数据源使用的数据源模块。config.xml 中还包括单独的数据源模块。下图显示了 config.xml 文件中的元素和 config/jdbc 目录中的系统模块之间的关系。
在此图示中,config.xml 文件列出了三个 JDBC 模块 - 一个多数据源和该多数据源使用的两个数据源,这些模块也在多数据源模块中列出。您的应用程序可在 JNDI 树中查找这些模块中的任何模块,并请求一个数据库连接。在您查找多数据源时,该多数据源会根据 data-source-list 参数中的数据源、列出这些数据源的顺序和在 algorithm-type 参数中指定的算法,确定要使用其他数据源中的哪一个数据源来提供数据库连接。
故障转移和 JDBC 连接 JDBC 是一个高度有状态客户端 DBMS 协议,在此协议中,DBMS 连接和事务状态直接与 DBMS 过程和客户端(驱动程序)之间的套接口相连。因此,连接的故障转移不受支持。如果 WebLogic Server 实例异常中止,它所管理的任何 JDBC 连接也都将异常中止,并且 DBMS 将回滚已经完成的任何事务。受影响的任何应用程序都必须完全重新启动其当前事务。与异常中止的连接相关联的所有 JDBC 对象也会被废除。群集的 JDBC 简化了重新连接过程:如果承载以前连接的服务器实例失败,外部客户端应用程序中 WebLogic 数据源可以识别群集的特性则使得客户端能够从中请求另一个连接。 如果您进行了复制并同步了数据实例,则可以使用 JDBC 多数据源来支持数据库故障转移。在这种环境中,如果因为多数据源中的一个数据源不存在或因为从该数据源进行的数据库连接已经关闭,客户端无法从该数据源获取连接,WebLogic Server 则会尝试从数据源列表中的下一个数据源获取连接。 有关群集 JDBC 对象的说明,请参阅配置群集的 JDBC。 注意:分配到多数据源的任何数据源都必须配置为在保留时间测试其连接。这是缓冲池可以验证它具有正常连接的唯一方式,也是多数据源可以了解何时故障转移到列表中下一个缓冲池的唯一方式。
与Oracle性能相关的连接属性 BatchPerformanceWorkaround 驱动程序可使用符合 JDBC 3.0 标准的批处理机制或本地 Oracle 批处理机制执行批处理操作。如果应用程序不使用更新计数信息,则使用本地 Oracle 批处理环境可提高性能。符合 JDBC 3.0 标准的机制根据 JDBC 3.0 规范的要求,为批处理中的每个语句或参数集返回单个更新计数。本地 Oracle 批处理机制不为设置在批处理中的每个语句或参数返回单个更新计数。因此,当使用本地 Oracle 批处理机制时,驱动程序返回在返回更新计数数组中的 SUCCESS_NO_INFO (-2) 值。 CatalogOptions Oracle 检索同义词和备注信息是十分昂贵的。如果应用程序不需要返回此信息,则驱动程序可提高性能。标准 JDBC 行为是将同义词包含在调用下列 DatabaseMetaData 方法的结果集中:getColumns()、getProcedures()、getProcedureColumns() 和 getIndexInfo()。除此之外,驱动程序可将备注信息包含在调用下列 DatabaseMetaData 方法的结果集中:getTables() 和 getColumns()。 InsensitiveResultSetBufferSize 要想在使用滚动不敏感结果集时提高性能,驱动程序可将结果集数据缓存到内存而不是写入磁盘。默认情况下,驱动程序会将 2 MB 的不敏感结果集数据缓存到内存,而把剩余的结果集数据写入磁盘。在将数据写入磁盘前增加驱动程序使用的内存量,或强制驱动程序始终不将不敏感结果集数据写入磁盘,可提高性能。最大缓存大小的设置是 2 GB。 MaxPooledStatements 为了提高性能,在驱动程序不在应用服务器或不提供其自己的预处理语句缓冲池的其他应用程序中运行时,应启用驱动程序自己内部的预处理语句缓冲池。当启用驱动程序内部的预处理语句缓冲池时,驱动程序会缓存一定数量的由应用程序创建的预处理语句。例如,如果将 MaxPooledStatements 属性设置为 20,则驱动程序会缓存应用程序创建的最新的 20 预处理语句。如果此属性的设置值大于应用程序使用的预处理语句个数,则会缓存所有预处理语句。 ResultSetMetaDataOptions 默认情况下,调用 ResultSetMetaData.getTableName() 方法时,Oracle 驱动程序会忽略为结果集中的每列返回正确表名所需的其他处理。因此,getTableName() 方法可能为结果集中的每列返回一个空字符串。如果知道应用程序不需要表名信息,则此设置会提供最佳性能。 ServerType 使用专用服务器连接时,创建的 UNIX 上的服务器进程(Windows 上的线程)仅服务于该应用程序连接。断开连接时,进程就消失了。在应用程序和专用服务器进程间直接建立套接口连接。这将大大提高性能,但却使用的 UNIX 服务器资源却显著增加。因为是运行在 Windows 平台上的 Oracle 服务器线程,所以服务器上其他资源的使用会大大减少。当有批处理环境但却有很少的连接,Oracle 服务器在最大负载的情况下仍有额外的处理容量和可使用的内存时,或者如果有一个对平台比较敏感的应用程序,与其他应用程序共享 Oracle 资源会降低其性能时,应该将 ServerType 属性设置为专用。 WireProtocolMode 如果通常返回的数据在连续行中有重复,比如,列1/行1 中的数据与列1/行2 中的数据相同,则驱动程序可以提高性能。 关于Oracle连接的其他属性可参见 http://edocs.weblogicfans.net/wls/docs92/jdbc_drivers/oracle.html
关于如何创建JDBC连接可参见 http://edocs.weblogicfans.net/wls/docs92/ConsoleHelp/taskhelp/jdbc/jdbc_datasources/CreateDataSources.html
参考至:http://edocs.weblogicfans.net/wls/docs92/jdbc_drivers/oracle.html http://edocs.weblogicfans.net/wls/docs92/cluster/failover.html#wp1030488 http://edocs.weblogicfans.net/wls/docs92/ConsoleHelp/taskhelp/jdbc/jdbc_datasources/CreateDataSources.html
http://edocs.weblogicfans.net/wls/docs92/jdbc_admin/config.html
本文原创,转载请注明出处、作者 如有错误,欢迎指正 邮箱:czmcj@163.com
Weblogic的JDBC详解的更多相关文章
- Spring4 JDBC详解
Spring4 JDBC详解 在之前的Spring4 IOC详解 的文章中,并没有介绍使用外部属性的知识点.现在利用配置c3p0连接池的契机来一起学习.本章内容主要有两个部分:配置c3p0(重点)和 ...
- JDBC详解系列(二)之加载驱动
---[来自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)--- 在JDBC详解系列(一)之流程中 ...
- JDBC详解系列(三)之建立连接(DriverManager.getConnection)
在JDBC详解系列(一)之流程中,我将数据库的连接分解成了六个步骤. JDBC流程: 第一步:加载Driver类,注册数据库驱动: 第二步:通过DriverManager,使用url,用户名和密码 ...
- JDBC详解(一)
一.相关概念介绍 1.1.数据库驱动 这里驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道理 ...
- Java基础-面向接口编程-JDBC详解
Java基础-面向接口编程-JDBC详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.JDBC概念和数据库驱动程序 JDBC(Java Data Base Connectiv ...
- JDBC详解1
JDBC详解1 JDBC整体思维导图 JDBC入门 导jar包:驱动! 加载驱动类:Class.forName("类名"); 给出url.username.password,其中u ...
- JDBC详解系列(一)之流程
---[来自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)--- JDBC概述 使用JDBC也挺长 ...
- jdbc详解(一)
JDBC简介 l 数据库驱动 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC l JDBC 全称为: Java Data Base Connectivity ...
- JDBC 详解
工作原理流程:装载驱动程序---->获得数据库连接---->使用Statement或PreparedStatement执行SQL语句----> 返回执行的结果---->关闭相关 ...
随机推荐
- poj2389-Bull Math(大整数乘法)
一,题意: 大整数乘法模板题二,思路: 1,模拟乘法(注意"逢十进一") 2,倒序输出(注意首位0不输出) 三,步骤: 如:555 x 35 = 19425 5 5 5 5 5 ...
- Windows自带压缩解压工具
压缩一个文件: 命令行:makecab fileName.txt fileName.zip 鼠标操作:选中文件-->鼠标右键-->Send to-->Compressed (zipp ...
- redis3.2 Jedis java操作
package com.util; import java.util.HashSet; import java.util.List; import java.util.Map; import java ...
- Oracle merge into
Oracle中Merge into用法总结 文件来源:(http://blog.csdn.net/yuzhic/article/details/1896878) 有一个表T,有两个字段a.b,我们想在 ...
- blowfish ECB decode
blowfish ECB Decode package main import ( "crypto/cipher" "encoding/hex" " ...
- WP8.1 侧边滑动Item
效果图 我看ios 和安卓上有好多类似的Item的效果,UWP上有微软官方的库,其中也有类似得效果,看样子WP8.1没有啊,顺便我的程序也是需要,我也就仿了一个. 具体思路是: 触摸控制GRId在CA ...
- iptables的conntrack表满了导致访问网站很慢
iptables的conntrack表满了导致访问网站很慢 转载自:https://my.oschina.net/jean/blog/189935 检查系统conntrack表是否满 现象:突然发现访 ...
- 可爱的Python_课后习题_CDay−3 通过函式进行功能化
1. 读取某一简单索引文件cdays−3-test.txt,其每行格式为:文档序号关键词,现须根据这些信息将它转化为倒排索引,即统计关键词在哪些文档中,格式如下:包含该关键词的文档数关键词 => ...
- 可爱的Python_课后习题_CDay−5 Python 初体验和原始需求
计算今年是否是闰年.判断闰年条件,满足年份模400 为0,或者模4 为0 但模100不为0. def is_learp_year(year): """判断年份是否为润年& ...
- LDAP的Schema
Schema是LDAP的一个重要组成部分,类似于数据库的模式定义,LDAP的Schema定义了LDAP目录所应遵循的结构和规则,比如一个 objectclass会有哪些属性,这些属性又是什么结构等等, ...