本主题目的在于帮助您排除使用 Parasoft JDBC 驱动程序遇到的问题。
章节目录:
区分大小写
注意,驱动程序属性区分大小写,因此它们的拼写非常重要。例如,需要使用 VirtualizeServerUrl
而不是 VirtualizeServerURL
。
了解驱动程序通信和提供程序
如果遇到了问题,了解驱动程序如何与 Virtualize 通信可能会有所帮助...
Parasoft JDBC 驱动程序默认的(poll)提供程序使用简单的 HTTP 连接轮询 Virtualize,(使用 Virtualize 服务器 URL 属性)以在指定间隔(默认 5000 ms)对 JDBC 连接设置进行轮询。
如果喜欢使用 JMS 提供程序(比如,对于大规模部署,可以减少网络通讯报文,或者使用与 Virtualize 的异步通信),那么请将系统属性 parasoft.virtualize.configuration.provider
设置为 jms
。建立连接之后,Parasoft JDBC 驱动程序和 Virtualize 将交换 JMS 消息,以注册带 Virtualize 的驱动程序,并接收来自 Virtualize 的配置详情(比如,模式变更)。JMS 的使用允许两端独立运行。例如,即使已经关闭了 Virtualize 服务器,Parasoft JDBC 驱动程序也可以保持直通模式。如果已经关闭了 AUT,则在其再次启动时,将从 Virtualize 接收 Parasoft JDBC 驱动程序配置。
或者,可以使用本地提供程序(如上所述)。
本地配置
如果无法获得要在 Virtualize 服务器视图中显示的与 Parasoft JDBC 驱动程序关联的 JDBC 控制器,那么可以本地配置(与远程通过 Virtualize UI 相反),如下所示:
- 将系统属性
parasoft.virtualize.configuration.provider
设置为local
。这允许使用适用于特定供应商的数据源属性或系统属性指定启动程序设置。它还阻止了 Parasoft JDBC 驱动程序向 Virtualize 服务器注册(这意味着您将无法从 Virtualize 服务器视图或从环境管理器进行控制)。- 不是像在前面特定于供应商的配置部分中指定驱动程序属性(virtualizeServerUrl 和 virtualizeGroupID)和系统属性(parasoft.virtualize.group.id 和 parasoft.virtualize.server.url),而是使用如下所述(如果适用的话)的系统属性或驱动程序属性。详情请参阅:
- 不是像在前面特定于供应商的配置部分中指定驱动程序属性(virtualizeServerUrl 和 virtualizeGroupID)和系统属性(parasoft.virtualize.group.id 和 parasoft.virtualize.server.url),而是使用如下所述(如果适用的话)的系统属性或驱动程序属性。详情请参阅:
- 当准备进行录制时,请按Switching Between Virtualize Modes in Local Mode中的描述配置。
注意,每个 AUT 可以使用:
- 本地控制的 Parasoft JDBC 驱动程序
- 远程控制的 Parasoft JDBC 驱动程序
- 系统属性
一个时间只适用于一个给定的 AUT。
与驱动程序实现类一起使用的属性
如果正在使用其中一个专门化驱动程序类(除了“Generic/Other Driver”外的上述任何实现类),那么可以在应用程序服务器框架中应用以下属性。通过尝试调用与提供的驱动程序类同名的 set 方法,应用程序服务器将这些自定义属性设置为 Parasoft JDBC 驱动程序(或任何其他驱动程序)例如,如果提供了名为 logLevel 的属性,则应用程序服务器将使用反射来调用名为 setLogLevel 的方法,该方法只有一个字符串参数。
配置 Parasoft JDBC 驱动程序时,请确保原始驱动程序需要的任何属性Parasoft JDBC 驱动程序实现类可以扩展或委托给原始驱动程序实现类,从而将这些属性传递给原始驱动程序。将这些属性应用于 JDBC 驱动程序的方法取决于应用程序服务器。有关某些流行应用程序服务器的说明,请参阅前面的部分。
除了原始驱动程序实现可能需要的任何属性,Parasoft JDBC 需要提供以下属性。
驱动程序属性 | 选项 |
---|---|
virtualizeMode |
|
logFilePath | <path> |
logDestinationType |
|
logLevel |
|
virtualizeServerUrl | <URL> |
virtualizeMode
record: 以录制模式设置 Parasoft JDBC 驱动程序。Parasoft JDBC 驱动程序将 JDBC 调用委托给原始驱动程序实现类,同时捕获从原始驱动程序返回的 SQL 查询和 ResultSet 数据。捕获的数据被传输到位于 virtualizeServerUrl 属性值的 Virtualize 服务器。
virtualize: 以虚拟化模式设置 Parasoft JDBC 驱动程序。Parasoft JDBC 驱动程序接收的 JDBC 调用将被路由到 Parasoft Virtualize 服务器,从 Virtualize 服务器接收的 ResultSet 数据将被返回给应用程序。此模式假设已经执行了录制,并且该 Virtualize 服务器已经配置了虚拟资产,因此它可以响应 Parasoft JDBC 代理驱动程序。(详情请参阅部署虚拟资产)。
passthrough: Parasoft JDBC 驱动程序将 JDBC 调用委托给原始驱动程序实现类,而不进行数据捕获或录制。该模式目的在于有效地关闭 Parasoft JDBC 驱动程序,并使系统处于与原始配置类似的状态,就好像驱动程序不存在一样。注意,JDBC 调用仍然通过驱动程序,并被委托给原始驱动程序,其中 Parasoft JDBC 驱动程序仍然在中间。
hybrid: 在该模式中,Parasoft JDBC 驱动程序行为将与虚拟化模式中的行为相同,除非没有找到匹配的虚拟化数据。针对这些情况,它会将 JDBC 调用委托给原始驱动程序实现类,而不进行数据捕获或录制。
failover: 在该模式中,Parasoft JDBC 驱动程序将 JDBC 调用委托给原始驱动程序实现类除非出现故障(SQL 异常)。如果出现故障,那么 Parasoft JDBC 驱动程序接收的 JDBC 调用将被路由到 Parasoft Virtualize 服务器,从 Virtualize 服务器接收的 ResultSet 数据将被返回给应用程序。
logFilePath
当 logDestinationType 设置为文件时并且 logLevel 值为 1 或更高时可用。指定应该保存 Parasoft JDBC 驱动器日志的文本文件的完整路径。这属于内部驱动程序日志信息,而不是记录数据库数据的位置。
该属性指的是为调试目的(例如,来自实际 JDBC 驱动程序的事件和异常)而生成的本地日志文件的位置。这不是记录所录制数据的文件所处的位置。该文件始终存储在虚拟资产项目中。
logDestinationType
表示驱动器日志数据应保存或发送至何处。这属于内部驱动程序日志信息,而不是记录数据库数据的位置。设置该选项后,接下来的驱动程序日志数据将被路由到指定目标。
file: 保存到 logFilePath 属性指定的文件。
server: 将日志数据提交到远程 Parasoft Virtualize 服务器以查看和分析。这样十分方便,可以在不需访问应用程序服务器(该服务器安装了 Parasoft JDBC 驱动程序)上的本地日志文件情况下执行配置调试。日志事件会被缓冲,每 5 秒以突发形式进行传输。详情请参阅配置 JDBC 操作日志。
stdout: 将 Parasoft JDBC 驱动程序日志事件路由到标准的控制台输出。
stderr: 将 Parasoft JDBC 驱动程序日志事件路由到标准的控制台错误输出。
logLevel
指定 Parasoft JDBC 驱动程序的日志详情级别(详细程度)。将日志路由到 logDestinationType 属性所提供的目标。
0: 关闭。任何目的地都不进行日志记录。
1: 只记录错误。该错误中包含堆栈跟踪。
2: 帮助调试和分析问题的日志错误和信息事件。
3: 包括每个日志条目的堆栈跟踪。
4: 包括 Parasoft JDBC 驱动程序和 Virtualize 服务器之间通信的通讯报文,但不包括堆栈跟踪。
5: 包括 3 和 4 的数据。
在有限的情况下谨慎使用日志级别 3 和 5,并且只运行场景。包括每个信息日志条目的堆栈跟踪会使日志文件内容急速增长。
virtualizeServerUrl
指定 Parasoft Virtualize 服务器的主机名。它的格式应该是 http://[Virtualize 服务器主机名或 IP 地址]:9080
默认端口号为 9080。只在 Virtualize 服务器使用不同端口号配置时才使用 9080 之外的端口号。
特定的驱动程序配置
要在录制期间将 Parasoft JDBC 驱动程序成功委托给原始驱动程序,需要指定以下属性。它们特定于正在使用的供应商驱动程序。
IBM DB2 JCC Driver
首先,请确保 Parasoft JDBC 驱动程序的 JDBC 提供程序的配置将 classpath 附加在其之后(从原始驱动程序数据源复制)。这通常看起来类似于:
${DB2UNIVERSAL_JDBC_DRIVER_PATH}/db2jcc.jar
${UNIVERSAL_JDBC_DRIVER_PATH}/db2jcc_license_cu.jar
${DB2UNIVERSAL_JDBC_DRIVER_PATH}/db2jcc_license_cisuz.jar
相似地,需要复制本机库路径。默认情况下,该路径为
${DB2UNIVERSAL_JDBC_DRIVER_NATIVEPATH}
其次,请确保 Parasoft JDBC 驱动程序数据源配置中的自定义属性定义了以下属性(最少):
- databaseName (string)
- driverType (integer)
- portNumber (integer)
- serverName (string)
这些属性的值可从原始驱动程序 JDBC 提供程序配置中获得。关于 DB2 驱动程序属性的更多信息,请参阅 http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/rjvdsprp.htm。
Apache Derby
Parasoft JDBC 驱动程序数据源配置中的自定义属性需要定义以下属性(最少):
- databaseName (string)
值可从原始驱动程序 JDBC 提供程序配置自定义属性部分中获得。
用于泛型实现的属性
如果正在使用其中一个“Generic/Other Drivers”,那么 Parasoft JDBC 驱动程序实现使用以下系统属性:
系统属性 | 等效驱动程序属性(上面的详细信息) |
---|---|
parasoft.virtualize.configuration.provider | 不等效 |
parasoft.virtualize.mode | virtualizeMode |
parasoft.virtualize.log.file.location | logFilePath |
parasoft.virtualize.log.destination | logDestinationType |
parasoft.virtualize.log.level | logLevel |
parasoft.virtualize.server.url | virtualizeServerUrl |
parasoft.virtualize.driver.proxy.direct | true|false (只针对系统属性) |
parasoft.virtualize.driver.register.jdbcproxydriver.in.drivermanager | 不等效 |
有关每个属性的详情,请使用该表和前面的内容了解相应的等效驱动程序属性(Properties for use with Driver Implementation Classes)。
parasoft.virtualize.configuration.provider
如果希望本地配置 Parasoft JDBC 驱动程序(与通过 Virtualize UI 进行的远程配置相对),则必须设置为 local
。
parasoft.virtualize.driver.proxy.direct
默认为 false。该标记决定了 Parasoft JDBC 驱动程序如何建立对原始驱动程序的委托行为(在录制模式下)。该选项取决于:
- 应用程序是否使用 java.sql.DriverManager 来创建 java.sql.Driver(在该情况下
false
为常用设置)实例。 - 驱动程序是否被直接初始化(在该情况下标记应设置为
true
)。
parasoft.virtualize.driver.register.jdbcproxydriver.in.drivermanager
默认为 false。该标记决定了 Parasoft JDBC 驱动器是否应该使用 DriverManager.registerDriver() 方法在运行时的 java.sql.DriverManager 中对自身进行注册。该选项取决于:
- 应用程序是否使用 java.sql.DriverManager 来创建 java.sql.Driver (在该情况下“true”为常用设置)实例。这适用于 ParaBank 样例应用程序,其中该属性应该设置为
true
。 - 驱动程序是否正在 Web 应用程序环境(如 WebSphere 或 WebLogic)中使用。在该情况下,该属性应该为
false
。
在本地模式下在虚拟化模式之间切换
在本地模式下,切换虚拟模式的过程会因使用的应用程序服务器而异:
- WebSphere
- WebLogic 9.2
- webMethods
- WebLogic 10.3 (11g)
- Stand-Alone Applications or Other Application Servers
WebSphere
一旦数据源配置了 Parasoft JDBC 驱动程序,模式便可在虚拟化和录制模式之间进行切换。切换模式之后,将需要重启应用程序服务器(或者采取其他步骤来消除重启的必要)。
WebSphere 应用程序服务器数据源创建一个 JDBC 连接池。因此,当可以及时切换模式时,这样做只会影响从驱动程序请求的新连接。现有的连接将维护它们现有的模式。为避开这一点,并允许立即更改 Parasoft JDBC 驱动程序模式,而无需等待连接被回收或服务器重新启动,那么可以减少在开发环境中破坏空闲连接的频率。
- 在 WebSphere 管理控制台,导航到 Parasoft JDBC 驱动程序数据源。
- 点击 Connection Pool Properties。
- 将 Reap time 和 Unused timeout 属性减少到一个更小的数(比如 15 秒),然后点击 OK。
- 重新启动服务器,使此更改生效。
一旦更改的这些连接池属性生效,那么 Parasoft JDBC 驱动程序模式(修改自定义属性 virtualizeMode)在不需重新启动的情况下便可使用,只要:
- 点击 Test connection,以便将新属性应用于驱动程序。
- 至少 15 秒内,不会通过该数据源进行 JDBC 活动,允许销毁与旧模式的任何现有连接。
WebLogic 9.2
WebLogic 9.2 要求重启服务器。
- 停止 WebLogic。
- 编辑在 WebLogic Environment Setup 步骤 2 中编辑的 startWebLogic 启动脚本。
- 将
parasoft.virtualize.mode
属性值切换为所需模式(详情请参阅Properties for use with Driver Implementation Classes)。 - 使用该启动脚本重启 WebLogic 服务器。
webMethods
一旦 JDBC 适配器配置了 Parasoft JDBC 驱动程序,那么您可以按照以下步骤更改模式(或任何其他驱动程序属性):
- 进入 IS 管理 web 界面。
- 展开 Adapters 部分,然后点击 JDBC Adapter。
- 禁用 JDBC Adapter 连接。
- 点击 Edit 图标。
- 根据需求修改属性。
virtualizeMode
属性控制模式 (record/virtualize/passthrough/hybrid/failover)—详情请参阅 virtualizeMode。
- 重启 JDBC Adapter 连接。
不需要启动服务器。
WebLogic 10.3 (11g)
WebLogic 10.3 不要求重启服务器。
- 在 Data Sources 部分下,点击新建的数据源。
- 打开连接池选项卡,根据需求修改
virtualizeMode
属性(或任何其他属性)。 - 看到这条消息后,
继续到变更中心,以便重启数据源。
然后,更改应该会变得活跃。
无论什么时候测试数据源连接,都将有可能显示“Connection test succeeded”,尽管 Virtualize 服务器已经关闭(当 Parasoft JDBC 驱动程序处于录制或虚拟化模式时),或者有些东西配置错误。确保查看传入 SQL 查询的 Virtualize 控制台视图,或者参考 Parasoft JDBC 驱动程序日志文件,以检查是否没有任何错误。
独立版应用程序或其他应用程序服务器
执行必要配置之后,可以通过更改 parasoft.virtualize.mode
属性在录制和虚拟化模式之间进行切换。
使用系统属性配置 Parasoft JDBC 驱动程序
如果数据源容器不允许设置自定义属性,那么可以使用系统属性配置 Parasoft JDBC 驱动程序。Parasoft JDBC 驱动程序将仍使用 Virtualize 服务器进行注册。将能从 Virtualize 服务器视图或从环境管理器视图对其进行控制。
若要使用系统属性配置 Parasoft JDBC 驱动程序:
- 将系统属性
parasoft.virtualize.configuration.provider
设置为属性。 指定
parasoft.virtualize.group.id
和parasoft.virtualize.server.url
系统属性。详情请参阅Properties for use with the Generic Implementation。- 当您准备录制时,使用 Virtualize 服务器视图或环境管理器切换 Parasoft JDBC 驱动程序模式(如切换 Parasoft JDBC 驱动程序模式中所说明)。
使用 JDBC URL 配置 Parasoft JDBC 驱动程序数据源
如果应用程序服务器不允许设置自定义属性,那么可以通过添加属性到 jdbc url 来配置 JDBC 数据源。所有环境都需要的驱动程序属性和系统属性可以使用以下模式设置到 jdbc url 中:
jdbc:parasoft:proxydriver:<property name>=<property value>&<property name>=<property value>:@<original jdbc url>
此 url 必须更改为以下面内容开始
jdbc:parasoft:proxydriver:
- 属性是使用(
&
)分隔的名称值对。Parasoft 属性必须以冒号和 @ 结束(如,:@
)。 - 原始 jdbc url 应该是 url 中的最后一项。
例如,使用带属性的数据源连接 Oracle 的 url 可能如下所示(假设已经设置了所需属性 virtualizeGroupId
和 virtualizeServerUrl
):
jdbc:parasoft:proxydriver:virtualizeGroupId=parasoft&virtualizeServerUrl=http://localhost:9080:@jdbc:oracle:thin:scott/tiger@localhost:1521:orcl