如何恢复数据库事务
Liberty 事务管理器恢复不确定数据库事务时,它会使用唯一标识或 JNDI 名称来定位当前 dataSource 元素,然后确定要用于恢复的用户标识和密码。
通过在 server.xml 配置文件中指定 dataSource 元素的属性来配置数据源。可对数据源指定唯一标识或 jndiName 属性,如下所示:
<dataSource id="ds1" jndiName="jdbc/ds1"... />
对数据源参与的事务暂挂恢复时,不得更改 id 或 jndiName 属性的值。如果更改 dataSource 元素的任何其他属性,那么恢复时会保留这些更改。因此,(例如)可添加 recoveryAuthDataRef 属性以指定要用于恢复的数据库用户标识和密码。
用于恢复的数据库用户标识和密码是根据以下优先顺序确定的:
- 如果 dataSource 元素定义了 recoveryAuthDataRef 属性,那么会使用来自 authData 元素的用户标识和密码。例如:
<authData id="recoveryAuth" user="dbuser1" password="{xor}Oz0vKDtu"/> <dataSource id="ds1" jndiName="jdbc/ds1" jdbcDriverRef="DB2" recoveryAuthDataRef="recoveryAuth" .../>
- 如果使用容器管理的认证,那么会使用来自容器管理的认证别名的用户标识和密码。例如:
- 在 ibm-web-bnd.xml 文件中,您具有下列代码:
<resource-ref name="jdbc/ds1ref" binding-name="jdbc/ds1"> <authentication-alias name="user1Auth"/> </resource-ref>
- 在 server.xml 文件中,必须定义以下代码:
<authData id="user1Auth" user="dbuser1" password="{xor}Oz0vKDtu"/> <dataSource id="ds1" jndiName="jdbc/ds1" jdbcDriverRef="DB2" .../>
- 在 ibm-web-bnd.xml 文件中,您具有下列代码:
- 使用来自 dataSource 元素的用户标识和密码。例如:
<dataSource id="ds1" jndiName="jdbc/ds1" jdbcDriverRef="DB2" ...> <properties.db2.jcc databaseName="testdb" user="dbuser1" password="{xor}Oz0vKDtu"/> </dataSource>
- 如果上述条件都不满足,并且尝试在没有任何用户标识和密码的情况下进行恢复,那么其行为由 JDBC 驱动程序和数据库确定。
注: 如果事务恢复由应用程序定义的数据源(例如,@DataSourceDefinition
注释或部署描述符中的 <data-source> 元素)执行,那么必须确保进行恢复时关联应用程序正在运行。不能使用
server.xml 文件中的配置设置来恢复应用程序定义的数据源。