2012-07-09 10 views
0

우리는 JBoss의 [EAP] 4.3.0.GA_CP01 환경을 가지고 있고 나는런타임시 com.arjuna.ats.jbossatx.jta.TransactionManagerService TransactionTimeout의 값을 변경하는 방법은 무엇입니까?

com.arjuna.ats.jbossatx.jta.TransactionManagerService 

TransactionTimeout 

속성을 수정해야하지만 난 JMX 콘솔에서의 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의 값을 변경하는 프로그래밍 방법이 있나요 ?? : 다음 스택 트레이스가 나타난다

답변

0

당신에게 니콜라스 감사합니다! 여기

런타임에 트랜잭션 타임 아웃을 변경하는 데 사용할 수있는 자바 코드는

...

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에보고 된 값을 변경하지 않습니다 하는 것으로 속성 그러나이 값은이 작업을 게시 한 모든 트랜잭션에 적용됩니다.

2

다음은이 작업을 수행하는 방법에 대한 그루비 예입니다 (JBoss의 4.3.0.GA_CP01 예를 안에 끝내 포함하여) :

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

는 기본적으로 MBeanService com.arjuna.ats.jbossatx.jta.TransactionManagerService는 기본 트랜잭션 타임 아웃을 변경할 수 없습니다

public void com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.setTransactionTimeout(int) throws javax.transaction.SystemException 
: 당신이 속성 TransactionManager를를 검색 할 경우, 그러나 ( com.arjuna.ats.jbossatx.jta.TransactionManagerDelegate의 인스턴스),이 메소드를 노출

이것은 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

+0

감사합니다 .... 내 환경에서 이것을 어떻게 사용할 수 있는지 보겠습니다. 저는 Groovy를 사용하지 않습니다. – SiB

+1

예 ... 신속하게 테스트 할 수 있고 의사 코드로 대개의 경우 의도가 명확하므로 예제에 유용합니다. – Nicholas

관련 문제