记录用于回放的 JDBC 调用过程
方便开发人员和测试人员阅读的 JDBC 调用过程其记录形式不便于进行解析,因此并不能直接被用来回放的 JDBC 调用过程。为了简化准备数据的过程,JdbcProxy 还可以生成一种用于回放 JDBC 调用过程的,特别是易于在 HTTP 服务器上使用的记录文件。在运行新的程序之前,我们首先需要新建一个空的文件夹 output 用来存放 JdbcProxy 生成的一系列 request/response 文件,然后将 url 做以下修改,如 清单 3 所示。
清单 3
String url = "jdbc:stubtracer:output:COM.ibm.db2.jdbc.app.DB2Driver:jdbc:db2:SAMPLE"; |
URL 结构如下:
jdbc:stubtracer:<foldername>:<driver>:<url> |
其中:
<foldername> 是输出 request/response 文件的位置;如果为空则将文件内容输出到控制台。
<driver> 是数据库驱动名,该示例程序使用的是 DB2 的驱动。
<url> 是数据源的 URL,该示例程序使用 jdbc:db2:SAMPLE,不需要用户名和密码。
运行上述程序会在指定目录下生成 32 个以 request/response 开头的文本文件,如图 1所示。
图 1. request/response 文件
这些文件包含了回放 JDBC 调用过程所需的所有请求和响应。以建立 Connection 的请求为例,该示例程序对数据库的第一个请求就是建立 Connection,这个过程记录在 request_0_0.txt 文件中,参见清单 4。其中文件名中的 2 个" 0 "分别代表本次 JDBC 调用的 id 和 status,调用的方法是 connect 。
清单 4
<?xml version="1.0" encoding="UTF-8"?> <request> <class>java.sql.Driver</class> <id>0</id> <status>0</status> <method>connect</method> <parameter> <class>java.lang.String</class> <value>jdbc:db2:SAMPLE</value> </parameter> <parameter> <class>java.util.Properties</class> <value>{language=C}</value> </parameter> </request> |
JdbcProxy 会根据 request 文件中 id 和 status 的值找到对应的 response 文件,在本例中为 response_0_0.txt,参见清单 5。在 response_0_0.txt 中,我们看到已经新建了一个 java.sql.Connection 的对象,并且指定了下一个请求的 id 和 status 。
清单 5
<?xml version="1.0" encoding="UTF-8"?> <response> <newstatus>1</newstatus> <returnvalue> <nl.griffelservices.proxy.stub.ProxyObject> <class>java.sql.Connection</class> <id>1</id> <status>0</status> </nl.griffelservices.proxy.stub.ProxyObject> </returnvalue> </response> |