1

以前にこの質問をしました実行時に 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コンソールからチェックすると、トランザクションタイムアウトは同じです。

デバッグすると、mBeanServer からフェッチされた TM インスタンスと jmx-console で使用可能な TM インスタンスが異なることがわかりました。

JMX コンソールで利用可能な TM インスタンスを更新する方法はありますか?

4

2 に答える 2

1

バーラト;

これらは異なるオブジェクトインスタンスですが、トランザクションマネージャーは1つだけです。表示されているのは、内部Arjunaトランザクションマネージャーコアの2つの異なるラッパー/プロキシです。このコードは、2つの異なるプロキシから現在のトランザクションを取得しますが、実際のトランザクションの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> Transaction:TransactionImple <ac、BasicAction:ae60d43:d590:4ffc7013:265841 status:ActionStatus.RUNNING> Timeout:200 TransactionImple <ac、BasicAction:ae60d43 :d590:4ffc7013:265842ステータス:ActionStatus.RUNNING>トランザクション:TransactionImple <ac、BasicAction:ae60d43:d590:4ffc7013:265842ステータス:ActionStatus.RUNNING>タイムアウト:400

于 2012-07-13T16:20:18.893 に答える
0

上記のコードは機能し、トランザクションのタイムアウトを変更します。@Nicholasが述べ たように、それらは異なるオブジェクトインスタンスですが、トランザクションマネージャーは1つしかありません。

ただし 、MBean の TransactionTimeout 属性で報告される値は変更されません

これにより、そもそもこの質問をするようになりました。

于 2012-07-13T12:33:19.913 に答える