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

如何在运行时更改com.arjuna.ats.jbossatx.jta.TransactionManagerService TransactionTimeout的值?继续的,jboss,transactions,jmx,jta,Jboss,Transactions,Jmx,Jta,我刚才问过这个问题 根据提供的答案,我找到了以下java代码来完成我的工作: MBeanServer mBeanServer = MBeanServerLocator.locateJBoss(); TransactionManagerDelegate tmd = (TransactionManagerDelegate) mBeanServer.getAttribute(new ObjectName("jboss:service=TransactionManager"), "Transaction

我刚才问过这个问题

根据提供的答案,我找到了以下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控制台检查时,事务超时仍然是相同的

调试时,我发现从mBeanServer获取的TM实例和jmx控制台上可用的TM实例是不同的


有没有办法更新JMX控制台上可用的TM实例?

上面的代码可以工作,并且确实更改了事务超时。正如@Nicholas提到的 它们是不同的对象实例,但只有一个事务管理器。

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


这让我首先问了这个问题

上面的代码起作用并且确实更改了事务超时。正如@Nicholas提到的 它们是不同的对象实例,但只有一个事务管理器。

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

这让我首先问了这个问题

Bharat

它们是不同的对象实例,但只有一个事务管理器。您看到的只是内部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超时:200 TransactionImple事务:TransactionImple 超时:400

巴拉特

它们是不同的对象实例,但只有一个事务管理器。您看到的只是内部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超时:200 TransactionImple事务:TransactionImple 超时:400


谢谢你@Nicholas!!!最终,我也找到了同样的答案。你的解决方案对我有效。谢谢@Nicholas!!!最终,我也找到了同样的答案。你的解决方案对我有效。