2012-07-13 23 views
1

我问这个问题前面How to change value of com.arjuna.ats.jbossatx.jta.TransactionManagerService TransactionTimeout at the run-time?如何在运行时更改com.arjuna.ats.jbossatx.jta.TransactionManagerService TransactionTimeout的值?继续

按照所提供的答案,我发现这个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控制台检查交易超时仍然是相同的。

当我调试,我发现TM例如从JMX控制台上可用的MBeanServer和TM的实例获取是不同的!

有什么办法来更新TM实例,它可以用JMX控制台?

回答

0

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

然而 在MBean的TransactionTimeout属性报告的值不会改变

,这使我问这个问题放在首要位置。

1

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 <交流,BasicAction:ae60d43:D590:4ffc7013:265841 状态:ActionStatus.RUNNING > 交易:TransactionImple <交流,BasicAction:ae60d43:D590:4ffc7013:265841状态:ActionStatus.RUNNING >超时:200 TransactionImple <交流, BasicAction:ae60d 43:D590:4ffc7013:265842种状态:ActionStatus.RUNNING >交易:TransactionImple <交流,BasicAction: ae60d43:D590:4ffc7013:265842种状态:ActionStatus.RUNNING > 超时:400

+0

谢谢@Nicholas! !最终我能够弄清楚同样的道理。您的解决方案已为我工作。 – SiB 2012-07-16 06:09:50