blob: b80c7359c34d2066bc122ab9f7df0ab3e7bc01f5 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head>
<title>Apache Felix - iPOJO JMX Handler</title>
<link rel="stylesheet" href="ipojo-jmx-handler_files/site.css" type="text/css" media="all">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head><body>
<div class="title"><div class="logo"><a href="http://felix.apache.org/site/index.html"><img alt="Apache Felix" src="ipojo-jmx-handler_files/logo.png" border="0"></a></div><div class="header"><a href="http://www.apache.org/"><img alt="Apache" src="ipojo-jmx-handler_files/apache.png" border="0"></a></div></div>
<div class="menu">
<ul>
<li><a href="http://felix.apache.org/site/news.html" title="news">news</a></li>
<li><a href="http://felix.apache.org/site/license.html" title="license">license</a></li>
<li><a href="http://felix.apache.org/site/downloads.cgi" rel="nofollow">downloads</a></li>
<li><a href="http://felix.apache.org/site/documentation.html" title="documentation">documentation</a></li>
<li><a href="http://felix.apache.org/site/mailinglists.html" title="mailinglists">mailing lists</a></li>
<li><a href="http://felix.apache.org/site/contributing.html" title="Contributing">contributing</a></li>
<li><a href="http://www.apache.org/" rel="nofollow">asf</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html" rel="nofollow">sponsorship</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html" rel="nofollow">sponsors</a>
<!-- ApacheCon Ad -->
<iframe src="ipojo-jmx-handler_files/button.html" style="border-width: 0pt; float: left;" scrolling="no" frameborder="0" height="135" width="135"></iframe>
<p style="height: 100px;">
<!-- ApacheCon Ad -->
</p></li></ul> </div>
<div class="main">
<style type="text/css">
@import url(http://people.apache.org/~clement/ipojo/site/superfish.css);
</style>
<style type="text/css">
@import url(http://people.apache.org/~clement/ipojo/site/style.css);
</style>
<p>
<script class="javascript" src="ipojo-jmx-handler_files/shCore.js"></script>
<script class="javascript" src="ipojo-jmx-handler_files/shBrushCSharp.js"></script>
<script class="javascript" src="ipojo-jmx-handler_files/shBrushPhp.js"></script>
<script class="javascript" src="ipojo-jmx-handler_files/shBrushJScript.js"></script>
<script class="javascript" src="ipojo-jmx-handler_files/shBrushVb.js"></script>
<script class="javascript" src="ipojo-jmx-handler_files/shBrushSql.js"></script>
<script class="javascript" src="ipojo-jmx-handler_files/shBrushXml.js"></script>
<script class="javascript" src="ipojo-jmx-handler_files/shBrushShell.js"></script>
<script class="javascript" src="ipojo-jmx-handler_files/shBrushDelphi.js"></script>
<script class="javascript" src="ipojo-jmx-handler_files/shBrushPython.js"></script>
<script class="javascript" src="ipojo-jmx-handler_files/shBrushJava.js"></script>
<script type="text/javascript" src="ipojo-jmx-handler_files/jquery-1.js"></script>
<script type="text/javascript" src="ipojo-jmx-handler_files/hoverIntent.js"></script>
<script type="text/javascript" src="ipojo-jmx-handler_files/superfish.js"></script>
<script type="text/javascript" src="ipojo-jmx-handler_files/supersubs.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("ul.sf-menu").supersubs({
minWidth: 14, // minimum width of sub-menus in em units
maxWidth: 30, // maximum width of sub-menus in em units
extraWidth: 1 // extra width can ensure lines don't sometimes turn over
// due to slight rounding differences and font-family
}).superfish(); // call supersubs first, then superfish, so that subs are
// not display:none when measuring. Call before initialising
// containing tabs for same reason.
});
</script>
</p><div class="main">
<div class="page-header">
<img src="ipojo-jmx-handler_files/header.png" class="header">
<a href="http://ipojo.org/"><img src="ipojo-jmx-handler_files/ipojo.png" class="header-logo" width="225"></a>
<ul class="sf-menu sf-js-enabled sf-shadow" id="ipojo-menu">
<li class="current">
<!-- Menu Overview -->
<a href="" class="sf-with-ul">Overview<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
<ul style="float: none; width: 14em; display: none; visibility: hidden;">
<li style="white-space: normal; float: left; width: 100%;">
<a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo.html" title="Apache Felix iPOJO">Home</a>
</li>
<li style="white-space: normal; float: left; width: 100%;">
<a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-why-choose-ipojo.html" title="apache-felix-ipojo-why-choose-ipojo">Why choose iPOJO</a>
</li>
<li style="white-space: normal; float: left; width: 100%;">
<a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-successstories.html" title="apache-felix-ipojo-successstories">Success stories</a>
</li>
<li style="white-space: normal; float: left; width: 100%;">
<a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-feature-overview.html" title="Apache Felix iPOJO Feature Overview">Features</a>
</li>
</ul>
</li>
<li class="">
<!-- Menu download -->
</li><li>
<a href="http://felix.apache.org/site/download.html" title="Download">Download </a>
</li>
<li class="">
<!-- Menu Documentation -->
<a href="" class="sf-with-ul">Documentation<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
<ul style="float: none; width: 14em; display: none; visibility: hidden;">
<!-- sub- menu : getting started -->
<li style="white-space: normal; float: left; width: 100%;" class="">
<a style="float: none; width: auto;" href="" class="sf-with-ul">Getting Started<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
<ul style="left: 14em; float: none; width: 14em; display: none; visibility: hidden;">
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-in-10-minutes.html" title="iPOJO in 10 minutes">iPOJO in 10 minutes</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/how-to-use-ipojo-annotations.html" title="How to use iPOJO Annotations">Using Annotations</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-hello-word-maven-based-tutorial.html" title="iPOJO Hello Word (Maven-Based) tutorial">Maven tutorial</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-advanced-tutorial.html" title="iPOJO Advanced Tutorial">Advanced tutorial</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-dosgi.html" title="apache-felix-ipojo-dosgi">Using Distributed OSGi</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-composition-tutorial.html" title="iPOJO Composition Tutorial">Application Composition</a></li>
</ul>
</li> <!-- end of getting started -->
<!-- sub menu : Describing Components -->
<li style="white-space: normal; float: left; width: 100%;" class="">
<a style="float: none; width: auto;" href="http://felix.apache.org/site/describing-components.html" class="sf-with-ul">Describing components<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
<ul style="left: 14em; float: none; width: 14em; display: none; visibility: hidden;">
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/service-requirement-handler.html" title="Service Requirement Handler">Requiring a service</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/providing-osgi-services.html" title="Providing OSGi services">Providing a service</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/lifecycle-callback-handler.html" title="Lifecycle Callback Handler">Lifecycle management</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/configuration-handler.html" title="Configuration Handler">Configuration</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/architecture-handler.html" title="Architecture Handler">Introspection</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/controller-lifecycle-handler.html" title="Controller Lifecycle Handler">Impacting the lifecycle</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/event-admin-handlers.html" title="Event Admin Handlers">Asynchronous communication</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="" title="iPOJO JMX Handler">JMX management</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/extender-pattern-handler.html" title="Extender Pattern Handler">Extender pattern</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/white-board-pattern-handler.html" title="White Board Pattern Handler">Whiteboard pattern</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/temporal-service-dependency.html" title="Temporal Service Dependency">Temporal dependencies</a></li>
</ul>
</li> <!-- End of describing components -->
<!-- sub- menu : User Guide -->
<li style="white-space: normal; float: left; width: 100%;" class="">
<a style="float: none; width: auto;" href="" class="sf-with-ul">User Guide<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
<ul style="left: 14em; float: none; width: 14em; display: none; visibility: hidden;">
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/using-xml-schemas.html" title="Using XML Schemas">XML Schemas</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-api.html" title="apache-felix-ipojo-api">API</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-testing-components.html" title="apache-felix-ipojo-testing-components">Testing components</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-eclipse-integration.html" title="apache-felix-ipojo-eclipse-integration">Eclipse Integration</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-faq.html" title="iPOJO FAQ">FAQ</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-reference-card.html" title="iPOJO-Reference-Card">Reference Card</a></li>
</ul>
</li> <!-- end of user guide -->
<!-- sub- menu : Dev Guide -->
<li class="" style="white-space: normal; float: left; width: 100%;">
<a style="float: none; width: auto;" href="" class="sf-with-ul">Advanced Topics<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
<ul style="left: 14em; float: none; width: 14em; display: none; visibility: hidden;">
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/ipojo/api/1.2.0" rel="nofollow">Javadoc</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/how-to-write-your-own-handler.html" title="How to write your own handler">Handler guide</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/how-to-use-ipojo-manipulation-metadata.html" title="How to use iPOJO Manipulation Metadata">Manipulation Metadata </a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/dive-into-the-ipojo-manipulation-depths.html" title="Dive into the iPOJO Manipulation depths">Dive into the iPOJO Manipulation depths</a></li>
</ul>
</li> <!-- End of Dev guide -->
</ul>
</li> <!-- End of doc -->
<!-- Menu 4 : Tools -->
<li class="">
<a href="" class="sf-with-ul">Tools<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
<ul style="float: none; width: 14em; display: none; visibility: hidden;">
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-ant-task.html" title="iPOJO Ant Task">Ant Task</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-eclipse-plug-in.html" title="iPOJO Eclipse Plug-in">Eclipse Plugin</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-maven-plug-in.html" title="iPOJO Maven Plug-in">Maven Plugin</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-online-manipulator.html" title="apache-felix-ipojo-online-manipulator">Online Manipulator</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-webconsole-plugin.html" title="iPOJO Webconsole Plugin">Webconsole plugin</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-junit4osgi.html" title="apache-felix-ipojo-junit4osgi">Junit4OSGi</a></li>
</ul>
</li><!-- End of tools -->
<!-- Menu 5 : Misc -->
<li class="">
<a href="" class="sf-with-ul">Misc<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
<ul style="float: none; width: 14em; display: none; visibility: hidden;">
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-issuestracker.html" title="apache-felix-ipojo-issuestracker">Issues Tracker</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-supportedvms.html" title="apache-felix-ipojo-supportedVMs">Supported JVMs</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-supportedosgi.html" title="apache-felix-ipojo-supportedOSGi">Supported OSGi Implementations</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://ipojo-dark-side.blogspot.com/" rel="nofollow">iPOJO's Dark Side Blog</a></li>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/article-presentations.html" title="Article &amp; Presentations">Article &amp; Presentations</a></li>
</ul>
</li><!-- End of misc -->
</ul> <!-- End of the menu -->
</div> <!-- Page header -->
<div class="content">
<h1><a name="iPOJOJMXHandler-iPOJOJMXHandler"></a>iPOJO JMX Handler</h1>
<p><em>This handler provides JMX management of component instance. It
could be useful to manage instance remotely. As the handler exposes
MBeans, you must have a MBean server running on your platform (as the
platform MBean server or the MOSGi MBean Server).</em></p>
<div class="toc">
<ul>
<li><a href="#iPOJOJMXHandler-Features">Features</a></li>
<li><a href="#iPOJOJMXHandler-Prerequisites">Prerequisites</a></li>
<li><a href="#iPOJOJMXHandler-Download">Download</a></li>
<li><a href="#iPOJOJMXHandler-Howtouseit">How to use it</a></li>
<li><a href="#iPOJOJMXHandler-JMXHandleroptions">JMX Handler options</a></li>
<li><a href="#iPOJOJMXHandler-Globalhandlerattributes">Global handler attributes</a></li>
<li><a href="#iPOJOJMXHandler-Propertiesattributes">Properties attributes</a></li>
<li><a href="#iPOJOJMXHandler-Methodsattributes">Methods attributes</a></li>
<li><a href="#iPOJOJMXHandler-Examples">Examples</a></li>
<ul>
<li><a href="#iPOJOJMXHandler-ExposingAttributes">Exposing Attributes</a></li>
<li><a href="#iPOJOJMXHandler-ExposingMethods">Exposing Methods</a></li>
<li><a href="#iPOJOJMXHandler-AttributeNotifications%253A">Attribute Notifications:</a></li>
</ul>
<li><a href="#iPOJOJMXHandler-Configuringthehandlerwithannotations">Configuring the handler with annotations</a></li>
</ul></div>
<h2><a name="iPOJOJMXHandler-Features"></a>Features</h2>
<p>The handler allows to:</p>
<ul>
<li>Expose attributes accessible via JMX (with rights management).</li>
<li>Expose methods to be called through JMX.</li>
<li>Get notifications when attributes are modified .</li>
</ul>
<h2><a name="iPOJOJMXHandler-Prerequisites"></a>Prerequisites</h2>
<p>To be functional this handler must register on an MBean Server,thus
you obviously need it. Several servers are currently supported : the
standard platform MBean server (included in the JDK), MOSGi (provided
with Felix), ...<br>
To use MOSGi, you have to deploy at least the following three bundles of MOSGi:</p>
<ul>
<li>org.apache.felix.mosgi.jmx.agent</li>
<li>org.apache.felix.mosgi.jmx.registry</li>
<li>org.apache.felix.mosgi.jmx.rmiconnector</li>
</ul>
<p>You can find MOSGi documentation on <a href="http://cwiki.apache.org/FELIX/mosgi-managed-osgi-framework.html" rel="nofollow">http://cwiki.apache.org/FELIX/mosgi-managed-osgi-framework.html</a></p>
<h2><a name="iPOJOJMXHandler-Download"></a>Download</h2>
<p>The JMX handler is available in the Felix trunk in the iPOJO project. See the <a href="http://felix.apache.org/site/download.html" title="Download">Download</a> page to download and compile these sources.</p>
<h2><a name="iPOJOJMXHandler-Howtouseit"></a>How to use it</h2>
<p>The handler needs to be added in the metadata.xml, you just add a namespace (e.g., jmx) :</p>
<div class="code">
<div class="dp-highlighter"><table class="dp-xml" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="line1"><span></span><span class="tag">&lt;</span><span>ipojo&nbsp;xmlns:</span><span class="attribute">jmx</span><span>=</span><span class="attribute-value">"org.apache.felix.ipojo.handlers.jmx"</span><span>&gt;&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;</td></tr><tr><td class="line1"><span class="tag">&lt;/</span><span>ipojo</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr></tbody></table></div><textarea style="display: none;" name="newcodemacro" class="xml:nocontrols:nogutter" rows="10" readonly="readonly">&lt;ipojo xmlns:jmx="org.apache.felix.ipojo.handlers.jmx"&gt;
...
&lt;/ipojo&gt;</textarea>
<script class="javascript">
if(!window.newcodemacro_initialised)
{
window.newcodemacro_initialised = true;
window.oldonloadmethod = window.onload;
window.onload = function(){
dp.SyntaxHighlighter.HighlightAll('newcodemacro');
if(window.oldonloadmethod)
{
window.oldonloadmethod();
}
}
}
</script>
</div>
<p>So, you could now expose in JMX properties and methods of your component. They are surrounded by the &lt;jmx:config&gt;<br>
tag.</p>
<div class="code">
<div class="dp-highlighter"><table class="dp-xml" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="line1"><span></span><span class="tag">&lt;</span><span>jmx:config</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>jmx:property&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"message"</span><span>&nbsp;</span><span class="attribute">field</span><span>=</span><span class="attribute-value">"m_msg"</span><span>&nbsp;</span><span class="attribute">rights</span><span>=</span><span class="attribute-value">"w"</span><span>&nbsp;</span><span class="attribute">notification</span><span>=</span><span class="attribute-value">"true"</span><span>/&gt;&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>jmx:method&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"doSomethingBad"</span><span>/&gt;&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>jmx:method&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"doSomethingGood"</span><span>/&gt;&nbsp;</span></td></tr><tr><td class="line1"><span class="tag">&lt;/</span><span>jmx:config</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr></tbody></table></div><textarea style="display: none;" name="newcodemacro" class="xml:nocontrols:nogutter" rows="10" readonly="readonly">&lt;jmx:config&gt;
&lt;jmx:property name="message" field="m_msg" rights="w" notification="true"/&gt;
&lt;jmx:method name="doSomethingBad"/&gt;
&lt;jmx:method name="doSomethingGood"/&gt;
&lt;/jmx:config&gt;</textarea>
<script class="javascript">
if(!window.newcodemacro_initialised)
{
window.newcodemacro_initialised = true;
window.oldonloadmethod = window.onload;
window.onload = function(){
dp.SyntaxHighlighter.HighlightAll('newcodemacro');
if(window.oldonloadmethod)
{
window.oldonloadmethod();
}
}
}
</script>
</div>
<div class="panelMacro"><table class="infoMacro"><colgroup><col width="24"><col></colgroup><tbody><tr><td valign="top"><img src="ipojo-jmx-handler_files/information.gif" alt="" border="0" align="absmiddle" height="16" width="16"></td><td><b>Serialization</b><br><p>Be
careful that the argument and return type of methods must be
serializable. In case of several methods have the same name, each of
them will be exposed.</p></td></tr></tbody></table></div>
<h2><a name="iPOJOJMXHandler-JMXHandleroptions"></a>JMX Handler options</h2>
<p>Here you can find all configuration options of the JMX handler.
There are two kinds of manageable elements : properties and methods.
First is described the global configuration of the handler. Then
elements can be configured, using several attributes, as described
below.</p>
<h2><a name="iPOJOJMXHandler-Globalhandlerattributes"></a>Global handler attributes</h2>
<div class="borderedTable"><table class="confluenceTable"><tbody>
<tr>
<th class="confluenceTh">Attribute name </th>
<th class="confluenceTh"> Required </th>
<th class="confluenceTh"> Description</th>
</tr>
<tr>
<td class="confluenceTd">objectName</td>
<td class="confluenceTd">NO</td>
<td class="confluenceTd">The complete object name of the managed
component. The syntax of this attribute must be compliant with the
ObjectName syntax, detailed in the JMX specification.<br>
If neither domain nor name attributes are specified, the default value
is determined by the package, the type and the instance name of the
component. This attribute overrides the domain and name attributes.<br>
<em>Example:</em> "my.domain:type=myType,name=myName"</td>
</tr>
<tr>
<td class="confluenceTd">domain</td>
<td class="confluenceTd">NO</td>
<td class="confluenceTd">The domain of the managed object (i.e., the
left part of the object name). This attribute must be compliant with
the domain syntax, as described in the JMX specification.<br>
<em>Example:</em> "my.domain"</td>
</tr>
<tr>
<td class="confluenceTd">name</td>
<td class="confluenceTd">NO</td>
<td class="confluenceTd">The name property of the managed object. The
value of this attribute must comply with the ObjectName value syntax,
as described in the JMX specification.</td>
</tr>
<tr>
<td class="confluenceTd">usesMOSGi</td>
<td class="confluenceTd">NO</td>
<td class="confluenceTd">Determines if the component must be register on the MOSGi MBean server or not.</td>
</tr>
<tr>
<td class="confluenceTd">preRegister <br>
postRegister <br>
preDeregister<br>
postDeregister</td>
<td class="confluenceTd">NO</td>
<td class="confluenceTd">These attributes allow to specify methods to
carry out operations before and after being registered or unregistered
from the MBean server.</td>
</tr>
</tbody></table></div>
<h2><a name="iPOJOJMXHandler-Propertiesattributes"></a>Properties attributes</h2>
<div class="borderedTable"><table class="confluenceTable"><tbody>
<tr>
<th class="confluenceTh">Attribute name</th>
<th class="confluenceTh">Required</th>
<th class="confluenceTh">Description</th>
</tr>
<tr>
<td class="confluenceTd">field</td>
<td class="confluenceTd">YES</td>
<td class="confluenceTd">The name of the component's field to expose.</td>
</tr>
<tr>
<td class="confluenceTd">name</td>
<td class="confluenceTd">NO</td>
<td class="confluenceTd">The name of the property as it will appear in JMX. If unspecified, the default value is the name of the exposed field.</td>
</tr>
<tr>
<td class="confluenceTd">rights</td>
<td class="confluenceTd">NO</td>
<td class="confluenceTd">Specify the access permission of the exposed field. The accepted values are :
<ul>
<li>"r" : read-only access, the default value.</li>
<li>"w" : read and write access.</li>
</ul>
</td>
</tr>
<tr>
<td class="confluenceTd">notification</td>
<td class="confluenceTd">NO</td>
<td class="confluenceTd">Enable or disable attribute change
notification sending for this property. If set to "true", a
notification is sent each time the value of the field changes.</td>
</tr>
</tbody></table></div>
<h2><a name="iPOJOJMXHandler-Methodsattributes"></a>Methods attributes</h2>
<div class="borderedTable"><table class="confluenceTable"><tbody>
<tr>
<th class="confluenceTh">Attribute name</th>
<th class="confluenceTh">Required</th>
<th class="confluenceTh">Description</th>
</tr>
<tr>
<td class="confluenceTd">name</td>
<td class="confluenceTd">YES</td>
<td class="confluenceTd">The name of the method to expose. If multiple methods have the same name, all of them are exposed.</td>
</tr>
<tr>
<td class="confluenceTd">description</td>
<td class="confluenceTd">NO</td>
<td class="confluenceTd">The description of the exposed method, as it will appear in JMX.</td>
</tr>
</tbody></table></div>
<h2><a name="iPOJOJMXHandler-Examples"></a>Examples</h2>
<p>In this part, we will give you a complete example of a component managed with JMX, using the JConsole provided by the SUN JDK.</p>
<h3><a name="iPOJOJMXHandler-ExposingAttributes"></a>Exposing Attributes</h3>
<p>In first time we create a simple component named MyComponent. We have add two fields named m_level (int) and m_message (String).</p>
<div class="code">
<div class="dp-highlighter"><table class="dp-c" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="line1"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;</span></td></tr><tr><td class="line2">MyComponent&nbsp;...&nbsp;{&nbsp;</td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;Exposed&nbsp;attributes</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;String&nbsp;m_message;&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;int&nbsp;m_level;&nbsp;</span></td></tr><tr><td class="line2">}&nbsp;</td></tr></tbody></table></div><textarea style="display: none;" name="newcodemacro" class="java:nocontrols:nogutter" rows="10" readonly="readonly">public class
MyComponent ... {
// Exposed attributes
private String m_message;
private int m_level;
}</textarea>
<script class="javascript">
if(!window.newcodemacro_initialised)
{
window.newcodemacro_initialised = true;
window.oldonloadmethod = window.onload;
window.onload = function(){
dp.SyntaxHighlighter.HighlightAll('newcodemacro');
if(window.oldonloadmethod)
{
window.oldonloadmethod();
}
}
}
</script>
</div>
<p>We expose now the attributes in the jmx:config<br>
tag in the metadata :</p>
<div class="code">
<div class="dp-highlighter"><table class="dp-xml" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="line1"><span></span><span class="tag">&lt;?</span><span>xml&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span>?&gt;&nbsp;</span></td></tr><tr><td class="line2"><span class="tag">&lt;</span><span>iPOJO&nbsp;xmlns:</span><span class="attribute">jmx</span><span>=</span><span class="attribute-value">"org.apache.felix.ipojo.handlers.jmx"</span><span>&gt;&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>component&nbsp;</span><span class="attribute">className</span><span>=</span><span class="attribute-value">"...MyComponent"</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">architecture</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">immediate</span><span>=</span><span class="attribute-value">"true"</span><span>&gt;&nbsp;</span></td></tr><tr><td class="line2">&nbsp;</td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>provides</span><span class="tag">/&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>jmx:config</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&lt;!--&nbsp;Exposed&nbsp;properties&nbsp;--&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>jmx:property&nbsp;</span><span class="attribute">field</span><span>=</span><span class="attribute-value">"m_level"</span><span>&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">name</span><span>=</span><span class="attribute-value">"The&nbsp;level"</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">rights</span><span>=</span><span class="attribute-value">"r"</span><span>/&gt;&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>jmx:property&nbsp;</span><span class="attribute">field</span><span>=</span><span class="attribute-value">"m_message"</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">name</span><span>=</span><span class="attribute-value">"The&nbsp;message"</span><span>&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">rights</span><span>=</span><span class="attribute-value">"w"</span><span>/&gt;&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span>jmx:config</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span>component</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>instance&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">component</span><span>=</span><span class="attribute-value">"...MyComponent"</span><span>/&gt;&nbsp;</span></td></tr><tr><td class="line2"><span class="tag">&lt;/</span><span>iPOJO</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr></tbody></table></div><textarea style="display: none;" name="newcodemacro" class="xml:nocontrols:nogutter" rows="10" readonly="readonly">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;iPOJO xmlns:jmx="org.apache.felix.ipojo.handlers.jmx"&gt;
&lt;component className="...MyComponent"
architecture="true"
immediate="true"&gt;
&lt;provides/&gt;
&lt;jmx:config&gt;
&lt;!-- Exposed properties --&gt;
&lt;jmx:property field="m_level"
name="The level"
rights="r"/&gt;
&lt;jmx:property field="m_message"
name="The message"
rights="w"/&gt;
&lt;/jmx:config&gt;
&lt;/component&gt;
&lt;instance
component="...MyComponent"/&gt;
&lt;/iPOJO&gt;</textarea>
<script class="javascript">
if(!window.newcodemacro_initialised)
{
window.newcodemacro_initialised = true;
window.oldonloadmethod = window.onload;
window.onload = function(){
dp.SyntaxHighlighter.HighlightAll('newcodemacro');
if(window.oldonloadmethod)
{
window.oldonloadmethod();
}
}
}
</script>
</div>
<p>Now, we could get and write the properties in the JConsole :<br>
<img src="ipojo-jmx-handler_files/JMXHandler_1.png" border="0" align="absmiddle"></p>
<h3><a name="iPOJOJMXHandler-ExposingMethods"></a>Exposing Methods</h3>
<p>We could now add methods in the initial class :</p>
<div class="code">
<div class="dp-highlighter"><table class="dp-c" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="line1"><span></span><span class="comment">/**</span></td></tr><tr><td class="line2"><span class="comment">Do&nbsp;something&nbsp;good</span></td></tr><tr><td class="line1"><span class="comment">*/</span><span>&nbsp;</span></td></tr><tr><td class="line2"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doSomethingGood()&nbsp;{&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;</td></tr><tr><td class="line2">}&nbsp;</td></tr><tr><td class="line1">&nbsp;</td></tr><tr><td class="line2"><span class="comment">/**</span></td></tr><tr><td class="line1"><span class="comment">Do&nbsp;something&nbsp;bad</span></td></tr><tr><td class="line2"><span class="comment">*/</span><span>&nbsp;</span></td></tr><tr><td class="line1"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doSomethingBad()&nbsp;{&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;</td></tr><tr><td class="line1">}&nbsp;</td></tr><tr><td class="line2">&nbsp;</td></tr><tr><td class="line1"><span class="comment">/**</span></td></tr><tr><td class="line2"><span class="comment">Do&nbsp;nothing</span></td></tr><tr><td class="line1"><span class="comment">*/</span><span>&nbsp;</span></td></tr><tr><td class="line2"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doNothing()&nbsp;{&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;</td></tr><tr><td class="line2">}&nbsp;</td></tr></tbody></table></div><textarea style="display: none;" name="newcodemacro" class="java:nocontrols:nogutter" rows="10" readonly="readonly">/**
Do something good
*/
public void doSomethingGood() {
...
}
/**
Do something bad
*/
public void doSomethingBad() {
...
}
/**
Do nothing
*/
public void doNothing() {
...
}</textarea>
<script class="javascript">
if(!window.newcodemacro_initialised)
{
window.newcodemacro_initialised = true;
window.oldonloadmethod = window.onload;
window.onload = function(){
dp.SyntaxHighlighter.HighlightAll('newcodemacro');
if(window.oldonloadmethod)
{
window.oldonloadmethod();
}
}
}
</script>
</div>
<p>We add corresponding tags in the metadata to expose these methods:</p>
<div class="code">
<div class="dp-highlighter"><table class="dp-xml" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="line1"><span></span><span class="comments">&lt;!--&nbsp;Exposed&nbsp;methods&nbsp;--&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line2"><span class="tag">&lt;</span><span>jmx:method&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"doSomethingGood"</span><span>&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">description</span><span>=</span><span class="attribute-value">"Do&nbsp;something&nbsp;good."</span><span>/&gt;&nbsp;</span></td></tr><tr><td class="line2"><span class="tag">&lt;</span><span>jmx:method&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"doSomethingBad"</span><span>&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">description</span><span>=</span><span class="attribute-value">"Do&nbsp;something&nbsp;bad."</span><span>/&gt;&nbsp;</span></td></tr><tr><td class="line2"><span class="tag">&lt;</span><span>jmx:method&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"doNothing"</span><span>&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">description</span><span>=</span><span class="attribute-value">"Do&nbsp;absolutely&nbsp;nothing."</span><span>/&gt;&nbsp;</span></td></tr></tbody></table></div><textarea style="display: none;" name="newcodemacro" class="xml:nocontrols:nogutter" rows="10" readonly="readonly">&lt;!-- Exposed methods --&gt;
&lt;jmx:method name="doSomethingGood"
description="Do something good."/&gt;
&lt;jmx:method name="doSomethingBad"
description="Do something bad."/&gt;
&lt;jmx:method name="doNothing"
description="Do absolutely nothing."/&gt;</textarea>
<script class="javascript">
if(!window.newcodemacro_initialised)
{
window.newcodemacro_initialised = true;
window.oldonloadmethod = window.onload;
window.onload = function(){
dp.SyntaxHighlighter.HighlightAll('newcodemacro');
if(window.oldonloadmethod)
{
window.oldonloadmethod();
}
}
}
</script>
</div>
<p>Now the three methods are exposed in the operations tab of the JConsole. We can invoked these methods :</p>
<p><img src="ipojo-jmx-handler_files/JMXHandler_2.png" border="0" align="absmiddle"></p>
<h3><a name="iPOJOJMXHandler-AttributeNotifications:"></a>Attribute Notifications:</h3>
<p>You could subscribe to attribute notification by adding the
notification attribute in property tag. In our example if we want to be
notified when m_level is modified, we change the property line in the
metatada like this:</p>
<div class="code">
<div class="dp-highlighter"><table class="dp-xml" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="line1"><span></span><span class="tag">&lt;</span><span>jmx:property&nbsp;</span><span class="attribute">field</span><span>=</span><span class="attribute-value">"m_level"</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">name</span><span>=</span><span class="attribute-value">"The&nbsp;level"</span><span>&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">rights</span><span>=</span><span class="attribute-value">"r"</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">notification</span><span>=</span><span class="attribute-value">"true"</span><span>/&gt;&nbsp;</span></td></tr></tbody></table></div><textarea style="display: none;" name="newcodemacro" class="xml:nocontrols:nogutter" rows="10" readonly="readonly">&lt;jmx:property field="m_level"
name="The level"
rights="r"
notification="true"/&gt;</textarea>
<script class="javascript">
if(!window.newcodemacro_initialised)
{
window.newcodemacro_initialised = true;
window.oldonloadmethod = window.onload;
window.onload = function(){
dp.SyntaxHighlighter.HighlightAll('newcodemacro');
if(window.oldonloadmethod)
{
window.oldonloadmethod();
}
}
}
</script>
</div>
<p>So now if we change the string through JConsole or if the POJO is
modified in other way, a notification will be sent to every listener.
For example, we subscribe in the notification tab, and we get
notification when the message changes :</p>
<p><img src="ipojo-jmx-handler_files/JMXHandler_3.png" border="0" align="absmiddle"></p>
<h2><a name="iPOJOJMXHandler-Configuringthehandlerwithannotations"></a>Configuring the handler with annotations</h2>
<p>It is possible to configure the handler with simple annotations available with iPOJO annotations. Here is an example of usage:</p>
<div class="code">
<div class="dp-highlighter"><table class="dp-c" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="line1"><span></span><span class="keyword">import</span><span>&nbsp;org.apache.felix.ipojo.annotations.Component;&nbsp;</span></td></tr><tr><td class="line2"><span class="keyword">import</span><span>&nbsp;org.apache.felix.ipojo.handlers.jmx.Config;&nbsp;</span></td></tr><tr><td class="line1"><span class="keyword">import</span><span>&nbsp;org.apache.felix.ipojo.handlers.jmx.Method;&nbsp;</span></td></tr><tr><td class="line2"><span class="keyword">import</span><span>&nbsp;org.apache.felix.ipojo.handlers.jmx.Property;&nbsp;</span></td></tr><tr><td class="line1"><span class="preprocessor"></span></td></tr><tr><td class="line2"><span class="preprocessor">@Component</span><span>&nbsp;</span></td></tr><tr><td class="line1"><span class="preprocessor">@Config(domain="my-domain",&nbsp;usesMOSGi=false)</span><span>&nbsp;</span></td></tr><tr><td class="line2"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;JMXSimple&nbsp;{&nbsp;</span></td></tr><tr><td class="line1"><span class="preprocessor"></span></td></tr><tr><td class="line2"><span class="preprocessor">&nbsp;&nbsp;&nbsp;&nbsp;@Property(name="prop",&nbsp;notification=true,&nbsp;rights="w")&nbsp;//&nbsp;Field&nbsp;published&nbsp;in&nbsp;the&nbsp;MBean</span><span>&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;m_foo;&nbsp;</td></tr><tr><td class="line2"><span class="preprocessor">&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr><tr><td class="line1"><span class="preprocessor">&nbsp;&nbsp;&nbsp;&nbsp;@Method(description="set&nbsp;the&nbsp;foo&nbsp;prop")&nbsp;//&nbsp;Method&nbsp;published&nbsp;in&nbsp;the&nbsp;MBean</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setFoo(String&nbsp;mes)&nbsp;{&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"Set&nbsp;foo&nbsp;to&nbsp;"</span><span>&nbsp;+&nbsp;mes);&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_foo&nbsp;=&nbsp;mes;&nbsp;</td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</td></tr><tr><td class="line2"><span class="preprocessor">&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr><tr><td class="line1"><span class="preprocessor">&nbsp;&nbsp;&nbsp;&nbsp;@Method(description="get&nbsp;the&nbsp;foo&nbsp;prop")&nbsp;//&nbsp;Method&nbsp;published&nbsp;in&nbsp;the&nbsp;MBean</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;String&nbsp;getFoo()&nbsp;{&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;m_foo;&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</td></tr><tr><td class="line1">}&nbsp;</td></tr></tbody></table></div><textarea style="display: none;" name="newcodemacro" class="java:nocontrols:nogutter" rows="10" readonly="readonly">import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.handlers.jmx.Config;
import org.apache.felix.ipojo.handlers.jmx.Method;
import org.apache.felix.ipojo.handlers.jmx.Property;
@Component
@Config(domain="my-domain", usesMOSGi=false)
public class JMXSimple {
@Property(name="prop", notification=true, rights="w") // Field published in the MBean
String m_foo;
@Method(description="set the foo prop") // Method published in the MBean
public void setFoo(String mes) {
System.out.println("Set foo to " + mes);
m_foo = mes;
}
@Method(description="get the foo prop") // Method published in the MBean
public String getFoo() {
return m_foo;
}
}</textarea>
<script class="javascript">
if(!window.newcodemacro_initialised)
{
window.newcodemacro_initialised = true;
window.oldonloadmethod = window.onload;
window.onload = function(){
dp.SyntaxHighlighter.HighlightAll('newcodemacro');
if(window.oldonloadmethod)
{
window.oldonloadmethod();
}
}
}
</script>
</div>
<p>The <tt>@org.apache.felix.ipojo.handlers.jmx.Config</tt> (<tt>@Config</tt> if the package it correctly imported) annotation is a type annotation (so placed on the <tt>class</tt> element. This annotation indicates that the instance will be exposed as an MBean. This annotation supports:</p>
<ul>
<li>usesMOSGi: set to <tt>true</tt> to use MOSGi. Otherwise, the MBean will be exposed in the MBean Platform Server (default: <tt>false</tt>).</li>
<li>objectname: set the MBean objectname. The objectname must follow JMX specification. (default: <tt>package-name:factory-name:instance-name</tt>)</li>
<li>domain: set the MBean domain. (default: <tt>package-name</tt>)</li>
<li>name: set the MBean name. (default: <tt>instance-name</tt>).</li>
</ul>
<p>The <tt>@org.apache.felix.ipojo.handlers.jmx.Property</tt> (<tt>@Property</tt>) annotation is a field annotation indicating that the field is exposed in the MBean. The supported attributes are:</p>
<ul>
<li>name: set the property name</li>
<li>rights: set the access permission. Possible values are <tt>r</tt> (read only) and <tt>w</tt> (read and write). By default, properties are in read-only mode.</li>
<li>notification: enables notification on this property. By default notifications are disabled.</li>
</ul>
<p>The <tt>@org.apache.felix.ipojo.handlers.jmx.Method</tt> (<tt>@Method</tt>) annotation is a method annotation indicating that the method is exposed in the MBean. Only one attribute can be customized:</p>
<ul>
<li>description: set the method description.
<br clear="all">
<br clear="all">
</li></ul></div>
<img src="ipojo-jmx-handler_files/footer.png" class="footer">
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script><script src="ipojo-jmx-handler_files/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try{
var pageTracker = _gat._getTracker("UA-1518442-4");
pageTracker._trackPageview();
} catch(err) {}
</script>
</div>
</body></html>