geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Geronimo Development: Apache Geronimo With A Monitor Component (JMX and JConsole) (page edited)
Date Wed, 13 Aug 2008 18:22:02 GMT
<html>
<head>
    <base href="http://cwiki.apache.org/confluence" />
    <style type="text/css">
    <!--
    body, p, td, table, tr, .bodytext, .stepfield {
	font-family: Verdana, arial, sans-serif;
	font-size: 11px;
	line-height: 16px;
	color: #000000;
	font-weight: normal;
}
#PageContent {
	text-align: left;
	background-color: #fff;
	padding: 0px;
	margin: 0px;
    padding-bottom:20px;
}
/*
** when this stylesheet is used for the Tiny MCE Wysiwyg editor's edit area, we can't
** use an id=PageContent or class=wiki-content, so we must
** set the body style to that used for PageContent, and p to that used for wiki-content.
*/

body {
	margin: 0px;
	padding: 0px;
	text-align: center;
    background-color: #f0f0f0;
}

@media print {

body {
    background-color: #fff;
}

}

.monospaceInput {
    font:12px monospace
}

.wiki-content p, .commentblock p {
    margin: 16px 0px 16px 0px;
    padding: 0px;
}

.wiki-content-preview {
    padding: 5px;
    border-left: 1px solid #3c78b5;
    border-right: 1px solid #3c78b5;
}

ul, ol {
    margin-top: 2px;
    margin-bottom: 2px;
    padding-top: 0px;
    padding-bottom: 0px;
}

pre {
    padding: 0px;
    margin-top: 5px;
    margin-left: 15px;
    margin-bottom: 5px;
    margin-right: 5px;
    text-align: left;
}

.helpheading {
    font-weight: bold;
    background-color: #D0D9BD;
        border-bottom: 1px solid #3c78b5;
        padding: 4px 4px 4px 4px;
        margin: 0px;
        margin-top: 10px;
}
.helpcontent {
        padding: 4px 4px 20px 4px;
    background-color: #f5f7f1;
}

.code {
 	border: 1px dashed #3c78b5;
    font-size: 11px;
	font-family: Courier;
    margin: 10px;
	line-height: 13px;
}

.focusedComment {
    background: #ffffce;
}

.commentBox, .focusedComment {
    padding: 10px;
    margin: 5px 0 5px 0;
    border: 1px #bbb solid;
}

.codeHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.codeContent {
    text-align: left;
    background-color: #f0f0f0;
    padding: 3px;
}

.preformatted {
 	border: 1px dashed #3c78b5;
    font-size: 11px;
	font-family: Courier;
    margin: 10px;
	line-height: 13px;
}

.preformattedHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.preformattedContent {
    background-color: #f0f0f0;
    padding: 3px;
}

.panel {
 	border: 1px dashed #3c78b5;
    margin: 10px;
    margin-top: 0px;
}

.panelHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.panelContent {
    background-color: #f0f0f0;
    padding: 5px;
}

.anonymousAlert {
    background-color: #f0f0f0;
 	border: 1px dashed red;
    font-size: 11px;
    padding: 10px 5px 10px 5px;
    margin: 4px;
	line-height: 13px;
}

.lockAlert {
    background-color: #f0f0f0;
    width: 50%;
 	border: 1px dashed red;
    font-size: 11px;
    padding: 10px 5px 10px 5px;
    margin: 4px;
	line-height: 13px;
}


.code-keyword {
  color: #000091;
  background-color: inherit;
}

.code-object {
  color: #910091;
  background-color: inherit;
}

.code-quote {
  color: #009100;
  background-color: inherit;
}

.code-comment {
  color: #808080;
  background-color: inherit;
}


.code-xml .code-keyword {
  color: inherit;
  font-weight: bold;
}

.code-tag {
  color: #000091;
  background-color: inherit;
}

.breadcrumbs {
    background-color: #f0f0f0;
 	border-color: #3c78b5;
	border-width: 1px 0px 1px 0px;
	border-style: solid;
    font-size: 11px;
    padding: 3px 0px 3px 0px;
}

.navmenu {
    border: 1px solid #ccc;
}

.menuheading {
    font-weight: bold;
    background-color: #f0f0f0;
 	border-bottom: 1px solid #3c78b5;
	padding: 4px 4px 2px 4px;
}

.menuitems {
	padding: 4px 4px 20px 4px;
}

.rightpanel {
    border-left: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
}

#helpheading {
    text-align: left;
    font-weight: bold;
    background-color: #D0D9BD;
 	border-bottom: 1px solid #3c78b5;
	padding: 4px 4px 4px 4px;
	margin: 0px;
}
#helpcontent {
	padding: 4px 4px 4px 4px;
    background-color: #f5f7f1;
}
.helptab-unselected {
    font-weight: bold;
	padding: 5px;
    background-color: #f5f7f1;
}
.helptab-selected {
    font-weight: bold;
    background-color: #D0D9BD;
	padding: 5px;
}
.helptabs {
    margin: 0px;
    background-color: #f5f7f1;
	padding: 5px;
}
.infopanel-heading {
    font-weight: bold;
	padding: 4px 0px 2px 0px;
}

.pagebody {
}

.pageheader {
	padding: 5px 5px 5px 0px;
 	border-bottom: 1px solid #3c78b5;
}

.pagetitle {
	font-size: 22px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
}

.newpagetitle {
    color: #ccc !important;
}

.steptitle {
	font-size: 18px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
	margin-bottom: 7px;
}

.substeptitle {
    font-size: 12px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
    margin: 2px 4px 4px 4px;
    padding: 2px 4px 1px 4px;
}

.stepdesc {
    font-family: Verdana, arial, sans-serif;
	font-size: 11px;
	line-height: 16px;
	font-weight: normal;
    color: #666666;
    margin-top: 7px;
    margin-bottom: 7px;
}

.steplabel {
    font-weight: bold;
    margin-right: 4px;
    color: black;
    float: left;
    width: 15%;
    text-align: right;
}

.stepfield {
    background: #f0f0f0;
    padding: 5px;
}

.submitButtons{
    margin-top:5px;
    text-align:right;
}

.formtitle {
	font-size: 12px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
}

.sectionbottom {
    border-bottom: 1px solid #3c78b5;
}

.topRow {
    border-top: 2px solid #3c78b5;
}

.tabletitle {
	font-size: 14px;
	font-weight: bold;
	font-family: Arial, sans-serif;
    padding: 3px 0px 2px 0px;
    margin: 8px 4px 2px 0px;
	color: #003366;
	border-bottom: 2px solid #3c78b5;
}
.pagesubheading {
    color: #666666;
    font-size: 10px;
    padding: 0px 0px 5px 0px;
}

HR {
	color: 3c78b5;
	height: 1;
}

A:link, A:visited, A:active, A:hover {
	color: #003366;
}

h1 A:link, h1 A:visited, h1 A:active {
	text-decoration: none;
}

h1 A:hover {
    border-bottom: 1px dotted #003366;
}

.wiki-content > :first-child, .commentblock > :first-child {
    margin-top: 3px;
}

.logocell {
    padding: 10px;
}

input {
	font-family: verdana, geneva, arial, sans-serif;
	font-size: 11px;
	color: #000000;
}

textarea, textarea.editor {
	font-family: verdana, geneva, arial, sans-serif;
	font-size: 11px;
	color: #333333;
}

/* use logoSpaceLink instead.
.spacenametitle {
	font: 21px/31px Impact, Arial, Helvetica;
    font-weight: 100;
    color: #999999;
	margin: 0px;
}
.spacenametitle img {
  margin: 0 0 -4px 0;
}
.spacenametitle a {
    text-decoration: none;
    color: #999999;
}
.spacenametitle a:visited {
    text-decoration: none;
    color: #999999;
}*/

.spacenametitle-printable {
	font: 20px/25px Impact, Arial, Helvetica;
    font-weight: 100;
    color: #999999;
	margin: 0px;
}
.spacenametitle-printable a {
    text-decoration: none;
    color: #999999;
}
.spacenametitle-printable a:visited {
    text-decoration: none;
    color: #999999;
}

.blogDate {
	font-weight: bold;
	text-decoration: none;
	color: black;
}

.blogSurtitle {
    background: #f0f0f0;
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.blogHeading {
    font-size: 20px;
    line-height: normal;
    font-weight: bold;
    padding: 0px;
    margin: 0px;
}

.blogHeading a {
   text-decoration: none;
   color: black;
}

.endsection {
	align: right;
	color: #666666;
	margin-top: 10px;
}
.endsectionleftnav {
	align: right;
	color: #666666;
	margin-top: 10px;
}

h1 {
	font-size: 24px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	color: #003366;
 	border-bottom: 1px solid #3c78b5;
	padding: 2px;
	margin: 36px 0px 4px 0px;
}

h2 {
	font-size: 18px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
 	border-bottom: 1px solid #3c78b5;
	padding: 2px;
	margin: 27px 0px 4px 0px;
}

h3 {
	font-size: 14px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 21px 0px 4px 0px;
}

h4 {
	font-size: 12px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 18px 0px 4px 0px;
}

h4.search {
	font-size: 12px;
	line-height: normal;
	font-weight: normal;
	background-color: #f0f0f0;
	padding: 4px;
	margin: 18px 0px 4px 0px;
}

h5 {
	font-size: 10px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 14px 0px 4px 0px;
}

h6 {
	font-size: 8px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 14px 0px 4px 0px;
}

.smallfont {
    font-size: 10px;
}
.descfont {
    font-size: 10px;
    color: #666666;
}
.smallerfont {
    font-size: 9px;
}
.smalltext {
    color: #666666;
    font-size: 10px;
}
.smalltext a {
    color: #666666;
}
.smalltext-blue {
    color: #3c78b5;
    font-size: 10px;
}
.surtitle {
    margin-left: 1px;
    margin-bottom: 5px;
    font-size: 14px;
    color: #666666;
}

/* css hack found here:  http://www.fo3nix.pwp.blueyonder.co.uk/tutorials/css/hacks/ */
.navItemOver { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #003366; cursor: hand; voice-family: '\'}\''; voice-family:inherit; cursor: pointer;}
.navItemOver a { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItemOver a:visited { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItemOver a:hover { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItem { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; }
.navItem a { color: #ffffff; text-decoration: none; }
.navItem a:hover { color: #ffffff; text-decoration: none; }
.navItem a:visited { color: #ffffff; text-decoration: none; }

div.padded { padding: 4px; }
div.thickPadded { padding: 10px; }
h3.macrolibrariestitle {
    margin: 0px 0px 0px 0px;
}

div.centered { text-align: center; margin: 10px; }
div.centered table {margin: 0px auto; text-align: left; }

.tableview table {
    margin: 0;
}

.tableview th {
    text-align: left;
    color: #003366;
    font-size: 12px;
    padding: 5px 0px 0px 5px;
    border-bottom: 2px solid #3c78b5;
}
.tableview td {
    text-align: left;
    border-color: #ccc;
    border-width: 0px 0px 1px 0px;
    border-style: solid;
    margin: 0;
    padding: 4px 10px 4px 5px;
}

.grid {
    margin: 2px 0px 5px 0px;
    border-collapse: collapse;
}
.grid th  {
    border: 1px solid #ccc;
    padding: 2px 4px 2px 4px;
    background: #f0f0f0;
    text-align: center;
}
.grid td  {
    border: 1px solid #ccc;
    padding: 3px 4px 3px 4px;
}
.gridHover {
	background-color: #f9f9f9;
}

td.infocell {
    background-color: #f0f0f0;
}
.label {
	font-weight: bold;
	color: #003366;
}

label {
	font-weight: bold;
	color: #003366;
}

.error {
	background-color: #fcc;
}

.errorBox {
	background-color: #fcc;
    border: 1px solid #c00;
    padding: 5px;
    margin: 5px;
}

.errorMessage {
	color: #c00;
}

.success {
	background-color: #dfd;
}

.successBox {
	background-color: #dfd;
    border: 1px solid #090;
    padding: 5px;
    margin-top:5px;
    margin-bottom:5px;
}

blockquote {
	padding-left: 10px;
	padding-right: 10px;
	margin-left: 5px;
	margin-right: 0px;
	border-left: 1px solid #3c78b5;
}

table.confluenceTable
{
    margin: 5px;
    border-collapse: collapse;
}

/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
table.confluenceTable td.confluenceTd
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
}

/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
table.confluenceTable th.confluenceTh
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
    background-color: #f0f0f0;
    text-align: center;
}

td.confluenceTd
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
}

th.confluenceTh
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
    background-color: #f0f0f0;
    text-align: center;
}

DIV.small {
	font-size: 9px;
}

H1.pagename {
	margin-top: 0px;
}

IMG.inline  {}

.loginform {
    margin: 5px;
    border: 1px solid #ccc;
}

/* The text how the "This is a preview" comment should be shown. */
.previewnote { text-align: center;
                font-size: 11px;
                    color: red; }

/* How the preview content should be shown */
.previewcontent { background: #E0E0E0; }

/* How the system messages should be shown (DisplayMessage.jsp) */
.messagecontent { background: #E0E0E0; }

/* How the "This page has been modified..." -comment should be shown. */
.conflictnote { }

.createlink {
    color: maroon;
}
a.createlink {
    color: maroon;
}
.templateparameter {
    font-size: 9px;
    color: darkblue;
}

.diffadded {
    background: #ddffdd;
    padding: 1px 1px 1px 4px;
	border-left: 4px solid darkgreen;
}
.diffdeleted {
    color: #999;
    background: #ffdddd;
    padding: 1px 1px 1px 4px;
	border-left: 4px solid darkred;
}
.diffnochange {
    padding: 1px 1px 1px 4px;
	border-left: 4px solid lightgrey;
}
.differror {
    background: brown;
}
.diff {
    font-family: lucida console, courier new, fixed-width;
	font-size: 12px;
	line-height: 14px;
}
.diffaddedchars {
    background-color:#99ff99;
    font-weight:bolder;
}
.diffremovedchars {
    background-color:#ff9999;
    text-decoration: line-through;
    font-weight:bolder;
}

.greybackground {
    background: #f0f0f0
}

.greybox {
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.borderedGreyBox {
    border: 1px solid #cccccc;
    background-color: #f0f0f0;
    padding: 10px;
}

.greyboxfilled {
 	border: 1px solid #ddd;
    background: #f0f0f0;
    padding: 3px;
	margin: 1px 1px 10px 1px;
}

.navBackgroundBox {
    padding: 5px 5px 5px 5px;
    font-size: 22px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: white;
    background: #3c78b5;
    text-decoration: none;
}

.previewBoxTop {
	background-color: #f0f0f0;
    border-width: 1px 1px 0px 1px;
    border-style: solid;
    border-color: #3c78b5;
    padding: 5px;
    margin: 5px 0px 0px 0px;
    text-align: center;
}
.previewContent {
    background-color: #fff;
 	border-color: #3c78b5;
	border-width: 0px 1px 0px 1px;
	border-style: solid;
	padding: 10px;
	margin: 0px;
}
.previewBoxBottom {
	background-color: #f0f0f0;
    border-width: 0px 1px 1px 1px;
    border-style: solid;
    border-color: #3c78b5;
    padding: 5px;
    margin: 0px 0px 5px 0px;
    text-align: center;
}

.functionbox {
    background-color: #f0f0f0;
 	border: 1px solid #3c78b5;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.functionbox-greyborder {
    background-color: #f0f0f0;
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.search-highlight {
    background-color: #ffffcc;
}

/* normal (white) background */
.rowNormal {
    background-color: #ffffff;
 }

/* alternate (pale yellow) background */
.rowAlternate {
    background-color: #f7f7f7;
}

/* used in the list attachments table */
.rowAlternateNoBottomColor {
    background-color: #f7f7f7;
}

.rowAlternateNoBottomNoColor {
}

.rowAlternateNoBottomColor td {
    border-bottom: 0px;
}

.rowAlternateNoBottomNoColor td {
    border-bottom: 0px;
}

/* row highlight (grey) background */
.rowHighlight {
    background-color: #f0f0f0;

}

TD.greenbar {FONT-SIZE: 2px; BACKGROUND: #00df00; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
TD.redbar {FONT-SIZE: 2px; BACKGROUND: #df0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
TD.darkredbar {FONT-SIZE: 2px; BACKGROUND: #af0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }

TR.testpassed {FONT-SIZE: 2px; BACKGROUND: #ddffdd; PADDING: 0px; }
TR.testfailed {FONT-SIZE: 2px; BACKGROUND: #ffdddd; PADDING: 0px; }

.toolbar  {
    margin: 0px;
    border-collapse: collapse;
}

.toolbar td  {
    border: 1px solid #ccc;
    padding: 2px 2px 2px 2px;
    color: #ccc;
}

td.noformatting {
    border-width: 0px;
    border-style: none;
    text-align: center;
	padding: 0px;
}

.commentblock {
    margin: 12px 0 12px 0;
}

/*
 * Divs displaying the license information, if necessary.
 */
.license-eval, .license-none, .license-nonprofit {
    border-top: 1px solid #bbbbbb;
    text-align: center;
    font-size: 10px;
    font-family: Verdana, Arial, Helvetica, sans-serif;
}

.license-eval, .license-none {
    background-color: #ffcccc;
}

.license-eval b, .license-none b {
    color: #990000
}

.license-nonprofit {
    background-color: #ffffff;
}

/*
 * The shadow at the bottom of the page between the main content and the
 * "powered by" section.
 */
.bottomshadow {
    height: 12px;
    background-image: url("$req.contextPath/images/border/border_bottom.gif");
    background-repeat: repeat-x;
}

/*
 * Styling of the operations box
 */
.navmenu .operations li, .navmenu .operations ul {
    list-style: none;
    margin-left: 0;
    padding-left: 0;
}

.navmenu .operations ul {
    margin-bottom: 9px;
}

.navmenu .label {
    font-weight: inherit;
}

/*
 * Styling of ops as a toolbar
 */
.toolbar div {
    display: none;
}

.toolbar .label {
    display: none;
}

.toolbar .operations {
    display: block;
}

.toolbar .operations ul {
    display: inline;
    list-style: none;
    margin-left: 10px;
    padding-left: 0;
}

.toolbar .operations li {
    list-style: none;
    display: inline;
}

/* list page navigational tabs */
#foldertab {
padding: 3px 0px 3px 8px;
margin-left: 0;
border-bottom: 1px solid #3c78b5;
font: bold 11px Verdana, sans-serif;
}

#foldertab li {
list-style: none;
margin: 0;
display: inline;
}

#foldertab li a {
padding: 3px 0.5em;
margin-left: 3px;
border: 1px solid #3c78b5;
border-bottom: none;
background: #3c78b5;
text-decoration: none;
}

#foldertab li a:link { color: #ffffff; }
#foldertab li a:visited { color: #ffffff; }

#foldertab li a:hover {
color: #ffffff;
background: #003366;
border-color: #003366;
}

#foldertab li a.current {
background: white;
border-bottom: 1px solid white;
color: black;
}

#foldertab li a.current:link { color: black; }
#foldertab li a.current:visited { color: black; }
#foldertab li a.current:hover {
background: white;
border-bottom: 1px solid white;
color: black;
}

/* alphabet list */
ul#squaretab {
margin-left: 0;
padding-left: 0;
white-space: nowrap;
font: bold 8px Verdana, sans-serif;
}

#squaretab li {
display: inline;
list-style-type: none;
}

#squaretab a {
padding: 2px 6px;
border: 1px solid #3c78b5;
}

#squaretab a:link, #squaretab a:visited {
color: #fff;
background-color: #3c78b5;
text-decoration: none;
}

#squaretab a:hover {
color: #ffffff;
background-color: #003366;
border-color: #003366;
text-decoration: none;
}

#squaretab li a#current {
background: white;
color: black;
}

.blogcalendar * {
    font-family:verdana, arial, sans-serif;
    font-size:x-small;
    font-weight:normal;
    line-height:140%;
    padding:2px;
}


table.blogcalendar {
    border: 1px solid #3c78b5;
}

.blogcalendar th.calendarhead, a.calendarhead {
    font-size:x-small;
    font-weight:bold;
    padding:2px;
    text-transform:uppercase;
    background-color: #3c78b5;
    color: #ffffff;
    letter-spacing: .3em;
    text-transform: uppercase;
}

.calendarhead:visited {color: white;}
.calendarhead:active {color: white;}
.calendarhead:hover {color: white;}

.blogcalendar th {
    font-size:x-small;
    font-weight:bold;
    padding:2px;
    background-color:#f0f0f0;
}

.blogcalendar td {
    font-size:x-small;
    font-weight:normal;
}

.searchGroup { padding: 0 0 10px 0; background: #f0f0f0; }
.searchGroupHeading { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; padding: 2px 4px 1px 4px; }
.searchItem { padding: 1px 4px 1px 4px; }
.searchItemSelected { padding: 1px 4px 1px 4px; font-weight: bold; background: #ddd; }

/* permissions page styles */
.permissionHeading {
    border-bottom: #bbb; border-width: 0 0 1px 0; border-style: solid; font-size: 16px; text-align: left;
}
.permissionTab {
    border-width: 0 0 0 1px; border-style: solid; background: #3c78b5; color: #ffffff; font-size: 10px;
}
.permissionSuperTab {
    border-width: 0 0 0 1px; border-style: solid; background: #003366; color: #ffffff;
}
.permissionCell {
    border-left: #bbb; border-width: 0 0 0 1px; border-style: solid;
}

/* warning panel */
.warningPanel { background: #FFFFCE; border:#F0C000 1px solid; padding: 8px; margin: 10px; }
/* alert panel */
.alertPanel { background: #FFCCCC; border:#C00 1px solid; padding: 8px; margin: 10px; }
/* info panel */
.infoPanel { background: #D8E4F1; border:#3c78b5 1px solid; padding: 8px; margin: 10px; }

/* side menu highlighting (e.g. space content screen) */
.optionPadded { padding: 2px; }
.optionSelected { background-color: #ffffcc; padding: 2px; border: 1px solid #ddd; margin: -1px; }
.optionSelected a { font-weight: bold; text-decoration: none; color: black; }

/* information macros */
.noteMacro { border-style: solid; border-width: 1px; border-color: #F0C000; background-color: #FFFFCE; text-align:left; margin-top: 5px; margin-bottom: 5px}
.warningMacro { border-style: solid; border-width: 1px; border-color: #c00; background-color: #fcc; text-align:left; margin-top: 5px; margin-bottom: 5px}
.infoMacro { border-style: solid; border-width: 1px; border-color: #3c78b5; background-color: #D8E4F1; text-align:left; margin-top: 5px; margin-bottom: 5px}
.tipMacro { border-style: solid; border-width: 1px; border-color: #090; background-color: #dfd; text-align:left; margin-top: 5px; margin-bottom: 5px}
.informationMacroPadding { padding: 5px 0 0 5px; }

table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMacro td, table.sectionMacro td {
    border: none;
}

table.sectionMacroWithBorder td.columnMacro { border-style: dashed; border-width: 1px; border-color: #cccccc;}

.pagecontent
{
    padding: 10px;
    text-align: left;
}

/* styles for links in the top bar */
.topBarDiv a:link {color: #ffffff;}
.topBarDiv a:visited {color: #ffffff;}
.topBarDiv a:active {color: #ffffff;}
.topBarDiv a:hover {color: #ffffff;}
.topBarDiv {color: #ffffff;}

.topBar {
    background-color: #003366;
}


/* styles for extended operations */
.greyLinks a:link {color: #666666; text-decoration:underline;}
.greyLinks a:visited {color: #666666; text-decoration:underline;}
.greyLinks a:active {color: #666666; text-decoration:underline;}
.greyLinks a:hover {color: #666666; text-decoration:underline;}
.greyLinks {color: #666666; display:block; padding: 10px}

.logoSpaceLink {color: #999999; text-decoration: none}
.logoSpaceLink a:link {color: #999999; text-decoration: none}
.logoSpaceLink a:visited {color: #999999; text-decoration: none}
.logoSpaceLink a:active {color: #999999; text-decoration: none}
.logoSpaceLink a:hover {color: #003366; text-decoration: none}

/* basic panel (basicpanel.vmd) style */
.basicPanelContainer {border: 1px solid #3c78b5; margin-top: 2px; margin-bottom: 8px; width: 100%}
.basicPanelTitle {padding: 5px; margin: 0px; background-color: #f0f0f0; color: black; font-weight: bold;}
.basicPanelBody {padding: 5px; margin: 0px}

.separatorLinks a:link {color: white}
.separatorLinks a:visited {color: white}
.separatorLinks a:active {color: white}

.greynavbar {background-color: #f0f0f0; border-top: 1px solid #3c78b5; margin-top: 2px}

div.headerField {
    float: left;
    width: auto;
    height: 100%;
}

.headerFloat {
    margin-left: auto;
    width: 50%;
}

.headerFloatLeft {
    float: left;
    margin-right: 20px;
    margin-bottom: 10px;
}

#headerRow {
    padding: 10px;
}

div.license-personal {
   background-color: #003366;
   color: #ffffff;
}

div.license-personal a {
   color: #ffffff;
}

.greyFormBox {
    border: 1px solid #cccccc;
    padding: 5px;
}

/* IE automatically adds a margin before and after form tags. Use this style to remove that */
.marginlessForm {
    margin: 0px;
}

.openPageHighlight {
    background-color: #ffffcc;
    padding: 2px;
    border: 1px solid #ddd;
}

.editPageInsertLinks, .editPageInsertLinks a
{
    color: #666666;
    font-weight: bold;
    font-size: 10px;
}

/* Style for label heatmap. */
.top10 a {
    font-weight: bold;
    font-size: 2em;
    color: #003366;
}
.top25 a {
    font-weight: bold;
    font-size: 1.6em;
    color: #003366;
}
.top50 a {
    font-size: 1.4em;
    color: #003366;
}
.top100 a {
    font-size: 1.2em;
    color: #003366;
}

.heatmap {
    list-style:none;
    width: 95%;
    margin: 0px auto;
}

.heatmap a {
    text-decoration:none;
}

.heatmap a:hover {
    text-decoration:underline;
}

.heatmap li {
    display: inline;
}

.minitab {
padding: 3px 0px 3px 8px;
margin-left: 0;
margin-top: 1px;
margin-bottom: 0px;
border-bottom: 1px solid #3c78b5;
font: bold 9px Verdana, sans-serif;
text-decoration: none;
float:none;
}
.selectedminitab {
padding: 3px 0.5em;
margin-left: 3px;
margin-top: 1px;
border: 1px solid #3c78b5;
background: white;
border-bottom: 1px solid white;
color: #000000;
text-decoration: none;
}
.unselectedminitab {
padding: 3px 0.5em;
margin-left: 3px;
margin-top: 1px;
border: 1px solid #3c78b5;
border-bottom: none;
background: #3c78b5;
color: #ffffff;
text-decoration: none;
}

a.unselectedminitab:hover {
color: #ffffff;
background: #003366;
border-color: #003366;
}

a.unselectedminitab:link { color: white; }
a.unselectedminitab:visited { color: white; }

a.selectedminitab:link { color: black; }
a.selectedminitab:visited { color: black; }

.linkerror { background-color: #fcc;}

a.labelOperationLink:link {text-decoration: underline}
a.labelOperationLink:active {text-decoration: underline}
a.labelOperationLink:visited {text-decoration: underline}
a.labelOperationLink:hover {text-decoration: underline}

a.newLabel:link {background-color: #ddffdd}
a.newLabel:active {background-color: #ddffdd}
a.newLabel:visited {background-color: #ddffdd}
a.newLabel:hover {background-color: #ddffdd}

ul.square {list-style-type: square}

.inline-control-link {
    background: #ffc;
    font-size: 9px;
    color: #666;
    padding: 2px;
    text-transform: uppercase;
    text-decoration: none;
}


.inline-control-link a:link {text-decoration: none}
.inline-control-link a:active {text-decoration: none}
.inline-control-link a:visited {text-decoration: none}
.inline-control-link a:hover {text-decoration: none}

.inline-control-link {
    background: #ffc;
    font-size: 9px;
    color: #666;
    padding: 2px;
    text-transform: uppercase;
    text-decoration: none;
    cursor: pointer;
}

div.auto_complete {
    width: 350px;
    background: #fff;
}
div.auto_complete ul {
    border: 1px solid #888;
    margin: 0;
    padding: 0;
    width: 100%;
    list-style-type: none;
}
div.auto_complete ul li {
    margin: 0;
    padding: 3px;
}
div.auto_complete ul li.selected {
    background-color: #ffb;
}
div.auto_complete ul strong.highlight {
    color: #800;
    margin: 0;
    padding: 0;
}

/******* Edit Page Styles *******/
.toogleFormDiv{
    border:1px solid #A7A6AA;
    background-color:white;
    padding:5px;
    margin-top: 5px;
}

.toogleInfoDiv{
    border:1px solid #A7A6AA;
    background-color:white;
    display:none;
    padding:5px;
    margin-top: 10px;
}

.inputSection{
    margin-bottom:20px;
}

#editBox{
   border:1px solid lightgray;
   background-color:#F0F0F0;
}

/******* Left Navigation Theme Styles ********/
.leftnav li a {
    text-decoration:none;
    color:white;
    margin:0px;
    display:block;
    padding:2px;
    padding-left:5px;
    background-color: #3c78b5;
    border-top:1px solid #3c78b5;
}

.leftnav li a:active {color:white;}
.leftnav li a:visited {color:white;}
.leftnav li a:hover {background-color: #003366; color:white;}

/* Added by Shaun during i18n */
.replaced
{
    background-color: #33CC66;
}

.topPadding
{
    margin-top: 20px;
}

/* new form style */
.form-block {
    padding: 6px;
}
.form-error-block {
    padding: 6px;
    background: #fcc;
    border-top: #f0f0f0 1px solid;
    border-bottom: #f0f0f0 1px solid;
    margin-bottom: 6px;
    padding: 0 12px 0 12px;
}
.form-element-large {
    font-size: 16px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
}

.form-element-small {
    font-size: 12px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
}

.form-header {
    background: lightyellow;
    border-top: #f0f0f0 1px solid;
    border-bottom: #f0f0f0 1px solid;
    margin-bottom: 6px;
    padding: 0 12px 0 12px;
}
.form-header p, .form-block p, .form-error-block p {
    line-height: normal;
    margin: 12px 0 12px 0;
}
.form-example {
    color: #888;
    font-size: 11px;
}
.form-divider {
    border-bottom: #ccc 1px solid;
    margin-bottom: 6px;
}
.form-buttons {
    margin-top: 6px;
    border-top: #ccc 1px solid;
    border-bottom: #ccc 1px solid;
    background: #f0f0f0;
    padding: 10px;
    text-align: center;
}
.form-buttons input {
    width: 100px;
}
.form-block .error {
    padding: 6px;
    margin-bottom: 6px;
}
    -->
    </style>
</head>
<body>

<div id="PageContent">
<table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%"><tr>
<td valign="top" class="pagebody">

    <div class="pageheader">
        <span class="pagetitle">
            Page Edited :
            <a href="http://cwiki.apache.org/confluence/display/GMOxDEV">GMOxDEV</a> :
            <a href="http://cwiki.apache.org/confluence/display/GMOxDEV/Apache+Geronimo+With+A+Monitor+Component+%28JMX+and+JConsole%29">Apache Geronimo With A Monitor Component (JMX and JConsole)</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/GMOxDEV/Apache+Geronimo+With+A+Monitor+Component+%28JMX+and+JConsole%29">Apache Geronimo With A Monitor Component (JMX and JConsole)</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~drwoods">Donald Woods</a>
            <span class="smallfont">(Aug 13, 2008)</span>.
     </p>
    
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=43470&originalVersion=23&revisedVersion=24">(View changes)</a>
     </p>

    <span class="label">Content:</span><br/>
    <div class="greybox wiki-content"><p>The purpose of this article is to show the possibilities of server-side monitoring using Geronimo, a Java<sup>TM</sup> 2 Platform Enterprise Edition (J2EE) application server. Monitoring an application server from inside saves network traffic, since monitored information can be analyzed, filtered, summarized, and set into an application specific context inside the server. For example an application server could send an e-mail when the response time of our online shop gets unacceptable big. A simple web application has been used to develop a server-side monitoring component that monitors three servlets and gives alarm when the overall average processing time exceeds a certain given threshold.</p>

<h1><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Whatisneeded"></a>What is needed <a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Whatisneeded"></a></h1>

<ul>
	<li>JDK 5.0 (because of the used JConsole tool; it is not included in JDK1.4): <span class="nobr"><a href="http://java.sun.com/javase/downloads/index.jsp" title="Visit page outside Confluence" rel="nofollow">http://java.sun.com/javase/downloads/index.jsp<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></li>
	<li>Standard Geronimo: <span class="nobr"><a href="http://geronimo.apache.org/downloads.html" title="Visit page outside Confluence" rel="nofollow">http://geronimo.apache.org/downloads.html<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></li>
	<li>Sample Code: <span class="nobr"><a href="http://www.informatik.hs-furtwangen.de/~reich/Geronimo/GMontiorSample.zip" title="Visit page outside Confluence" rel="nofollow">http://www.informatik.hs-furtwangen.de/~reich/Geronimo/GMontiorSample.zip<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> (Contents: Sources, shell scripts, archives, README, etc.)</li>
</ul>


<h1><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Introduction"></a>Introduction</h1>

<p>A lot of articles can be found in managing application servers with remote clients using the Java Management Extensions (JMX; <span class="nobr"><a href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/" title="Visit page outside Confluence" rel="nofollow">http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>). These management client applications describe how to connect management clients to a server and how to retrieve information from the server applications. While much attention has been given to the client-side aspects of JMX, very little consideration has been given to the server-side challenges of developing and deploying management beans (MBeans). The reason lays in the difficulties of development and integration of such components. Often it is not possible at all. With the appearance of Geronimo the server-side monitoring by implementing MBeans for monitoring servlets or EJBs is simplified.</p>

<p>This article shows how to monitor the application server Geronimo from inside and how detailed information querying the MBeans can be analyzed, grouped and generated to meta data inside the server. This saves bandwidth between the management client and the server and allows to build a more efficient controlled application server with the monitor component inside.</p>

<p>To keep it simple the Geronimo monitoring component is investigating the processing time of three servlets. The average of all three processing times is built and an alarm is generated if the overall processing time is greater then a pre-defined value. How the developed monitoring component is integrated into the Geronimo architecture and how it is deployed and managed by the JConsole <span class="nobr"><a href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/" title="Visit page outside Confluence" rel="nofollow">http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> is content of this paper.</p>

<h1><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-OverviewaboutMBeansandGBeans"></a>Overview about MBeans and GBeans</h1>

<p>This section gives a short introduction of the management standard JMX (<span class="nobr"><a href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/" title="Visit page outside Confluence" rel="nofollow">http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>) with its fundamental beans, the MBeans. It explains that Geronimo can be extended by new components, if they are GBeans.</p>

<h2><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-JavaManagementExtension"></a>Java Management Extension</h2>

<p>Java Management eXtension (JMX) (<span class="nobr"><a href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/" title="Visit page outside Confluence" rel="nofollow">http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>) standardizes the managing and monitoring of applications and services. It enables developers to write management programs for their applications in a vendor/neutral fashion. Another important standard in the area of J2EE is JSR-77 (<span class="nobr"><a href="http://jcp.org/en/jsr/detail?id=77" title="Visit page outside Confluence" rel="nofollow">http://jcp.org/en/jsr/detail?id=77<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>). JSR-77 is a standard model for managing the J2EE platform and allows application server vendors to present performance metrics in a standard way. It defines a set of standard metric types that can be used to monitor J2EE platforms. The following types of metrics are defined in JSR-77: range statistics, boundary statistics, bounded range statistics, count statistics, and time statistics. Fundamental to JMX is the management bean, MBean. There are four types of MBeans (Standard, Dynamic, Model, Open), and each provide a different level of sophistication for management and monitoring (see <span class="nobr"><a href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/" title="Visit page outside Confluence" rel="nofollow">http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> for more details). In this paper, MBeans are used for the monitoring of servlets and for controlling the GBean monitor component.</p>

<h2><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-GeronimohostingourMonitorComponent"></a>Geronimo hosting our Monitor Component</h2>

<p>Geronimo is in the first place a Java<sup>TM</sup> 2 Platform Enterprise Edition (J2EE) application server, but can be seen as a general service container. The main focus of developing Geronimo was the managing and scaling of application servers. Geronimo's intention was never to re-implement a servlet or an EJB container, but to use existing open source applications (mainly from Apache <span class="nobr"><a href="http://www.apache.org/" title="Visit page outside Confluence" rel="nofollow">http://www.apache.org/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>) whenever possible, plug it together and build a new application server.</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Geronimoextendedbyamonitorcomponent"></a><br/>
<img src="/confluence/download/attachments/43470/architectureBigFigure.jpg" align="absmiddle" border="0" /><br/>
The standard Geronimo distribution comes with Apache Tomcat <span class="nobr"><a href="http://tomcat.apache.org/" title="Visit page outside Confluence" rel="nofollow">http://tomcat.apache.org/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> and EJB container (OpenEJB <span class="nobr"><a href="http://incubator.apache.org/openejb/" title="Visit page outside Confluence" rel="nofollow">http://incubator.apache.org/openejb/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>) component. Extending Geronimo by a monitoring component, developed for this paper, is like Tomcat, or any other component as long as they are GBeans, as shown in the Figure: <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Geronimoextendedbyamonitorcomponent" title="Geronimo extended by a monitor component on Apache Geronimo With A Monitor Component (JMX and JConsole)">Geronimo extended by a monitor component</a>. The fundamental entity within Geronimo are Geronimo Beans (GBeans).</p>

<h3><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-GeronimoBeans"></a>Geronimo Beans <a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-GeronimoBeans"></a></h3>

<p>Everything in Geronimo is  basically a Geronimo Bean (GBean). Geronimo's kernel handles these GBeans and stores them in it s repository. By default Geronimo uses not a database but a file directory named <tt>repository</tt>.</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-GeronimoGBeans"></a><br/>
<img src="/confluence/download/attachments/43470/architectureOverview.jpg" align="absmiddle" border="0" /><br/>
Users can install their own GBeans by describing them with a deployment plan and deploy them into Geronimo by using the GBeanBuilder (see Fig. <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-GeronimoGBeans" title="Geronimo GBeans on Apache Geronimo With A Monitor Component (JMX and JConsole)">Geronimo GBeans</a>). Every GBean must implement the <tt>GBeanLifecycle</tt> interface. This interface defines three methods: <tt>doStart()</tt>, <tt>doStop()</tt>, <tt>doFail()</tt> as you see in the class diagram (Fig. <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Classdiagramofthemanagementcomponentexample" title="Class diagram of the management component example on Apache Geronimo With A Monitor Component (JMX and JConsole)">Class diagram of the management component example</a>). The <tt>GBeanLifecycle</tt> interface is the contract between the Geronimo plug-in framework and our application, the GBean. The Geronimo framework uses dependency injection (see Fowler: <span class="nobr"><a href="http://www.martinfowler.com/articles/injection.html" title="Visit page outside Confluence" rel="nofollow">Inversion of control containers and the dependency injection pattern<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>, Frod: <span class="nobr"><a href="http://www-128.ibm.com/developerworks/opensource/library/os-ag-ioc1/" title="Visit page outside Confluence" rel="nofollow">Dependency injection in apache geronimo, part 1<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>, <span class="nobr"><a href="http://www-128.ibm.com/developerworks/opensource/library/os-ag-ioc2/" title="Visit page outside Confluence" rel="nofollow">Dependency injection in apache geronimo, part 2<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>) to set GBean parameters during the deployment process. There are two ways to inject information during the deployment process of GBeans:</p>
<ol>
	<li>getter/setter injection: framework injects information using the setter and getter methods of the GBean.</li>
	<li>constructor injection: framework injects information using the constructor of the GBean, when it is instantiated.</li>
</ol>


<p>The example of this article is using constructor injection to pass the servlet MBean names and the MBean server reference to the monitor GBean.</p>

<h1><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-TheServerSideMonitorComponent"></a>The Server-Side Monitor Component</h1>

<p>Subject of the section is a detailed architecture description of how the GBeans and MBeans are interacting. Discussed are the developed monitor classes and how to deploy the monitor component into Geronimo. Finally the monitor component is tested using the JConsole.</p>

<h2><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-GeronimoArchitectureOverview"></a>Geronimo Architecture Overview</h2>

<p>First an overview about the integration of the monitor component into Geronimo's architecture is given in Figure <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Geronimoarchitecturewithintegratedmonitorcomponent" title="Geronimo architecture with integrated monitor component on Apache Geronimo With A Monitor Component (JMX and JConsole)">Geronimo architecture with integrated monitor component</a>. It shows the JMX-Layer with the MBeanServer and the MBeans, the Tomcat component and the monitor component.</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Geronimoarchitecturewithintegratedmonitorcomponent"></a><br/>
<img src="/confluence/download/attachments/43470/architectureFigure.jpg" align="absmiddle" border="0" /><br/>
Geronimo registers each GBean as a MBean with the MBean Server, when the server is started. Tomcat <span class="nobr"><a href="http://tomcat.apache.org/" title="Visit page outside Confluence" rel="nofollow">http://tomcat.apache.org/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>, for example, consists of several GBeans and therefore consists of several MBeans (TomcatWebContainer, TomcatWebConnector, TomcatEngine, TomcatJAASRealm, etc.). For each servlet (S1, S2, S3) in Fig. <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Geronimoarchitecturewithintegratedmonitorcomponent" title="Geronimo architecture with integrated monitor component on Apache Geronimo With A Monitor Component (JMX and JConsole)">Geronimo architecture with integrated monitor component</a> there exists a MBean (MB<sub>S1</sub>, MB<sub>S2</sub>, MB<sub>S3</sub>) with information defined in the JSR-77 specification. The dashed line objects are instantiated, when the sample monitor component (Servlet Monitor GBean) is deployed into Geronimo using the "GBean Builder". The MBeanServerKernelBridge registers each loaded GBean as a MBean  (MB<sub>MC</sub>) at the MBean server. The instantiated thread (T<sub>C</sub>) retrieves information from the servlet MBeans (MB<sub>S1</sub>, MB<sub>S2</sub>, MB<sub>S3</sub>).</p>

<h2><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Servletsunderobservation"></a>Servlets under observation</h2>

<p>It is not the content of this article to show how to develop and deploy servlets. There is a simple security servlet example in Geronimo's user guide <span class="nobr"><a href="http://cwiki.apache.org/GMOxDOC11/apache-geronimo-v11-users-guide.html" title="Visit page outside Confluence" rel="nofollow">http://cwiki.apache.org/GMOxDOC11/apache-geronimo-v11-users-guide.html<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>, if you want to know more about web application in Geronimo. When you unpack the sources (found in Section <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Whatisneeded" title="What is needed on Apache Geronimo With A Monitor Component (JMX and JConsole)">What is needed</a>) and follow the included Readme file you can deploy a web application consisting of 3 simple servlets (ServletStatistic, ServeletData, ServletSystemTime). Now you should be able to call the servlets. For example: <span class="nobr"><a href="http://localhost:8080/mysample/app1/ServletSystemTime" title="Visit page outside Confluence" rel="nofollow">http://localhost:8080/mysample/app1/ServletSystemTime<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.</p>

<h2><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-ServerSideMonitorComponent"></a>Server-Side Monitor Component</h2>

<p>The server-side monitor component consists of 2 classes (see Fig. <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Classdiagramofthemanagementcomponentexample" title="Class diagram of the management component example on Apache Geronimo With A Monitor Component (JMX and JConsole)">Class diagram of the management component example</a>):</p>
<ul>
	<li>the \verb+ServletMonitorGBean+, which implements the <tt>GBeanLifecyle</tt> interface and</li>
	<li>the \verb+AverageBuilder&#43; thread, which is doing the actual collection of data from the servlet MBeans. If the calculated  average processing time is above the threshold an alarm is generated. The alarming function is not sending an e-mail, it is only logging "ALARM" to keep the code simple.</li>
</ul>


<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Classdiagramofthemanagementcomponentexample"></a><br/>
<img src="/confluence/download/attachments/43470/ClassDiagram.jpg" align="absmiddle" border="0" /></p>

<h3><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-TheMonitorGBean"></a>The Monitor GBean</h3>

<p>The Geronimo framework is injecting information about the MBean server reference and the MBean servlet object names into the constructor during deployment. Listing {#Listing 1] shows you how to inform the Geronimo kernel about the ability of the GBean. The <tt>GBeanInfoBuilder</tt> is used to tell Geronimo the name of the GBean class. Then the constructor injection is defined by <tt>addAttribute</tt> to specify the three servlet MBean names, <tt>addReference</tt> to specify the MBean server reference, and <tt>setConstructor</tt> to specify the constructor call.</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Listing1"></a></p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>ServletMonitorGBean.java (cutout)</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">public</span> <span class="code-keyword">static</span> <span class="code-keyword">final</span> GBeanInfo GBEAN_INFO;
<span class="code-keyword">static</span> {
 GBeanInfoBuilder infoB = GBeanInfoBuilder.createStatic(<span class="code-quote">"ServletMonitorGBean"</span>, ServletMonitorGBean.class);
 infoB.addAttribute(<span class="code-quote">"servletName1"</span>, <span class="code-object">String</span>.class, <span class="code-keyword">true</span>);
 infoB.addAttribute(<span class="code-quote">"servletName2"</span>, <span class="code-object">String</span>.class, <span class="code-keyword">true</span>);
 infoB.addAttribute(<span class="code-quote">"servletName3"</span>, <span class="code-object">String</span>.class, <span class="code-keyword">true</span>);
 infoB.addReference(<span class="code-quote">"MBeanServerReference"</span>, MBeanServerReference.class);
 infoB.setConstructor(<span class="code-keyword">new</span> <span class="code-object">String</span>[] { <span class="code-quote">"MBeanServerReference"</span>, <span class="code-quote">"servletName1"</span>, <span class="code-quote">"servletName2"</span>, <span class="code-quote">"servletName3"</span>});</pre>
</div></div>
<p>Further we want the methods, <tt>startCalcAverage</tt>, <tt>stopCalcAverage</tt>, <tt>defineThreshold</tt> and <tt>defineUpdateInterval</tt> to be available by an JMX management client. This allows us to interact with the monitor component through a MBean using the JConsole as shown in Section <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-AccessingGeronimousingJConsole" title="Accessing Geronimo using JConsole on Apache Geronimo With A Monitor Component (JMX and JConsole)">Accessing Geronimo using JConsole</a>. Publishing GBean methods through a MBean is done by the <tt>addOperation</tt> of the <tt>GBeanInfoBuilder</tt> by specifying the method names and parameters, as seen in Listing <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Listing2" title="Listing 2 on Apache Geronimo With A Monitor Component (JMX and JConsole)">Listing 2</a>:</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Listing2"></a></p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>ServletMonitorGBean.java (cutout)</b></div><div class="codeContent">
<pre class="code-java">infoB.addOperation(<span class="code-quote">"startCalcAverage"</span>);
 infoB.addOperation(<span class="code-quote">"stopCalcAverage"</span>);
 infoB.addOperation(<span class="code-quote">"defineThreshold"</span>,<span class="code-keyword">new</span> <span class="code-object">Class</span>[]{<span class="code-object">int</span>.class});
 infoB.addOperation(<span class="code-quote">"defineUpdateInterval"</span>,<span class="code-keyword">new</span> <span class="code-object">Class</span>[]{<span class="code-object">int</span>.class});</pre>
</div></div>
<p>The MBean configuration process is finished by setting the variable <tt>GBEAN_INFO</tt>. Thus the <tt>MBeanServerKernelBridge</tt> can use <tt>getGBeanInfo()</tt> to get a <tt>GBeanInfo</tt> object (Listing <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Listing3" title="Listing 3 on Apache Geronimo With A Monitor Component (JMX and JConsole)">Listing 3</a>) with the MBean configuration and builds the appropriate MBean MB<sub>MC</sub> Figure: <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Geronimoarchitecturewithintegratedmonitorcomponent" title="Geronimo architecture with integrated monitor component on Apache Geronimo With A Monitor Component (JMX and JConsole)">Geronimo architecture with integrated monitor component</a>.</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Listing3"></a></p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>ServletMonitorGBean.java (cutout)</b></div><div class="codeContent">
<pre class="code-java">GBEAN_INFO = infoB.getBeanInfo();
<span class="code-keyword">public</span> <span class="code-keyword">static</span> GBeanInfo getGBeanInfo() { <span class="code-keyword">return</span> GBEAN_INFO; }</pre>
</div></div>

<h3><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-TheAverageBuilderThread"></a>The AverageBuilder Thread</h3>

<p>The <tt>AverageBuilder</tt> class (Fig. <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Classdiagramofthemanagementcomponentexample" title="Class diagram of the management component example on Apache Geronimo With A Monitor Component (JMX and JConsole)">Class diagram of the management component example</a>) is a thread which is querying the servlet MBeans. To query information from servlet MBeans, like the <tt>requestCounter</tt>, you have to know the object name of the MBean. You can find out about the object name using a JMX management client. In the section, <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-InteractingwiththeMonitorComponent" title="Interacting with the Monitor Component on Apache Geronimo With A Monitor Component (JMX and JConsole)">Interacting with the Monitor Component</a>,  it is shown how to find out about the object names of the servlet MBeans. Since we injected this information during the deployment process of the GBean, we are not to worry about that at the moment. Having the MBean object name we get the information <tt>precessingTime</tt> and <tt>requestCount</tt> as follows (see Listing <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Listing4" title="Listing 4 on Apache Geronimo With A Monitor Component (JMX and JConsole)">Listing 4</a>):</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Listing4"></a></p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>ServletMonitorGBean.java (cutout)</b></div><div class="codeContent">
<pre class="code-java">ObjectName objNameStatisticServlet = ObjectName.getInstance(statisticServlet);
ObjectName objNameDataServlet=ObjectName.getInstance(dataServlet);
ObjectName objNameSystemTimeServlet = ObjectName.getInstance(systemTimeServlet);
<span class="code-object">long</span> pt1=((<span class="code-object">Long</span>)mbserver.getAttribute(objNameStatisticServlet, <span class="code-quote">"processingTime"</span>)).longValue();
<span class="code-object">int</span> rc1=((<span class="code-object">Integer</span>)mbserver.getAttribute(objNameStatisticServlet, <span class="code-quote">"requestCount"</span>)).intValue();</pre>
</div></div>
<p>Doing this for all 3 servlets and building the average can be seen in the source code.</p>

<h2><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-DeployingtheServerSideMonitorComponent"></a>Deploying the Server-Side Monitor Component</h2>

<p>When the GBean monitor component is compiled, it has to be deployed into Geronimo.<br/>
For deploying the monitor component everything has to be packaged according to Geronimo (see Geronimo's User Guide <span class="nobr"><a href="http://cwiki.apache.org/GMOxDOC11/apache-geronimo-v11-users-guide.html" title="Visit page outside Confluence" rel="nofollow">http://cwiki.apache.org/GMOxDOC11/apache-geronimo-v11-users-guide.html<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>). That means you have to pack your GBeans with a deployment-plan into a jar file, e.g. <tt>SimpleServletMonitor-1.0.jar</tt> and deploy it. For the deployment, we have chosen the java deployment program, deployer:</p>
<div class="code"><div class="codeContent">
<pre class="code-java">java -jar $GERONIMOHOME/bin/deployer.jar --user system --password manager deploy SimpleServletMonitor-1.0.jar</pre>
</div></div>
<p>It is a lot faster using the deployer program, then doing all the clicking using Geronimo's browser based management tool (<span class="nobr"><a href="http://localhost:8080/console" title="Visit page outside Confluence" rel="nofollow">http://localhost:8080/console<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>). With the example code, there comes also some simple Linux shell scripts supporting deployment, un-deployment, listing, etc.</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-DeploymentPlansforGeronimo%27sGBeans"></a></p>
<h3><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-DeploymentPlansforGeronimo%27sGBeans"></a>Deployment Plans for Geronimo's GBeans</h3>

<p>Geronimo's deployment plans (<tt>geronimo-service.xml</tt>) state information about GBean names, references and dependencies. For a more detailed description about the deployment descriptor, see <span class="nobr"><a href="http://cwiki.apache.org/GMOxDOC11/apache-geronimo-v11-users-guide.html" title="Visit page outside Confluence" rel="nofollow">http://cwiki.apache.org/GMOxDOC11/apache-geronimo-v11-users-guide.html<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>. Our deployment descriptor (Listing <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Listing5" title="Listing 5 on Apache Geronimo With A Monitor Component (JMX and JConsole)">Listing 5</a>) consists of an <tt>&lt;environment&gt;</tt> and and <tt>&lt;gbean&gt;</tt> part:</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Listing5"></a></p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>geronimo-service.xml</b></div><div class="codeContent">
<pre class="code-java">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;
&lt;module xmlns=<span class="code-quote">"http:<span class="code-comment">//geronimo.apache.org/xml/ns/deployment-1.1"</span>&gt;
</span>  &lt;environment&gt;...&lt;/environment&gt;
  &lt;gbean ...&gt;...&lt;/gbean&gt;
&lt;/module&gt;</pre>
</div></div>

<h4><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-The%60%60environment%27%27part%3A"></a>The ``environment'' part:</h4>

<p>We have to give our monitor GBean an unique name inside Geronimo by defining its <tt>groupId</tt>, <tt>artifactId</tt>, <tt>version</tt> and <tt>type</tt>. Furthermore we have to define <tt>&lt;dependencies&gt;</tt> (see Listing: <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Listing6" title="Listing6 on Apache Geronimo With A Monitor Component (JMX and JConsole)">Listing6</a>). Because we want to inject the object reference for <tt>MBeanServerReference</tt> to the GBean constructor our deployment process depends on the <tt>geronimo/rmi-naming</tt> defined as the artifactId in the <tt>geronimo-service.xml</tt>.<br/>
The serialized version of that reference is found in the repository under: <tt>geronimo/rmi-naming</tt>.</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Listing6"></a></p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>geronimo-service.xml</b></div><div class="codeContent">
<pre class="code-java">&lt;environment&gt;
  &lt;moduleId&gt;
    &lt;groupId&gt;mysample&lt;/groupId&gt;
    &lt;artifactId&gt;SimpleServletMonitor&lt;/artifactId&gt;
    &lt;version&gt;1.0&lt;/version&gt;
    &lt;type&gt;car&lt;/type&gt;
  &lt;/moduleId&gt;
  &lt;dependencies&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;geronimo&lt;/groupId&gt;
      &lt;artifactId&gt;rmi-naming&lt;/artifactId&gt;
      &lt;type&gt;car&lt;/type&gt;
    &lt;/dependency&gt;
  &lt;/dependencies&gt;
&lt;/environment&gt;</pre>
</div></div>

<h4><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-The%60%60gbean%27%27part%3A"></a>The ``gbean'' part:</h4>

<p>First you have to define the name of the GBean and the exact class name as XML attributes of the element <tt>&lt;gbean&gt;</tt> (see Listing: <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Listing7" title="Listing7 on Apache Geronimo With A Monitor Component (JMX and JConsole)">Listing7</a>).<br/>
Then you define all the references and attributes, which should be injected during deployment.</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Listing7"></a></p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>geronimo-service.xml</b></div><div class="codeContent">
<pre class="code-java">&lt;gbean name=<span class="code-quote">"ServletMonitorGBean"</span> class=<span class="code-quote">"de.hsfurtwangen.informatik.ServletMonitorGBean"</span>&gt;
  &lt;reference name=<span class="code-quote">"MBeanServerReference"</span>&gt;
    &lt;name&gt;MBeanServerReference&lt;/name&gt;
  &lt;/reference&gt;
  &lt;attribute name=<span class="code-quote">"servletName1"</span> type=<span class="code-quote">"java.lang.<span class="code-object">String</span>"</span>&gt;
    Geronimo:j2eeType=Servlet,name=ServletStatistic,WebModule=<span class="code-comment">//localhost/mysample,J2EEApplication=none,J2EEServer=none
</span>  &lt;/attribute&gt;
  &lt;attribute name=<span class="code-quote">"servletName2"</span> type=<span class="code-quote">"java.lang.<span class="code-object">String</span>"</span>&gt;
    Geronimo:j2eeType=Servlet,name=ServletData,WebModule=<span class="code-comment">//localhost/mysample,J2EEApplication=none,J2EEServer=none
</span>  &lt;/attribute&gt;
  &lt;attribute name=<span class="code-quote">"servletName3"</span> type=<span class="code-quote">"java.lang.<span class="code-object">String</span>"</span>&gt;
    Geronimo:j2eeType=Servlet,name=ServletSystemTime,WebModule=<span class="code-comment">//localhost/mysample,J2EEApplication=none,J2EEServer=none
</span>  &lt;/attribute&gt;
&lt;/gbean&gt;</pre>
</div></div>
<p>As seen in our example above (Listing: <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Listing7" title="Listing7 on Apache Geronimo With A Monitor Component (JMX and JConsole)">Listing7</a>), the following parameters are injected by constructor injection of the Geronimo framework:</p>
<ul>
	<li>MBeanServerReference: The corresponding source code in the GBean class is: <tt>GBeanInfoBuilder.addReference("MBeanServerReference",MBeanServerReference.class)</tt></li>
	<li>servleteName1: The corresponding source code in the GBean class is: <tt>GBeanInfoBuilder.addAttribute("servletName1",String.class)</tt></li>
	<li>servletName2: The corresponding source code in the GBean class is: <tt>GBeanInfoBuilder.addAttribute("servletName2",String.class)</tt></li>
	<li>servletName3: The corresponding source code in the GBean class is: <tt>GBeanInfoBuilder.addAttribute("servletName3",String.class)</tt></li>
</ul>


<h2><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-TestingtheMonitorComponent"></a>Testing the Monitor Component</h2>


<h3><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-AccessingGeronimousingJConsole"></a>Accessing Geronimo using JConsole</h3>

<p>We want to use JConsole <span class="nobr"><a href="http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html" title="Visit page outside Confluence" rel="nofollow">http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>, <span class="nobr"><a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jconsole.html" title="Visit page outside Confluence" rel="nofollow">http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jconsole.html<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>, which is a JMX-compliant GUI tool that connects to a running JVM. If the <tt>JAVA_HOME</tt> environment variable is set to a JDK 5.0, you only have to type in:</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-JConsole"></a><br/>
<img src="/confluence/download/attachments/43470/jconsoleConnect.jpg" align="absmiddle" border="0" /><br/>
To connect to your Geronimo server you have to use the following settings in your JConsole (see Fig. <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-JConsole" title="JConsole on Apache Geronimo With A Monitor Component (JMX and JConsole)">JConsole</a>):</p>
<ul>
	<li><b>JMX URL:</b> <tt>service:jmx:rmi:///jndi/rmi://localhost:1099/JMXConnector</tt></li>
	<li><b>User Name:</b> <tt>system</tt></li>
	<li><b>Password:</b> <tt>manager</tt></li>
</ul>


<p>After the management client is connected to Geronimo you switch to the MBean view (see Fig. <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-ServletMBeanview" title="Servlet MBean view on Apache Geronimo With A Monitor Component (JMX and JConsole)">Servlet MBean view</a>) and navigate to one of the deployed servlets, e.g. <tt>ServletStatistic</tt> (1st and 2nd figure of Fig. <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-ServletMBeanview" title="Servlet MBean view on Apache Geronimo With A Monitor Component (JMX and JConsole)">Servlet MBean view</a>).</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-ServletMBeanview"></a><br/>
<img src="/confluence/download/attachments/43470/jconsoleMBeans1.jpg" align="absmiddle" border="0" /> <img src="/confluence/download/attachments/43470/jconsoleMBeans2.jpg" align="absmiddle" border="0" /> <img src="/confluence/download/attachments/43470/jconsoleServletStatistic.jpg" align="absmiddle" border="0" /></p>

<p>One interesting information is the object name (3rd figure of Fig. <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-ServletMBeanview" title="Servlet MBean view on Apache Geronimo With A Monitor Component (JMX and JConsole)">Servlet MBean view</a>)) that is used in the deployment descriptor for Geronimo's GBean deployment plan (see section <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-DeploymentPlansforGeronimo%27sGBeans" title="Deployment Plans for Geronimo's GBeans on Apache Geronimo With A Monitor Component (JMX and JConsole)">Deployment Plans for Geronimo's GBeans</a>).</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-InteractingwiththeMonitorComponent"></a></p>

<h3><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-InteractingwiththeMonitorComponent%3AServletMonitorGBean"></a>Interacting with the Monitor Component: ServletMonitorGBean</h3>

<p>First, navigate to the GBean (see Fig. <a href="#ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-GBeanOperations" title="GBean Operations on Apache Geronimo With A Monitor Component (JMX and JConsole)">GBean Operations</a>). Then you switch to the operations view. Now you have access to all the methods you defined in the GBean with \verb+GBeanInfoBuilder+. Let's start the process by calculating the average processing time of the 3 servlets. Just click on \verb+startCalcAverage()&#43; and you can see in the \verb+GERONIMO_HOME/var/log/geronimo.out&#43; file that the averages are calculated. Now reload the servlets several times, so that you can see changes in the output. You could also change the update time for the information polling of the servlets. Click first on \verb+parameter0&#43; and set the value to 5000 and then on \verb+defineUpdateInterval+. Now every 5s the data is collected from the servlets.<br/>
Play around and have fun.</p>

<p><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-GBeanOperations"></a><br/>
<img src="/confluence/download/attachments/43470/jconsoleMBeanView.jpg" align="absmiddle" border="0" /></p>

<h1><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-Conclusion"></a>Conclusion</h1>

<p>An overview of the used technologies, Geronimo's GBeans and JMX has been given. You should now have an idea how to develop and deploy a monitor component inside Geronimo application server and how to improve the monitoring. The developed example shows a server's ability to do its own monitoring and application specific alarming. There are a lot more possibilities what can be done. For example a server could monitor the number of servlet requests and if there are more then, e.g. 20 per seconds, there might be a denial of service attack. Analyze the monitored data inside the server and optimize Geronimo's configuration, e.g. thread pool size. etc.</p>

<h1><a name="ApacheGeronimoWithAMonitorComponent%28JMXandJConsole%29-References"></a>References</h1>

<ul>
	<li>Sun's java management extensions (JMX) page. <span class="nobr"><a href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/" title="Visit page outside Confluence" rel="nofollow">http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.</li>
	<li>JConsole reference. <span class="nobr"><a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jconsole.html" title="Visit page outside Confluence" rel="nofollow">http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jconsole.html<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.</li>
	<li>JConsole manual. <span class="nobr"><a href="http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html" title="Visit page outside Confluence" rel="nofollow">http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.</li>
	<li>JSR-77: J2EE management specification. <span class="nobr"><a href="http://jcp.org/en/jsr/detail?id=77" title="Visit page outside Confluence" rel="nofollow">http://jcp.org/en/jsr/detail?id=77<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.</li>
	<li>Apache home page. <span class="nobr"><a href="http://www.apache.org/" title="Visit page outside Confluence" rel="nofollow">http://www.apache.org/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.</li>
	<li>Tomcat home page. <span class="nobr"><a href="http://tomcat.apache.org/" title="Visit page outside Confluence" rel="nofollow">http://tomcat.apache.org/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.</li>
	<li>OpenEJB home page. <span class="nobr"><a href="http://incubator.apache.org/openejb/" title="Visit page outside Confluence" rel="nofollow">http://incubator.apache.org/openejb/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.</li>
	<li>Martin Fowler; <em>Inversion of control containers and the dependency injection pattern.</em>; <span class="nobr"><a href="http://www.martinfowler.com/articles/injection.html" title="Visit page outside Confluence" rel="nofollow">http://www.martinfowler.com/articles/injection.html<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>;  January; 2004.</li>
	<li>Niel Frod; <em>Dependency injection in apache geronimo, part 1: A new way to look at decoupling in j2ee applications.</em>; <span class="nobr"><a href="http://www-128.ibm.com/developerworks/opensource/library/os-ag-ioc1/" title="Visit page outside Confluence" rel="nofollow">http://www-128.ibm.com/developerworks/opensource/library/os-ag-ioc1/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>; February; 2006.</li>
	<li>Niel Frod; <em>Dependency injection in apache geronimo, part 2: The next generation.</em>; <span class="nobr"><a href="http://www-128.ibm.com/developerworks/opensource/library/os-ag-ioc2/" title="Visit page outside Confluence" rel="nofollow">http://www-128.ibm.com/developerworks/opensource/library/os-ag-ioc2/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>; February; 2006.</li>
</ul>
</div>


</td></tr></table></div>
<p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tr>
        <td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="http://cwiki.apache.org/confluence/images/border/spacer.gif" width="1" height="1" border="0"/></td>
    </tr>
</table>

<div class="smalltext">
    Powered by
    <a href="http://www.atlassian.com/software/confluence/default.jsp?clicked=footer" class="smalltext">Atlassian Confluence</a>
    (Version: 2.2.9 Build:#527 Sep 07, 2006)
    -
    <a href="http://jira.atlassian.com/secure/BrowseProject.jspa?id=10470" class="smalltext">Bug/feature request</a><br/>
    <br>
    <a href="http://cwiki.apache.org/confluence/users/viewnotifications.action">Unsubscribe or edit your notifications preferences</a>

</div>

</body>
</html>


Mime
View raw message