2012-07-13 60 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