0

JBoss [EAP] 4.3.0.GA_CP01 環境があり、変更する必要があります

TransactionTimeout 

のプロパティ

com.arjuna.ats.jbossatx.jta.TransactionManagerService

しかし、JMX-Console から MBean 経由で値を変更しようとするたびに; 次のスタック トレースが表示されます。

java.lang.IllegalStateException: Cannot set transaction timeout once MBean has started
com.arjuna.ats.jbossatx.jta.TransactionManagerService.setTransactionTimeout(TransactionManagerService.java:323)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.jboss.mx.interceptor.AttributeDispatcher.invoke(AttributeDispatcher.java:136)
org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
org.jboss.mx.interceptor.ModelMBeanAttributeInterceptor.invoke(ModelMBeanAttributeInterceptor.java:103)
org.jboss.mx.interceptor.PersistenceInterceptor.invoke(PersistenceInterceptor.java:76)
org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
org.jboss.mx.server.AbstractMBeanInvoker.setAttribute(AbstractMBeanInvoker.java:461)
org.jboss.mx.server.MBeanServerImpl.setAttribute(MBeanServerImpl.java:608)
org.jboss.jmx.adaptor.control.Server.setAttributes(Server.java:206)
org.jboss.jmx.adaptor.html.HtmlAdaptorServlet.updateAttributes(HtmlAdaptorServlet.java:236)
org.jboss.jmx.adaptor.html.HtmlAdaptorServlet.processRequest(HtmlAdaptorServlet.java:98)
org.jboss.jmx.adaptor.html.HtmlAdaptorServlet.doPost(HtmlAdaptorServlet.java:82)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

実行時にサーバーをバウンスせずに TransactionTimeout の値をプログラムで変更する方法はありますか??

4

2 に答える 2

2

これを行う方法の groovy の例を次に示します (JBoss 4.3.0.GA_CP01 インスタンス内に埋め込まれた groovy を使用):

mbeanserver.getAttribute(JMXHelper.objectName("jboss:service=TransactionManager"), "TransactionManager").setTransactionTimeout(200);

基本的に、MBeanServicecom.arjuna.ats.jbossatx.jta.TransactionManagerServiceではデフォルトのトランザクション タイムアウトを変更できませんが、属性TransactionManager ( com.arjuna.ats.jbossatx.jta.TransactionManagerDelegateのインスタンス) を取得すると、メソッドが公開されます。

public void com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.setTransactionTimeout(int) throws javax.transaction.SystemException

これにより、MBean のTransactionTimeout属性で報告される値は変更されませんが、このメソッドが呼び出された後に開始されたすべてのトランザクションには、新しいトランザクション タイムアウトが設定されることに注意してください。

よりグルーヴィーなコード:

def txManager = mbeanserver.getAttribute(JMXHelper.objectName("jboss:service=TransactionManager"), "TransactionManager");
TX.exec({
    println "Timeout:${txManager.getTransactionTimeout()}";
});
txManager.setTransactionTimeout(txManager.getTransactionTimeout() * 2);
TX.exec({
    println "Timeout:${txManager.getTransactionTimeout()}";
});

出力:

タイムアウト:200
タイムアウト:400

于 2012-07-09T14:38:33.413 に答える
0

ありがとうニコラス!

実行時にトランザクションタイムアウトを変更するために使用できる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());

引用し たように、これは MBean の TransactionTimeout 属性で報告される値を変更しないことに注意してください。ただし、値はこの操作をポストするすべてのトランザクションに対して有効になります。

于 2012-07-13T12:29:51.113 に答える