如何使用事务管理器

时间:2015-06-29 20:48:28

标签: transactions sap sybase sybase-ase xa

我使用新安装的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以允许事务支持?但是,除了那个命令之外,我在文档中找不到任何其他内容。

0 个答案:

没有答案