/** * Copyright (c) Microsoft Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the * License at http://www.apache.org/licenses/LICENSE-2.0. * * THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION * ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, * MERCHANTABLITY OR NON-INFRINGEMENT. * * See the Apache Version 2.0 License for specific language governing * permissions and limitations under the License. */ 1. Overview BeanSpy is an open source technology provided by Microsoft for exposing JMX information from Java EE application servers through HTTP queries. It currently supports the following Java EE application servers and web containers: Tomcat 5.5, 6, 7 JBoss 4.2, 5.1, 6 WebSphere 6.1, 7 WebLogic 10gR3, 11gR1 The binary package contains 4 BeanSpy files digitally signed by Microsoft: BeanSpy.ear BeanSpy.war BeanSpy.HTTP.NoAuth.ear BeanSpy.HTTP.NoAuth.war BeanSpy.ear and BeanSpy.war are used in cases where the Java EE application server or web container is using HTTPs transport with basic auth servlet authentication. The HTTP.NoAuth version is used in HTTP transport without servlet authentication. 2. How to deploy BeanSpy If your Java EE application server or web container is using HTTPs with basic auth, deploy BeanSpy.ear to JBoss/WebSphere/WebLogic; deploy BeanSpy.war to Tomcat. For Tomcat/JBoss/WebSphere, BeanSpy requires a user role "monitoring" for querying JVM and MBeans, and a user role "invoke" for invoking methods on MBeans, for WebLogic, BeanSpy requires "monitors" role for quering JVM and MBeans and "operators" role for invoking methods on MBeans. If your Java EE application server or web container is using HTTP without authentication, rename BeanSpy.HTTP.NoAuth.ear to BeanSpy.ear and deploy it to JBoss/WebSphere/WebLogic; rename BeanSpy.HTTP.NoAuth.war to BeanSpy.war and deploy it to Tomcat. 3. How to query BeanSpy Once BeanSpy is deployed, you can query it through the browser or invoke method on MBeans using HTTP POST. The following are a few examples. For complete schema, please refer to the schema file in the source package. a) To query JVM stats for memory, Garbage Collection, class loading, and threads, use: http://<host:port>/BeanSpy/Stats b) To query configuration and version info about the Java EE application server or web container, use: http://<host:port>/BeanSpy/Stats/Info c) To query specific MBeans, use: http://<host:port>/BeanSpy/MBeans?JMXQuery=<BeanObjectName> Here, BeanObjectName conforms to JMX standard, for example, com.contoso:Type=J2EEApplication,* d) To invoke a method on a MBean, use HTTP POST: http://<host:port>/BeanSpy/MBeans/Invoke The HTTP post body should look like this: <Invoke> <BeanObjectName>com.contoso:name=CustomMBeanName</BeanObjectName> <Method name="FooMethod"> <Param name="p0" type="java.lang.Integer">400</Param> <Param name="p1" type="java.lang.String">bar</Param> </Method> </Invoke> Only primitive parameters are supported. Composite data types are not supported. 4. Additional parameters for BeanSpy queries There are a few parameters you can add to the URL to control the performance of your BeanSpy query. ________________________________________ MaxDepth Default maximum recursion depth when parsing MBeans Default value: 10 Modification: can be modified by adding parameters “MaxDepth” (case sensitive) in the URL. For example: “/MBeans?JMXQuery=com.microsoft.scx:jmxType=operationCall&MaxDepth=12”. ________________________________________ MaxCount Default maximum number of properties to process when parsing MBeans Default value: 500 Modification: can be modified by adding parameters “MaxCount” (case sensitive) in the URL. For example: “/MBeans?JMXQuery=com.microsoft.scx:jmxType=operationCall&MaxCount=200”. ________________________________________ MaxSize Default maximum size of the output XML when parsing MBeans. If the size of a XML file exceeds this value but does not exceed the absolute maximum XML file size (ABS_MAX_XML_SIZE), BeanSpy continues to proceed. However, it will reset the MaxDepth to the minimum which is 0. The same value is used as the default maximum size for the resultant XML when an Invoke POST call is processed. Default value: 2097152 (2MB) Modification: can be modified by adding parameters “MaxSize” (case sensitive) in the URL. For example: “/MBeans?JMXQuery=com.microsoft.scx:jmxType=operationCall&MaxSize=20000”. ________________________________________ ABS_MAX_XML_SIZE The absolute maximum size for the output. If the size of the output XML file exceeds this value, BeanSpy throws an exception and terminates. If the value is missing in the configuration file, use the default value which is 4M. Default value: 4184304 (4MB) Modification: can be modified by the end user in resources.configuration.config file. ________________________________________ 5. How to build BeanSpy Pre-requisites ________________________________________ To build the BeanSpy servlet application the following external files are required, download the respective packages and copy the files to the required locations. The Tomcat servlet-api file is required destination file: \source\ext\Tomcat\servlet-api.jar this file is available from http://tomcat.apache.org/ and is bundled in most Tomcat binary distributions. To include the build and execution of the unit tests the following junit jar files are required destination file: \source\ext\junit\junit-4.x.jar destination file: \source\ext\junit\junit-dep-4.x.jar these files are available from http://www.junit.org/ To build the BeanSpy project ________________________________________ Ant and java is used to build and package the java code into WAR and EAR files as well as build and execute the unit tests. Ant is available from http://ant.apache.org/ To build the servlet, run "ant" from the /build folder. To build and execute the junit tests, run "ant clean ears testrun" from the /build folder. The build.xml has support for both debug and release builds this is controlled by command line switches to ant, the default build is for release purposes to build the debug version run ant with the following switch "-Ddebug=true" i.e. "ant clean ears testrun -Ddebug=true". There are other build switches that can be used to control, java version, product version, verbosity and javadocs.