我使用新安装的SAP Application Server Enterprise(ASE)作为IBM WebSphere Application Server Liberty配置文件服务器的数据库。
尝试登记one-pahse资源和两阶段资源时
在同一个全局事务中,尝试使用时会发生死锁
第二个资源。首次配置服务器时,系统
没有为双资源交易陷入僵局而是发出了
表示没有为XA配置ASE的错误消息。该
文档表明,为了启用ASE的XA,
应该使用isql执行以下命令:
sp_configure 'enable DTM', 1
此命令应启用分布式事务管理器(DTM)并允许ASE支持XA。执行此命令后,DTM 似乎已启用,相同的代码不再失败说 ASE未配置为XA。但是,代码有几行 执行第二个JDBC PreparedStatement时更远,然后死锁。
查看ASE上的锁定信息并手动查杀 代码继续死锁的进程,但报告错误,如 在这种情况下可以预期。
根据ASE文档,没有其他要求 除了启用DTM之外,还要将服务器配置为支持XA。 但是,考虑到导致死锁的这个简单用例,它似乎是一个 配置问题。
示例java代码:
tran.begin();
Connection con1 = ds1.getConnection(); // Get a one-phase capable
resource
Connection con2 = ds2.getConnection(); // Get a two-phase capable
resource
// Enlist a one-phase resource in the global transaction
PreparedStatement pstmt = con1.prepareStatement("insert into
cities values (?, ?, ?)");
pstmt.setString(1, "CityA");
pstmt.setInt(2, 842);
pstmt.setString(3, "CityB");
pstmt.executeUpdate();
// Enlist a two-phase resource in the global transaction
pstmt = con2.prepareStatement("insert into cities values (?, ?, ?)");
pstmt.setString(1, "CityC");
pstmt.setInt(2, 3252);
pstmt.setString(3, "CityD");
//**************************************************
// Deadlock occurs here, on the executeUpdate() call
pstmt.executeUpdate();
//**************************************************
tran.commit();
简而言之,我的问题是:除了执行sp_configure 'enable DTM', 1
之外,如何配置sybase ASE以允许事务支持?但是,除了那个命令之外,我在文档中找不到任何其他内容。