You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by pe...@apache.org on 2006/09/07 20:38:08 UTC
svn commit: r441172 - in /tomcat/container/tc5.5.x:
catalina/src/share/org/apache/catalina/ant/jmx/Arg.java
catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorSetTask.java
webapps/docs/changelog.xml webapps/docs/monitoring.xml
Author: pero
Date: Thu Sep 7 11:38:07 2006
New Revision: 441172
URL: http://svn.apache.org/viewvc?view=rev&rev=441172
Log:
Add multi attribute setting to jmx:set JMX remote ant task.
Patch contributed by Didier Donsez
Modified:
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ant/jmx/Arg.java
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorSetTask.java
tomcat/container/tc5.5.x/webapps/docs/changelog.xml
tomcat/container/tc5.5.x/webapps/docs/monitoring.xml
Modified: tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ant/jmx/Arg.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ant/jmx/Arg.java?view=diff&rev=441172&r1=441171&r2=441172
==============================================================================
--- tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ant/jmx/Arg.java (original)
+++ tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ant/jmx/Arg.java Thu Sep 7 11:38:07 2006
@@ -23,9 +23,13 @@
* @since 5.5.10
*/
public class Arg {
+ String name;
String type;
String value;
+ public void setName( String name) {
+ this.name=name;
+ }
public void setType( String type) {
this.type=type;
}
@@ -35,11 +39,12 @@
public void addText( String text ) {
this.value=text;
}
-
+ public String getName() {
+ return name;
+ }
public String getValue() {
return value;
}
-
public String getType() {
return type;
}
Modified: tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorSetTask.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorSetTask.java?view=diff&rev=441172&r1=441171&r2=441172
==============================================================================
--- tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorSetTask.java (original)
+++ tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorSetTask.java Thu Sep 7 11:38:07 2006
@@ -1,5 +1,5 @@
/*
- * Copyright 2002,2004-2005 The Apache Software Foundation.
+ * Copyright 2002,2004-2006 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,7 +18,12 @@
package org.apache.catalina.ant.jmx;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
import javax.management.Attribute;
+import javax.management.AttributeList;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
@@ -30,9 +35,7 @@
/**
* Access <em>JMX</em> JSR 160 MBeans Server.
* <ul>
- * <li>Get Mbeans attributes</li>
- * <li>Show Get result as Ant console log</li>
- * <li>Bind Get result as Ant properties</li>
+ * <li>Set Mbeans attributes</li>
* </ul>
* <p>
* Examples:
@@ -42,7 +45,6 @@
* <jmx:set
* host="127.0.0.1"
* port="9014"
- * ref=""
* name="Catalina:type=Manager,path="/ClusterTest",host=localhost"
* attribute="maxActiveSessions"
* value="100"
@@ -50,6 +52,26 @@
* echo="false">
* />
* </pre>
+ *
+ * or
+ *
+ * <pre>
+ * <jmx:set
+ * host="127.0.0.1"
+ * port="9014"
+ * name="Catalina:type=Manager,path="/ClusterTest",host=localhost"
+ * echo="false">
+ * >
+ *
+ * <arg name="notifyListenersOnReplication"
+ * value="true"
+ * type="boolean"/>
+ * <arg name="notifySessionListenersOnReplication"
+ * value="true"
+ * type="boolean"/>
+ * </jmx:set>
+ *
+ * </pre>
* </p>
* <p>
* First call to a remote MBeanserver save the JMXConnection a referenz <em>jmx.server</em>
@@ -69,13 +91,14 @@
private String value;
private String type;
private boolean convert = false ;
-
+ private List args=new ArrayList();
+
// ----------------------------------------------------- Instance Info
/**
* Descriptive information describing this implementation.
*/
- private static final String info = "org.apache.catalina.ant.JMXAccessorSetTask/1.0";
+ private static final String info = "org.apache.catalina.ant.JMXAccessorSetTask/1.1";
/**
* Return descriptive information about this implementation and the
@@ -89,21 +112,30 @@
}
// ------------------------------------------------------------- Properties
-
+
+ public void addArg(Arg attribute) {
+ args.add(attribute);
+ }
+
+ public List getArgs() {
+ return args;
+ }
+
+
/**
* @return Returns the attribute.
*/
public String getAttribute() {
return attribute;
}
-
+
/**
* @param attribute The attribute to set.
*/
public void setAttribute(String attribute) {
this.attribute = attribute;
}
-
+
/**
* @return Returns the value.
*/
@@ -116,23 +148,23 @@
public void setValue(String value) {
this.value = value;
}
-
-
+
+
/**
* @return Returns the type.
*/
public String getType() {
return type;
}
-
+
/**
* @param valueType The type to set.
*/
public void setType(String valueType) {
this.type = valueType;
}
-
-
+
+
/**
* @return Returns the convert.
*/
@@ -146,7 +178,7 @@
this.convert = convert;
}
// ------------------------------------------------------ protected Methods
-
+
/**
* Execute the specified command, based on the configured properties. The
* input stream will be closed upon completion of this task, whether it was
@@ -156,17 +188,29 @@
* if an error occurs
*/
public String jmxExecute(MBeanServerConnection jmxServerConnection)
- throws Exception {
+ throws Exception {
if (getName() == null) {
throw new BuildException("Must specify a 'name'");
}
- if ((attribute == null || value == null)) {
+
+ if ((attribute == null || value == null) && args.isEmpty()) {
throw new BuildException(
- "Must specify a 'attribute' and 'value' for set");
+ "Must specify a 'attribute' and 'value' or 'attribute' elements for set with args");
}
- return jmxSet(jmxServerConnection, getName());
- }
+ if (args.isEmpty()) {
+ return jmxSet(jmxServerConnection, getName());
+ } else {
+ if ((attribute != null && value != null)) {
+ Arg a = new Arg();
+ a.setName(attribute);
+ a.setValue(value);
+ a.setType(type);
+ args.add(a);
+ }
+ return jmxSetWithAttributList(jmxServerConnection, getName());
+ }
+ }
/**
* @param jmxServerConnection
@@ -190,8 +234,94 @@
attribute, realValue));
return null;
}
-
+ /**
+ * set several attributes in one invocation to the server
+ * @param jmxServerConnection
+ * @param name
+ * @throws Exception
+ */
+ protected String jmxSetWithAttributList(MBeanServerConnection jmxServerConnection,
+ String name) throws Exception {
+
+ AttributeList attributeList = new AttributeList();
+ MBeanInfo minfo = null;
+
+ for (Iterator iter = args.iterator(); iter.hasNext();) {
+ Arg element = (Arg) iter.next();
+ Object realValue;
+ if (element.getType() != null) {
+ realValue = convertStringToType(element.getValue(), element
+ .getType());
+ } else {
+ if (isConvert()) {
+ if (minfo == null)
+ minfo = getMBeanInfo(jmxServerConnection, name);
+ String mType = getMBeanAttributeType(minfo, element
+ .getName());
+ realValue = convertStringToType(element.getValue(), mType);
+ } else
+ realValue = element.getValue();
+ }
+ Attribute a = new Attribute(element.getName(), realValue);
+ attributeList.add(a);
+ }
+
+ AttributeList settedAttributes = jmxServerConnection.setAttributes(
+ new ObjectName(name), attributeList);
+ if (isEcho())
+ if (settedAttributes.isEmpty()) {
+ getProject().log("No setted attributes!");
+ } else {
+ StringBuffer sb = new StringBuffer();
+ sb.append("Attributes");
+ for (Iterator iter = settedAttributes.iterator(); iter
+ .hasNext();) {
+ Attribute element = (Attribute) iter.next();
+ sb.append(' ').append(element.getName());
+ }
+ sb.append(" were setted");
+ getProject().log(sb.toString());
+ }
+ return null;
+ }
+
+ /**
+ * Get MBean Attribute from the MBeanInfo
+ * @param minfo
+ * @param attribute
+ * @return The type
+ * @throws Exception
+ */
+ protected String getMBeanAttributeType(
+ MBeanInfo minfo,
+ String attribute) throws Exception {
+ String mattrType = null;
+ MBeanAttributeInfo attrs[] = minfo.getAttributes();
+ if (attrs != null) {
+ for (int i = 0; mattrType == null && i < attrs.length; i++) {
+ if (attribute.equals(attrs[i].getName()))
+ mattrType = attrs[i].getType();
+ }
+ }
+ return mattrType;
+ }
+
+
+ /**
+ * Get the MBeanInfo from Mbean Server
+ * @param jmxServerConnection
+ * @param name
+ * @return The mbean info
+ * @throws Exception
+ */
+ protected MBeanInfo getMBeanInfo(
+ MBeanServerConnection jmxServerConnection,
+ String name) throws Exception {
+ ObjectName oname = new ObjectName(name);
+ MBeanInfo minfo = jmxServerConnection.getMBeanInfo(oname);
+ return minfo;
+ }
/**
* Get MBean Attriute from Mbean Server
@@ -217,4 +347,4 @@
}
return mattrType;
}
- }
+}
Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?view=diff&rev=441172&r1=441171&r2=441172
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Thu Sep 7 11:38:07 2006
@@ -18,7 +18,9 @@
<subsection name="General">
<changelog>
<update>
- </update>
+ Add multi attribute setting to jmx:set JMX remote ant task.
+ Patch contributed by Didier Donsez (pero)
+ </update>
</changelog>
</subsection>
<subsection name="Catalina">
Modified: tomcat/container/tc5.5.x/webapps/docs/monitoring.xml
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/monitoring.xml?view=diff&rev=441172&r1=441171&r2=441172
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/monitoring.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/monitoring.xml Thu Sep 7 11:38:07 2006
@@ -507,6 +507,16 @@
/>
</source>
</p>
+<p>
+Examples to set multiple remote mbean attributes<br/>
+<source>
+ <jmx:set
+ name="java.lang:type=Threading">
+ <arg name="ThreadContentionMonitoringEnabled" value="true" type="boolean"/>
+ <arg name="ThreadCpuTimeEnabled" value="false" type="boolean"/>
+ </jmx:set>
+</source>
+</p>
</section>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org