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

本文原创,转载请注明出处、作者
如有错误,欢迎指正
邮箱:[email protected]

你可能感兴趣的:(Weblogic)