如何在运行时更改com.arjuna.ats.jbossatx.jta.TransactionManagerService TransactionTimeout的值?继续

时间:2012-07-13 06:33:59

标签: jboss transactions jmx jta

我之前提到过这个问题How to change value of com.arjuna.ats.jbossatx.jta.TransactionManagerService TransactionTimeout at the run-time?

根据提供的答案,我发现这个java代码可以完成我的工作:

MBeanServer mBeanServer = MBeanServerLocator.locateJBoss();
TransactionManagerDelegate tmd = (TransactionManagerDelegate) mBeanServer.getAttribute(new ObjectName("jboss:service=TransactionManager"), "TransactionManager");
System.out.println("Prev: " + tmd.getTransactionTimeout());
tmd.setTransactionTimeout(200);
System.out.println("New: " + tmd.getTransactionTimeout());

现在问题是......代码执行正常但是当我从JMX-console检查时,事务超时仍然是相同的。

当我调试时,我发现从mBeanServer获取的TM实例和jmx-console上可用的TM实例是不同的!

有没有办法更新JMX-Console上可用的TM实例?

2 个答案:

答案 0 :(得分:1)

巴勒特;

它们是不同的对象实例,但只有一个事务管理器。您所看到的只是内部Arjuna事务管理器核心的两个不同的包装器/代理。此代码从两个不同的代理获取当前事务,但实际事务UUID是相同的:

def txManager = mbeanserver.getAttribute(JMXHelper.objectName("jboss:service=TransactionManager"), "TransactionManager");
TX.exec({
    println txManager.getTransaction();
    println mbeanserver.getAttribute(JMXHelper.objectName("jboss:service=TransactionManager"), "UserTransaction");
    assert mbeanserver.getAttribute(JMXHelper.objectName("jboss:service=TransactionManager"), "UserTransaction").toString().replace("Transaction: ", "").equals(txManager.getTransaction().toString())
    println "Timeout:${txManager.getTransactionTimeout()}";
});
txManager.setTransactionTimeout(200);
TX.exec({
    println txManager.getTransaction();
    println mbeanserver.getAttribute(JMXHelper.objectName("jboss:service=TransactionManager"), "UserTransaction");
    assert mbeanserver.getAttribute(JMXHelper.objectName("jboss:service=TransactionManager"), "UserTransaction").toString().replace("Transaction: ", "").equals(txManager.getTransaction().toString())
    println "Timeout:${txManager.getTransactionTimeout()}";
});

输出:

  

TransactionImple< ac,BasicAction:ae60d43:d590:4ffc7013:265841   status:ActionStatus.RUNNING>   交易:TransactionImple< ac,BasicAction:ae60d43:d590:4ffc7013:265841状态:ActionStatus.RUNNING>超时:200 TransactionImple< AC,   BasicAction:ae60d43:d590:4ffc7013:265842状态:ActionStatus.RUNNING   >交易:TransactionImple< ac,BasicAction:   ae60d43:d590:4ffc7013:265842状态:ActionStatus.RUNNING>   超时:400

答案 1 :(得分:0)

上面的代码有效并且确实会更改事务超时。正如@Nicholas所说 它们是不同的对象实例,但只有一个事务管理器。

然而 MBean的TransactionTimeout属性中报告的值不会更改

这导致我首先提出这个问题。