<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" font-family="serif,Symbol,ZapfDingbats" font-size="11pt" text-align="justify" line-height="1.4" font-selection-strategy="character-by-character" line-height-shift-adjustment="disregard-shifts" language="en"><fo:layout-master-set><fo:simple-page-master master-name="blank" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body display-align="center" margin-bottom="15mm" margin-top="10mm" region-name="blank-body"/><fo:region-before region-name="xsl-region-before-blank" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-blank" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="titlepage-first" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-first" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-first" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="titlepage-odd" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-odd" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-odd" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="titlepage-even" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-even" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-even" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="lot-first" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-first" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-first" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="lot-odd" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-odd" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-odd" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="lot-even" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-even" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-even" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="front-first" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-first" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-first" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="front-odd" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-odd" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-odd" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="front-even" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-even" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-even" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="body-first" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-first" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-first" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="body-odd" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-odd" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-odd" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="body-even" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-even" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-even" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="back-first" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-first" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-first" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="back-odd" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-odd" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-odd" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="back-even" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1"/><fo:region-before region-name="xsl-region-before-even" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-even" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="index-first" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="2"/><fo:region-before region-name="xsl-region-before-first" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-first" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="index-odd" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="2"/><fo:region-before region-name="xsl-region-before-odd" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-odd" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="index-even" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="2"/><fo:region-before region-name="xsl-region-before-even" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-even" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="blank-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-blank" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-blank" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="titlepage-first-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-first" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-first" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="titlepage-odd-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-odd" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-odd" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="titlepage-even-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-even" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-even" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="lot-first-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-first" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-first" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="lot-odd-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-odd" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-odd" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="lot-even-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-even" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-even" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="front-first-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-first" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-first" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="front-odd-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-odd" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-odd" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="front-even-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-even" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-even" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="body-first-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-first" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-first" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="body-odd-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-odd" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-odd" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="body-even-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-even" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-even" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="back-first-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-first" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-first" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="back-odd-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-odd" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-odd" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="back-even-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm - 0pc" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="1" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-even" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-even" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="index-first-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="2" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-first" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-first" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="index-odd-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-left="18mm" margin-right="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="2" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-odd" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-odd" extent="10mm" display-align="after"/></fo:simple-page-master><fo:simple-page-master master-name="index-even-draft" page-width="210mm" page-height="297mm" margin-top="5mm" margin-bottom="0mm" margin-right="18mm" margin-left="18mm"><fo:region-body margin-bottom="15mm" margin-top="10mm" column-gap="12pt" column-count="2" background-image="url(http://docbook.sourceforge.net/release/images/draft.png)" background-attachment="fixed" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center"/><fo:region-before region-name="xsl-region-before-even" extent="10mm" display-align="before"/><fo:region-after region-name="xsl-region-after-even" extent="10mm" display-align="after"/></fo:simple-page-master><fo:page-sequence-master master-name="titlepage"><fo:repeatable-page-master-alternatives><fo:conditional-page-master-reference master-reference="blank" blank-or-not-blank="blank"/><fo:conditional-page-master-reference master-reference="titlepage-first" page-position="first"/><fo:conditional-page-master-reference master-reference="titlepage-odd" odd-or-even="odd"/><fo:conditional-page-master-reference odd-or-even="even" master-reference="titlepage-odd"/></fo:repeatable-page-master-alternatives></fo:page-sequence-master><fo:page-sequence-master master-name="lot"><fo:repeatable-page-master-alternatives><fo:conditional-page-master-reference master-reference="blank" blank-or-not-blank="blank"/><fo:conditional-page-master-reference master-reference="lot-first" page-position="first"/><fo:conditional-page-master-reference master-reference="lot-odd" odd-or-even="odd"/><fo:conditional-page-master-reference odd-or-even="even" master-reference="lot-odd"/></fo:repeatable-page-master-alternatives></fo:page-sequence-master><fo:page-sequence-master master-name="front"><fo:repeatable-page-master-alternatives><fo:conditional-page-master-reference master-reference="blank" blank-or-not-blank="blank"/><fo:conditional-page-master-reference master-reference="front-first" page-position="first"/><fo:conditional-page-master-reference master-reference="front-odd" odd-or-even="odd"/><fo:conditional-page-master-reference odd-or-even="even" master-reference="front-odd"/></fo:repeatable-page-master-alternatives></fo:page-sequence-master><fo:page-sequence-master master-name="body"><fo:repeatable-page-master-alternatives><fo:conditional-page-master-reference master-reference="blank" blank-or-not-blank="blank"/><fo:conditional-page-master-reference master-reference="body-first" page-position="first"/><fo:conditional-page-master-reference master-reference="body-odd" odd-or-even="odd"/><fo:conditional-page-master-reference odd-or-even="even" master-reference="body-odd"/></fo:repeatable-page-master-alternatives></fo:page-sequence-master><fo:page-sequence-master master-name="back"><fo:repeatable-page-master-alternatives><fo:conditional-page-master-reference master-reference="blank" blank-or-not-blank="blank"/><fo:conditional-page-master-reference master-reference="back-first" page-position="first"/><fo:conditional-page-master-reference master-reference="back-odd" odd-or-even="odd"/><fo:conditional-page-master-reference odd-or-even="even" master-reference="back-odd"/></fo:repeatable-page-master-alternatives></fo:page-sequence-master><fo:page-sequence-master master-name="index"><fo:repeatable-page-master-alternatives><fo:conditional-page-master-reference master-reference="blank" blank-or-not-blank="blank"/><fo:conditional-page-master-reference master-reference="index-first" page-position="first"/><fo:conditional-page-master-reference master-reference="index-odd" odd-or-even="odd"/><fo:conditional-page-master-reference odd-or-even="even" master-reference="index-odd"/></fo:repeatable-page-master-alternatives></fo:page-sequence-master><fo:page-sequence-master master-name="titlepage-draft"><fo:repeatable-page-master-alternatives><fo:conditional-page-master-reference master-reference="blank-draft" blank-or-not-blank="blank"/><fo:conditional-page-master-reference master-reference="titlepage-first-draft" page-position="first"/><fo:conditional-page-master-reference master-reference="titlepage-odd-draft" odd-or-even="odd"/><fo:conditional-page-master-reference odd-or-even="even" master-reference="titlepage-odd-draft"/></fo:repeatable-page-master-alternatives></fo:page-sequence-master><fo:page-sequence-master master-name="lot-draft"><fo:repeatable-page-master-alternatives><fo:conditional-page-master-reference master-reference="blank-draft" blank-or-not-blank="blank"/><fo:conditional-page-master-reference master-reference="lot-first-draft" page-position="first"/><fo:conditional-page-master-reference master-reference="lot-odd-draft" odd-or-even="odd"/><fo:conditional-page-master-reference odd-or-even="even" master-reference="lot-odd-draft"/></fo:repeatable-page-master-alternatives></fo:page-sequence-master><fo:page-sequence-master master-name="front-draft"><fo:repeatable-page-master-alternatives><fo:conditional-page-master-reference master-reference="blank-draft" blank-or-not-blank="blank"/><fo:conditional-page-master-reference master-reference="front-first-draft" page-position="first"/><fo:conditional-page-master-reference master-reference="front-odd-draft" odd-or-even="odd"/><fo:conditional-page-master-reference odd-or-even="even" master-reference="front-odd-draft"/></fo:repeatable-page-master-alternatives></fo:page-sequence-master><fo:page-sequence-master master-name="body-draft"><fo:repeatable-page-master-alternatives><fo:conditional-page-master-reference master-reference="blank-draft" blank-or-not-blank="blank"/><fo:conditional-page-master-reference master-reference="body-first-draft" page-position="first"/><fo:conditional-page-master-reference master-reference="body-odd-draft" odd-or-even="odd"/><fo:conditional-page-master-reference odd-or-even="even" master-reference="body-odd-draft"/></fo:repeatable-page-master-alternatives></fo:page-sequence-master><fo:page-sequence-master master-name="back-draft"><fo:repeatable-page-master-alternatives><fo:conditional-page-master-reference master-reference="blank-draft" blank-or-not-blank="blank"/><fo:conditional-page-master-reference master-reference="back-first-draft" page-position="first"/><fo:conditional-page-master-reference master-reference="back-odd-draft" odd-or-even="odd"/><fo:conditional-page-master-reference odd-or-even="even" master-reference="back-odd-draft"/></fo:repeatable-page-master-alternatives></fo:page-sequence-master><fo:page-sequence-master master-name="index-draft"><fo:repeatable-page-master-alternatives><fo:conditional-page-master-reference master-reference="blank-draft" blank-or-not-blank="blank"/><fo:conditional-page-master-reference master-reference="index-first-draft" page-position="first"/><fo:conditional-page-master-reference master-reference="index-odd-draft" odd-or-even="odd"/><fo:conditional-page-master-reference odd-or-even="even" master-reference="index-odd-draft"/></fo:repeatable-page-master-alternatives></fo:page-sequence-master></fo:layout-master-set><fo:page-sequence xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions" hyphenate="false" master-reference="titlepage" language="en" format="1" initial-page-number="1" force-page-count="no-force" hyphenation-character="-" hyphenation-push-character-count="2" hyphenation-remain-character-count="2"><fo:static-content flow-name="xsl-region-before-first"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"/></fo:static-content><fo:static-content flow-name="xsl-region-before-odd"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-even"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-blank"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"/></fo:static-content><fo:static-content flow-name="xsl-footnote-separator"><fo:block><fo:leader color="black" leader-pattern="rule" leader-length="1in"/></fo:block></fo:static-content><fo:static-content flow-name="blank-body"><fo:block text-align="center"/></fo:static-content><fo:static-content flow-name="xsl-region-after-first"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"/></fo:static-content><fo:static-content flow-name="xsl-region-after-odd"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-even"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-blank"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"/></fo:static-content><fo:flow flow-name="xsl-region-body"><fo:block id="book"><fo:block><fo:block><fo:block><fo:table table-layout="fixed" width="175mm"><fo:table-column column-width="175mm"/><fo:table-body><fo:table-row><fo:table-cell text-align="center"><fo:block><fo:block font-family="Helvetica" font-size="24pt" padding-before="10mm">OpenNMS Developer Guide</fo:block></fo:block><fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">OpenNMS internals</fo:block><fo:block font-family="Helvetica" font-size="12pt" padding="10mm"/></fo:table-cell></fo:table-row><fo:table-row><fo:table-cell text-align="center"><fo:block font-family="Helvetica" font-size="14pt" padding="10mm">2001</fo:block></fo:table-cell></fo:table-row><fo:table-row><fo:table-cell text-align="center"><fo:block font-family="Helvetica" font-size="12pt" padding="10mm">Copyright © 2005-2009 Christy Marshall</fo:block><fo:block font-family="Helvetica" font-size="10pt" padding="1mm"/></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:block></fo:block></fo:block></fo:flow></fo:page-sequence><fo:page-sequence xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions" hyphenate="false" master-reference="lot" language="en" format="i" initial-page-number="auto" force-page-count="no-force" hyphenation-character="-" hyphenation-push-character-count="2" hyphenation-remain-character-count="2"><fo:static-content flow-name="xsl-region-before-first"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-odd"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block>OpenNMS Developer Guide</fo:block></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-even"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block>OpenNMS Developer Guide</fo:block></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-blank"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"/></fo:static-content><fo:static-content flow-name="xsl-footnote-separator"><fo:block><fo:leader color="black" leader-pattern="rule" leader-length="1in"/></fo:block></fo:static-content><fo:static-content flow-name="blank-body"><fo:block text-align="center"/></fo:static-content><fo:static-content flow-name="xsl-region-after-first"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-odd"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-even"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-blank"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"/></fo:static-content><fo:flow flow-name="xsl-region-body" start-indent="4pc" end-indent="0pt"><fo:block space-before.minimum="0.5em" space-before.optimum="1em" space-before.maximum="2em" space-after.minimum="0.5em" space-after.optimum="1em" space-after.maximum="2em" id="toc...book"><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="preface">Preface</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="preface"><fo:page-number-citation ref-id="preface"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap1">1.  Chapter 1</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap1"><fo:page-number-citation ref-id="chap1"/></fo:basic-link></fo:inline></fo:block><fo:block id="toc.book.chap1" margin-left="24pt"><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap1sect1">1.1.  What is OpenNMS?</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap1sect1"><fo:page-number-citation ref-id="chap1sect1"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap1sect2">1.2.  Why OpenNMS?</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap1sect2"><fo:page-number-citation ref-id="chap1sect2"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap1sect3">1.3.  Features</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap1sect3"><fo:page-number-citation ref-id="chap1sect3"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap1sect4">1.4.  Why Develop for OpenNMS?</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap1sect4"><fo:page-number-citation ref-id="chap1sect4"/></fo:basic-link></fo:inline></fo:block></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap2">2.  Chapter 2</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap2"><fo:page-number-citation ref-id="chap2"/></fo:basic-link></fo:inline></fo:block><fo:block id="toc.book.chap2" margin-left="24pt"><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap2sect1">2.1.  Java 2</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap2sect1"><fo:page-number-citation ref-id="chap2sect1"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap2sect2">2.2.  XML/XSL</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap2sect2"><fo:page-number-citation ref-id="chap2sect2"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap2sect3">2.3.  Servlets</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap2sect3"><fo:page-number-citation ref-id="chap2sect3"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap2sect4">2.4.  JSPs</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap2sect4"><fo:page-number-citation ref-id="chap2sect4"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap2sect5">2.5.  RDBMS</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap2sect5"><fo:page-number-citation ref-id="chap2sect5"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap2sect6">2.6.  JMS</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap2sect6"><fo:page-number-citation ref-id="chap2sect6"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap2sect7">2.7.  Castor</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap2sect7"><fo:page-number-citation ref-id="chap2sect7"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap2sect8">2.8.  JoeSNMP</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap2sect8"><fo:page-number-citation ref-id="chap2sect8"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap2sect9">2.9.  RRDTool</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap2sect9"><fo:page-number-citation ref-id="chap2sect9"/></fo:basic-link></fo:inline></fo:block></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3">3.  Chapter 3</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3"><fo:page-number-citation ref-id="chap3"/></fo:basic-link></fo:inline></fo:block><fo:block id="toc.book.chap3" margin-left="24pt"><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3sect1">3.1.  Discovery</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3sect1"><fo:page-number-citation ref-id="chap3sect1"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3sect2">3.2.  CAPSD</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3sect2"><fo:page-number-citation ref-id="chap3sect2"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3sect3">3.3.  Eventd</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3sect3"><fo:page-number-citation ref-id="chap3sect3"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3sect4">3.4.  actiond</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3sect4"><fo:page-number-citation ref-id="chap3sect4"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3sect5">3.5.  notifd</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3sect5"><fo:page-number-citation ref-id="chap3sect5"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3sect6">3.6.  Scheduler</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3sect6"><fo:page-number-citation ref-id="chap3sect6"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3sect7">3.7.  Service Monitor (pollers)</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3sect7"><fo:page-number-citation ref-id="chap3sect7"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3sect8">3.8.  RTC</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3sect8"><fo:page-number-citation ref-id="chap3sect8"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3sect9">3.9.  Outage Manager</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3sect9"><fo:page-number-citation ref-id="chap3sect9"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3sect10">3.10.  Data Collection</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3sect10"><fo:page-number-citation ref-id="chap3sect10"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3sect11">3.11.  Reporting</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3sect11"><fo:page-number-citation ref-id="chap3sect11"/></fo:basic-link></fo:inline></fo:block><fo:block id="toc.book.chap3sect11" margin-left="24pt"><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3sect11sub1">3.11.3.11.1.  Performance Reports</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3sect11sub1"><fo:page-number-citation ref-id="chap3sect11sub1"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3sect11sub2">3.11.3.11.2.  Availability Reports</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3sect11sub2"><fo:page-number-citation ref-id="chap3sect11sub2"/></fo:basic-link></fo:inline></fo:block></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap3sect12">3.12.  Web UI</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap3sect12"><fo:page-number-citation ref-id="chap3sect12"/></fo:basic-link></fo:inline></fo:block></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4">4.  Chapter 4</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4"><fo:page-number-citation ref-id="chap4"/></fo:basic-link></fo:inline></fo:block><fo:block id="toc.book.chap4" margin-left="24pt"><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect1">4.1.  Customizing SNMP Data Collection</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect1"><fo:page-number-citation ref-id="chap4sect1"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect2">4.2.  Adding Support for New Services</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect2"><fo:page-number-citation ref-id="chap4sect2"/></fo:basic-link></fo:inline></fo:block><fo:block id="toc.book.chap4sect2" margin-left="24pt"><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect2sub1">4.2.4.2.1.  Introduction</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect2sub1"><fo:page-number-citation ref-id="chap4sect2sub1"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect2sub2">4.2.4.2.2.  Creating a Capabilities Daemon (Capsd) Plugin</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect2sub2"><fo:page-number-citation ref-id="chap4sect2sub2"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect2sub3">4.2.4.2.3.  Creating a Poller Plugin</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect2sub3"><fo:page-number-citation ref-id="chap4sect2sub3"/></fo:basic-link></fo:inline></fo:block></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect3">4.3.  Web UI Design</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect3"><fo:page-number-citation ref-id="chap4sect3"/></fo:basic-link></fo:inline></fo:block><fo:block id="toc.book.chap4sect3" margin-left="24pt"><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect3sub1">4.3.4.3.1.  Concepts You Will Need:</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect3sub1"><fo:page-number-citation ref-id="chap4sect3sub1"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect3sub2">4.3.4.3.2.  Overall Architecture</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect3sub2"><fo:page-number-citation ref-id="chap4sect3sub2"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect3sub3">4.3.4.3.3.  Servlet Forwards and Includes versus HTTP Redirects </fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect3sub3"><fo:page-number-citation ref-id="chap4sect3sub3"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect3sub4">4.3.4.3.4.  Internal URLs versus External URLs</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect3sub4"><fo:page-number-citation ref-id="chap4sect3sub4"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect3sub5">4.3.4.3.5.  Security Roles and Protected URLs</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect3sub5"><fo:page-number-citation ref-id="chap4sect3sub5"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect3sub6">4.3.4.3.6.  Internal Structure of a JSP</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect3sub6"><fo:page-number-citation ref-id="chap4sect3sub6"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect3sub7">4.3.4.3.7.  Internal Structure of a Servlet</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect3sub7"><fo:page-number-citation ref-id="chap4sect3sub7"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect3sub8">4.3.4.3.8.  Log4J Logging</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect3sub8"><fo:page-number-citation ref-id="chap4sect3sub8"/></fo:basic-link></fo:inline></fo:block><fo:block text-align-last="justify" text-align="start" end-indent="24pt" last-line-end-indent="-24pt"><fo:inline keep-with-next.within-line="always"><fo:basic-link internal-destination="chap4sect3sub9">4.3.4.3.9.  Performance Reporting System</fo:basic-link></fo:inline><fo:inline keep-together.within-line="always"> <fo:leader leader-pattern="dots" leader-pattern-width="3pt" leader-alignment="reference-area" keep-with-next.within-line="always"/> <fo:basic-link internal-destination="chap4sect3sub9"><fo:page-number-citation ref-id="chap4sect3sub9"/></fo:basic-link></fo:inline></fo:block></fo:block></fo:block></fo:block></fo:flow></fo:page-sequence><fo:page-sequence xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions" hyphenate="false" master-reference="front" language="en" format="i" initial-page-number="auto" force-page-count="no-force" hyphenation-character="-" hyphenation-push-character-count="2" hyphenation-remain-character-count="2"><fo:static-content flow-name="xsl-region-before-first"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-odd"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block>Preface</fo:block></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-even"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block>Preface</fo:block></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-blank"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"/></fo:static-content><fo:static-content flow-name="xsl-footnote-separator"><fo:block><fo:leader color="black" leader-pattern="rule" leader-length="1in"/></fo:block></fo:static-content><fo:static-content flow-name="blank-body"><fo:block text-align="center"/></fo:static-content><fo:static-content flow-name="xsl-region-after-first"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-odd"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-even"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-blank"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"/></fo:static-content><fo:flow flow-name="xsl-region-body" start-indent="4pc" end-indent="0pt"><fo:block id="preface"><fo:block><fo:block><fo:block margin-left="0pc" font-size="24.8832pt" font-family="sans-serif,Symbol,ZapfDingbats" font-weight="bold"><fo:block keep-with-next.within-column="always" space-before.optimum="11pt" space-before.minimum="11pt * 0.8" space-before.maximum="11pt * 1.2" hyphenate="false" text-align="left" start-indent="0pc" hyphenation-character="-" hyphenation-push-character-count="2" hyphenation-remain-character-count="2">Preface</fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		OpenNMS is the creation of numerous people and organizations,
		operating under the umbrella of the OpenNMS project. The original code
		base was developed and published under the GPL by the Oculan Corporation
		until 2002, when the project administration was passed on to Tarus
		Balog.
	</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		The current corporate sponsor of OpenNMS is
		<fo:basic-link external-destination="http://www.opennms.com/" text-decoration="underline" color="blue">The OpenNMS Group</fo:basic-link>,
		which also owns the OpenNMS trademark.
	</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		OpenNMS is a derivative work, containing both original code,
		included code and modified code that was published under the GNU General
		Public License. Please see the source for detailed copyright notices,
		but some notable copyright owners are listed below:
	</fo:block><fo:list-block space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em" provisional-label-separation="0.2em" provisional-distance-between-starts="1.0em" id="d0e50"><fo:list-item space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em" id="d0e51"><fo:list-item-label end-indent="label-end()"><fo:block>•</fo:block></fo:list-item-label><fo:list-item-body start-indent="body-start()"><fo:block><fo:block>
				Copyright <fo:inline font-family="serif">©</fo:inline> 2002-2009
				<fo:basic-link external-destination="http://www.opennms.com" text-decoration="underline" color="blue">The OpenNMS Group, Inc.</fo:basic-link>
			</fo:block></fo:block></fo:list-item-body></fo:list-item><fo:list-item space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em" id="d0e60"><fo:list-item-label end-indent="label-end()"><fo:block>•</fo:block></fo:list-item-label><fo:list-item-body start-indent="body-start()"><fo:block><fo:block>
				Original code base for OpenNMS version 1.0.0
				Copyright <fo:inline font-family="serif">©</fo:inline> 1999-2001
				<fo:basic-link external-destination="http://www.oculan.com" text-decoration="underline" color="blue">Oculan Corporation</fo:basic-link>.
			</fo:block></fo:block></fo:list-item-body></fo:list-item><fo:list-item space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em" id="d0e69"><fo:list-item-label end-indent="label-end()"><fo:block>•</fo:block></fo:list-item-label><fo:list-item-body start-indent="body-start()"><fo:block><fo:block>
				Mapping code Copyright <fo:inline font-family="serif">©</fo:inline> 2003
				<fo:basic-link external-destination="http://www.nksi.com" text-decoration="underline" color="blue">Networked Knowledge Systems, Inc.</fo:basic-link>
			</fo:block></fo:block></fo:list-item-body></fo:list-item><fo:list-item space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em" id="d0e78"><fo:list-item-label end-indent="label-end()"><fo:block>•</fo:block></fo:list-item-label><fo:list-item-body start-indent="body-start()"><fo:block><fo:block>
				ScriptD code Copyright <fo:inline font-family="serif">©</fo:inline> 2003
				<fo:basic-link external-destination="http://www.tavve.com" text-decoration="underline" color="blue">Tavve Software Company</fo:basic-link>.
			</fo:block></fo:block></fo:list-item-body></fo:list-item></fo:list-block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		Please send any omissions or corrections to this document
		to <fo:basic-link external-destination="mailto:tarus@opennms.org" text-decoration="underline" color="blue">Tarus Balog</fo:basic-link>.
	</fo:block></fo:flow></fo:page-sequence><fo:page-sequence xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions" hyphenate="false" master-reference="body" language="en" format="1" initial-page-number="1" force-page-count="no-force" hyphenation-character="-" hyphenation-push-character-count="2" hyphenation-remain-character-count="2"><fo:static-content flow-name="xsl-region-before-first"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-odd"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block>Chapter 1</fo:block></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-even"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block>Chapter 1</fo:block></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-blank"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"/></fo:static-content><fo:static-content flow-name="xsl-footnote-separator"><fo:block><fo:leader color="black" leader-pattern="rule" leader-length="1in"/></fo:block></fo:static-content><fo:static-content flow-name="blank-body"><fo:block text-align="center"/></fo:static-content><fo:static-content flow-name="xsl-region-after-first"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-odd"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-even"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-blank"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"/></fo:static-content><fo:flow flow-name="xsl-region-body" start-indent="4pc" end-indent="0pt"><fo:block id="chap1"><fo:block font-family="sans-serif,Symbol,ZapfDingbats"><fo:block margin-left="0pc"><fo:block text-align="left" font-weight="bold" font-size="19.8pt"><fo:block keep-with-next.within-column="always" space-before.optimum="11pt" space-before.minimum="11pt * 0.8" space-before.maximum="11pt * 1.2" hyphenate="false" text-align="left" start-indent="0pc" hyphenation-character="-" hyphenation-push-character-count="2" hyphenation-remain-character-count="2">Chapter 1. Chapter 1</fo:block></fo:block><fo:block text-align="left" font-weight="bold" font-size="14.4pt" space-before="0.5em" font-style="italic">Introduction to OpenNMS</fo:block></fo:block></fo:block></fo:block><fo:block id="chap1sect1"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">What is OpenNMS?</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">1.1. What is OpenNMS?</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap1sect2"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Why OpenNMS?</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">1.2. Why OpenNMS?</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap1sect3"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Features</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">1.3. Features</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap1sect4"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Why Develop for OpenNMS?</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">1.4. Why Develop for OpenNMS?</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block></fo:flow></fo:page-sequence><fo:page-sequence xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions" hyphenate="false" master-reference="body" language="en" format="1" initial-page-number="auto" force-page-count="no-force" hyphenation-character="-" hyphenation-push-character-count="2" hyphenation-remain-character-count="2"><fo:static-content flow-name="xsl-region-before-first"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-odd"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block>Chapter 2</fo:block></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-even"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block>Chapter 2</fo:block></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-blank"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"/></fo:static-content><fo:static-content flow-name="xsl-footnote-separator"><fo:block><fo:leader color="black" leader-pattern="rule" leader-length="1in"/></fo:block></fo:static-content><fo:static-content flow-name="blank-body"><fo:block text-align="center"/></fo:static-content><fo:static-content flow-name="xsl-region-after-first"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-odd"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-even"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-blank"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"/></fo:static-content><fo:flow flow-name="xsl-region-body" start-indent="4pc" end-indent="0pt"><fo:block id="chap2"><fo:block font-family="sans-serif,Symbol,ZapfDingbats"><fo:block margin-left="0pc"><fo:block text-align="left" font-weight="bold" font-size="19.8pt"><fo:block keep-with-next.within-column="always" space-before.optimum="11pt" space-before.minimum="11pt * 0.8" space-before.maximum="11pt * 1.2" hyphenate="false" text-align="left" start-indent="0pc" hyphenation-character="-" hyphenation-push-character-count="2" hyphenation-remain-character-count="2">Chapter 2. Chapter 2</fo:block></fo:block><fo:block text-align="left" font-weight="bold" font-size="14.4pt" space-before="0.5em" font-style="italic">Technologies</fo:block></fo:block></fo:block></fo:block><fo:block id="chap2sect1"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Java 2</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">2.1. Java 2</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap2sect2"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">XML/XSL</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">2.2. XML/XSL</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap2sect3"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Servlets</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">2.3. Servlets</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap2sect4"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">JSPs</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">2.4. JSPs</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap2sect5"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">RDBMS</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">2.5. RDBMS</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap2sect6"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">JMS</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">2.6. JMS</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap2sect7"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Castor</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">2.7. Castor</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap2sect8"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">JoeSNMP</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">2.8. JoeSNMP</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap2sect9"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">RRDTool</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">2.9. RRDTool</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block></fo:flow></fo:page-sequence><fo:page-sequence xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions" hyphenate="false" master-reference="body" language="en" format="1" initial-page-number="auto" force-page-count="no-force" hyphenation-character="-" hyphenation-push-character-count="2" hyphenation-remain-character-count="2"><fo:static-content flow-name="xsl-region-before-first"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-odd"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block>Chapter 3</fo:block></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-even"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block>Chapter 3</fo:block></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-blank"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"/></fo:static-content><fo:static-content flow-name="xsl-footnote-separator"><fo:block><fo:leader color="black" leader-pattern="rule" leader-length="1in"/></fo:block></fo:static-content><fo:static-content flow-name="blank-body"><fo:block text-align="center"/></fo:static-content><fo:static-content flow-name="xsl-region-after-first"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-odd"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-even"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-blank"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"/></fo:static-content><fo:flow flow-name="xsl-region-body" start-indent="4pc" end-indent="0pt"><fo:block id="chap3"><fo:block font-family="sans-serif,Symbol,ZapfDingbats"><fo:block margin-left="0pc"><fo:block text-align="left" font-weight="bold" font-size="19.8pt"><fo:block keep-with-next.within-column="always" space-before.optimum="11pt" space-before.minimum="11pt * 0.8" space-before.maximum="11pt * 1.2" hyphenate="false" text-align="left" start-indent="0pc" hyphenation-character="-" hyphenation-push-character-count="2" hyphenation-remain-character-count="2">Chapter 3. Chapter 3</fo:block></fo:block><fo:block text-align="left" font-weight="bold" font-size="14.4pt" space-before="0.5em" font-style="italic">Functional Product Description</fo:block></fo:block></fo:block></fo:block><fo:block id="chap3sect1"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Discovery</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">3.1. Discovery</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap3sect2"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">CAPSD</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">3.2. CAPSD</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap3sect3"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Eventd</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">3.3. Eventd</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap3sect4"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">actiond</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">3.4. actiond</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap3sect5"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">notifd</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">3.5. notifd</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap3sect6"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Scheduler</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">3.6. Scheduler</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap3sect7"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Service Monitor (pollers)</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">3.7. Service Monitor (pollers)</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap3sect8"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">RTC</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">3.8. RTC</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap3sect9"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Outage Manager</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">3.9. Outage Manager</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap3sect10"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Data Collection</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">3.10. Data Collection</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap3sect11"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Reporting</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">3.11. Reporting</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block><fo:block id="chap3sect11sub1"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Performance Reports</fo:marker><fo:block font-size="13.75pt" space-before.optimum="0.6em" space-before.minimum="0.6em" space-before.maximum="0.6em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">3.11.3.11.1. Performance Reports</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
			&lt;insert text&gt;
			</fo:block></fo:block><fo:block id="chap3sect11sub2"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Availability Reports</fo:marker><fo:block font-size="13.75pt" space-before.optimum="0.6em" space-before.minimum="0.6em" space-before.maximum="0.6em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">3.11.3.11.2. Availability Reports</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
			&lt;insert text&gt;
			</fo:block></fo:block></fo:block><fo:block id="chap3sect12"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Web UI</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">3.12. Web UI</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block></fo:flow></fo:page-sequence><fo:page-sequence xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions" hyphenate="false" master-reference="body" language="en" format="1" initial-page-number="auto" force-page-count="no-force" hyphenation-character="-" hyphenation-push-character-count="2" hyphenation-remain-character-count="2"><fo:static-content flow-name="xsl-region-before-first"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-odd"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block>Chapter 4</fo:block></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-even"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"><fo:table table-layout="fixed" width="100%" border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell><fo:table-cell text-align="center" display-align="before" relative-align="baseline"><fo:block><fo:block>Chapter 4</fo:block></fo:block></fo:table-cell><fo:table-cell text-align="right" display-align="before" relative-align="baseline"><fo:block><fo:block/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-before-blank"><fo:block font-family="serif" margin-left="-5em" margin-right="-5em"/></fo:static-content><fo:static-content flow-name="xsl-footnote-separator"><fo:block><fo:leader color="black" leader-pattern="rule" leader-length="1in"/></fo:block></fo:static-content><fo:static-content flow-name="blank-body"><fo:block text-align="center"/></fo:static-content><fo:static-content flow-name="xsl-region-after-first"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-odd"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-even"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"><fo:table table-layout="fixed" width="100%" border-top-width="0.5pt" border-top-style="solid" border-top-color="black"><fo:table-column column-number="1" column-width="proportional-column-width(1)"/><fo:table-column column-number="2" column-width="proportional-column-width(1)"/><fo:table-column column-number="3" column-width="proportional-column-width(1)"/><fo:table-body><fo:table-row block-progression-dimension.minimum="14pt"><fo:table-cell text-align="left" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="center" display-align="after" relative-align="baseline"><fo:block/></fo:table-cell><fo:table-cell text-align="right" display-align="after" relative-align="baseline"><fo:block><fo:page-number/></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:block></fo:static-content><fo:static-content flow-name="xsl-region-after-blank"><fo:block font-family="serif,Symbol,ZapfDingbats" margin-left="0pc"/></fo:static-content><fo:flow flow-name="xsl-region-body" start-indent="4pc" end-indent="0pt"><fo:block id="chap4"><fo:block font-family="sans-serif,Symbol,ZapfDingbats"><fo:block margin-left="0pc"><fo:block text-align="left" font-weight="bold" font-size="19.8pt"><fo:block keep-with-next.within-column="always" space-before.optimum="11pt" space-before.minimum="11pt * 0.8" space-before.maximum="11pt * 1.2" hyphenate="false" text-align="left" start-indent="0pc" hyphenation-character="-" hyphenation-push-character-count="2" hyphenation-remain-character-count="2">Chapter 4. Chapter 4</fo:block></fo:block><fo:block text-align="left" font-weight="bold" font-size="14.4pt" space-before="0.5em" font-style="italic">Extending OpenNMS</fo:block></fo:block></fo:block></fo:block><fo:block id="chap4sect1"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Customizing SNMP Data Collection</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.1. Customizing SNMP Data Collection</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
		&lt;insert text&gt;
		</fo:block></fo:block><fo:block id="chap4sect2"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Adding Support for New Services</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.2. Adding Support for New Services</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block id="chap4sect2sub1"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Introduction</fo:marker><fo:block font-size="13.75pt" space-before.optimum="0.6em" space-before.minimum="0.6em" space-before.maximum="0.6em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.2.4.2.1. Introduction</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The capabilities daemon (capsd) is responsible for scanning network 
				interfaces found by the discovery daemon for the services/protocols 
				they support and updating the database accordingly.  Capsd will also
				periodically rescan managed interfaces to determine if a managed 
				interface has had any additional services enabled since the last 
				capability check.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The poller daemon is responsible for checking the status of each 
				service on each managed interface at a regularly configured interval.
				If the status of the service has changed since the last poll an 
				appropriate event is generated indicating the new status of the
				service on that interface.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				OpenNMS provides a straight forward framework for extending the default
				set of services and protocols it can detecte and monitor.  In order
				to extend OpenNMS to manage a custom service or protocol the following 
				is required:
			<fo:block space-before.minimum="1em" space-before.optimum="1em" space-before.maximum="1em" space-after.minimum="0.8em" space-after.optimum="1em" space-after.maximum="1.2em" hyphenate="false" wrap-option="no-wrap" white-space-collapse="false" white-space-treatment="preserve" linefeed-treatment="preserve" text-align="start" border-color="#444444" border-style="solid" border-width="0.1pt" padding-top="0.5em" padding-left="0.5em" padding-right="0.5em" padding-bottom="0.5em" margin-left="0.5em" margin-right="0.5em" font-family="monospace" font-size="4.8pt" background-color="#F0F0F0" id="d0e264">
	* Code a Capsd plugin capable of testing whether or 
	  not a network interface supports the desired protocol or service.
	* Add a &lt;protocol plugin&gt; element defining the new service to the
	  $BB_HOME/etc/capsd-configuration.xml config file.
	* Code a Poller plugin capable of monitoring the current status
	  of the desired protocol or service on a specified network interface.
	* Add &lt;service&gt; and &lt;monitor&gt; elements defining the new service 
	  to be polled to the $BB_HOME/etc/poller-configuration.xml config 
	  file.
	
	  - $BB_HOME refers to the OpenNMS install directory.
			</fo:block>
			</fo:block></fo:block><fo:block id="chap4sect2sub2"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Creating a Capabilities Daemon (Capsd) Plugin</fo:marker><fo:block font-size="13.75pt" space-before.optimum="0.6em" space-before.minimum="0.6em" space-before.maximum="0.6em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.2.4.2.2. Creating a Capabilities Daemon (Capsd) Plugin</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				<fo:inline font-style="italic">Writing the Plugin</fo:inline>
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Capsd uses plugins to perform capability checks on a device.  A plugin is 
				simply a Java class which implements the org.opennms.netmgt.capsd.Plugin
				interface.  The following methods are defined in the interface and must be 
				implemented:
				<fo:block space-before.minimum="1em" space-before.optimum="1em" space-before.maximum="1em" space-after.minimum="0.8em" space-after.optimum="1em" space-after.maximum="1.2em" hyphenate="false" wrap-option="no-wrap" white-space-collapse="false" white-space-treatment="preserve" linefeed-treatment="preserve" text-align="start" border-color="#444444" border-style="solid" border-width="0.1pt" padding-top="0.5em" padding-left="0.5em" padding-right="0.5em" padding-bottom="0.5em" margin-left="0.5em" margin-right="0.5em" font-family="monospace" font-size="4.8pt" background-color="#F0F0F0" id="d0e277">
	public String getProtocolName()
	
		Simply returns the name of the service or protocol tested for by the 
		plugin.  In the case of the FTP plugin the string "FTP" is returned.
	
	public boolean isProtocolSupported(java.nnet.InetAddress address)
	
		Returns true if the device identified by the InetAddress parameter
		supports the protocol being tested.
	
	public boolean isProtocolSupported(java.net.InetAddress address, 
								java.util.Map properties)
	
		Returns true if the device identified by the InetAddress parameter 
		supports the protocol being tested.  A second parameter, properties,
		is of type java.util.Map and provides a mechanism for overriding 
		default configuration options such as timeouts, retries and port
		information.
				</fo:block>
				NOTE:  For an example plugin take a look at the FTP plugin in
				src/services/org/opennms/netmgt/capsd/FtpPlugin.java.  
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				At runtime the capabilities daemon calls the isProtocolSupported() method 
				of each loaded plugin passing it the java.net.InetAddress object of each
				interface found by the discovery daemon.  Any services found to be supported on the
				interface will cause an entry to be added to the 'ifservices' table
				keyed by the interface's node identifier and IP address.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				<fo:inline font-style="italic">Plugin Integration</fo:inline>
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				During initialization, the capabilities daemon reads the capsd-configuration.xml
				config file and inserts any new services into the 'services' table in the
				database.  Further, during initialization, the capabilitiees daemon uses the plugin class 
				name information defined in capsd-configuration.xml to load each of the 
				plugins.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				To add a new service edit capsd-configuration.xml and add a	new 
				&lt;protocol plugin&gt; element.  Within the &lt;protocol plugin&gt; element is
				defined the service name, plugin class name, and any plugin specific 
				properties.  
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Consider the following capsd-configuration.xml entry for the FTP service:
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				<fo:block space-before.minimum="1em" space-before.optimum="1em" space-before.maximum="1em" space-after.minimum="0.8em" space-after.optimum="1em" space-after.maximum="1.2em" hyphenate="false" wrap-option="no-wrap" white-space-collapse="false" white-space-treatment="preserve" linefeed-treatment="preserve" text-align="start" border-color="#444444" border-style="solid" border-width="0.1pt" padding-top="0.5em" padding-left="0.5em" padding-right="0.5em" padding-bottom="0.5em" margin-left="0.5em" margin-right="0.5em" font-family="monospace" font-size="4.8pt" background-color="#F0F0F0" id="d0e295">
	&lt;protocol-plugin protocol="FTP"  class-name="org.opennms.netmgt.capsd.FtpPlugin" scan="on"&gt;
		&lt;property key="userid" value="ftp"/&gt;
		&lt;property key="password" value="anonymous@"/&gt;
	&lt;/protocol-plugin&gt;
				</fo:block>
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The "userid,ftp" and "password,anonymous@" name-value pairs are passed
				to the plugin via the java.util.Map parameter of the isProtocolSupported()
				method described earlier.
			</fo:block></fo:block><fo:block id="chap4sect2sub3"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Creating a Poller Plugin</fo:marker><fo:block font-size="13.75pt" space-before.optimum="0.6em" space-before.minimum="0.6em" space-before.maximum="0.6em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.2.4.2.3. Creating a Poller Plugin</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				<fo:inline font-style="italic">Writing the Poller Plugin</fo:inline>
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The poller daemon uses poller plugins for polling managed interfaces for
				the current status of the services supported by the interface.  A poller 
				plugin is a	Java class which implements the org.opennms.netmgt.poller.monitors.ServiceMonitor 
				interface.  The interface defines the following methods which must be 
				implemented in the plugin:
				<fo:block space-before.minimum="1em" space-before.optimum="1em" space-before.maximum="1em" space-after.minimum="0.8em" space-after.optimum="1em" space-after.maximum="1.2em" hyphenate="false" wrap-option="no-wrap" white-space-collapse="false" white-space-treatment="preserve" linefeed-treatment="preserve" text-align="start" border-color="#444444" border-style="solid" border-width="0.1pt" padding-top="0.5em" padding-left="0.5em" padding-right="0.5em" padding-bottom="0.5em" margin-left="0.5em" margin-right="0.5em" font-family="monospace" font-size="4.8pt" background-color="#F0F0F0" id="d0e310">
	public void initialize(java.util.Map parameters);
	
		Called by the poller daemon following instantiation of the
		plugin during startup.  If during initialization the plugin detects
		a critical error (such as a missing library) it can throw a
		java.lang.RuntimException.  If the plugin throws an exception during
		initialization the poller daemon will disable the plugin.   
		
	public void release();
	
		Called by the poller daemon during shutdown.  This provides a 
		mechanism for the plugin to release any acquired resources. 
	
	public void initialize(org.opennms.netmgt.poller.monitors.NetworkInterface iface);
	
		Called by the poller daemon whenever the poller learns of a new
		interface which supports the service polled by the plugin.  
		If desired, configuration information can be associated with the 
		interface at this time prior the poller actually scheduling 
		the interface.  If the plugin throws an exception during interface
		initialization the poller daemon will log an error and discard
		the interface.  
		
	public void release(java.net.NetworkInterface iface);
	
		Called by the poller daemon whenever an interface is being removed 
		from the scheduler. For example, if a service is determined as being
		no longer supported by an interface then this method will be invoked
		to cleanup any information associated with that interface. This 
		gives the implementor of the interface the ability to serialize any 
		data prior to the interface being discarded.  If an exception is 
		thrown during the release the exception will be logged, but the 
		interface will still be discarded for garbage collection.
	
	public int poll(java.net.NetworkInterface iface, 
					org.opennms.netmgt.utils.EventProxy eproxy, 
					java.util.Map parameters);
	
		Called by the poller daemon each time an interface requires a check 
		to be performed as defined by the poller scheduler.  The poll()
		method is passed the interface to check, a reference to an
				</fo:block>
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				<fo:block space-before.minimum="1em" space-before.optimum="1em" space-before.maximum="1em" space-after.minimum="0.8em" space-after.optimum="1em" space-after.maximum="1.2em" hyphenate="false" wrap-option="no-wrap" white-space-collapse="false" white-space-treatment="preserve" linefeed-treatment="preserve" text-align="start" border-color="#444444" border-style="solid" border-width="0.1pt" padding-top="0.5em" padding-left="0.5em" padding-right="0.5em" padding-bottom="0.5em" margin-left="0.5em" margin-right="0.5em" font-family="monospace" font-size="4.8pt" background-color="#F0F0F0" id="d0e315">
		required by the plugin aside from the standard available/unavailable
		generated by the poller daemon.  Additionally, a java.util.Map 
		is passed which may be used to access any service specific 
		configuration values as defined in the poller-configuration.xml
		config file.
				</fo:block>
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				<fo:inline font-style="italic">Poller Plugin Integration</fo:inline>
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				During initialization, the poller daemon reads the poller-configuration.xml
				config file and uses the plugin class name information defined in &lt;monitor&gt;
				element blocks to load each of the plugins.  The parameters associated with
				each service as defined in &lt;service&gt; elements within the configuration file
				are also read and used by the poller to determine how often a particular
				service is to be polled for the services which fall within the enclosing
				package.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				To add a new service edit poller-configuration.xml and add a new 
				&lt;service&gt; element to the desired package.  Within the &lt;service&gt; element 
				define the service name, how often it should be scheduled (interval), and 
				a list of any parameters needed by the plugin defined within &lt;parameter&gt; 
				elements. The configured parameters will be passed to the plugin via the 
				java.util.Map object parameter of the poll() method.  Typically such
				things as the port on which to test the service as well as timeout and
				retry information is defined here.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Consider the following poller-configuration.xml &lt;service&gt; entry for the 
				FTP service:
				<fo:block space-before.minimum="1em" space-before.optimum="1em" space-before.maximum="1em" space-after.minimum="0.8em" space-after.optimum="1em" space-after.maximum="1.2em" hyphenate="false" wrap-option="no-wrap" white-space-collapse="false" white-space-treatment="preserve" linefeed-treatment="preserve" text-align="start" border-color="#444444" border-style="solid" border-width="0.1pt" padding-top="0.5em" padding-left="0.5em" padding-right="0.5em" padding-bottom="0.5em" margin-left="0.5em" margin-right="0.5em" font-family="monospace" font-size="4.8pt" background-color="#F0F0F0" id="d0e329">
	&lt;service name="FTP" interval="300000"&gt;
		&lt;parameter key="timeout" value="3000"/&gt;
		&lt;parameter key="port" value="21"/&gt;
		&lt;parameter key="userid" value="ftp"/&gt;
		&lt;parameter key="password" value="anonymous@"/&gt;
	&lt;/service&gt;
				</fo:block>
				Next the class name of the poller plugin must be defined.  This is done by
				adding a new &lt;monitor&gt; element to the poller-configuration.xml file.  Within
				this element the name of the service and the class name of the poller plugin
				are specified.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Consider the following poller-configuration.xml &lt;monitor&gt; entry for the
				FTP service:	
				<fo:block space-before.minimum="1em" space-before.optimum="1em" space-before.maximum="1em" space-after.minimum="0.8em" space-after.optimum="1em" space-after.maximum="1.2em" hyphenate="false" wrap-option="no-wrap" white-space-collapse="false" white-space-treatment="preserve" linefeed-treatment="preserve" text-align="start" border-color="#444444" border-style="solid" border-width="0.1pt" padding-top="0.5em" padding-left="0.5em" padding-right="0.5em" padding-bottom="0.5em" margin-left="0.5em" margin-right="0.5em" font-family="monospace" font-size="4.8pt" background-color="#F0F0F0" id="d0e334">
	&lt;monitor service="FTP"  	class-name="org.opennms.netmgt.poller.monitors.FtpMonitor"/&gt;
				</fo:block>
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				<fo:inline font-style="italic">Configuration File Factories</fo:inline>
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Accessing the OpenNMS Database
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				OpenNMS database configuration information is specified in the
				$BB_HOME/etc/opennms-database.xml file.  Defined within this 
				configuration file are the OpenNMS database name, userid,
				and password.  If database access is a requirement for a poller the 
				class org.opennms.netmgt.config.DatabaseConnectionFactory
				may be used to get a database connection.  
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The DatabaseConnectionFactory class is a singleton class used to 
				load the database configuration information.  The class provides a
				convenience method for retrieving a connection to the database.
				The following code snippet illustrates how to use the
				DatabaseConnectionFactory class to load the database config and 
				retrieve a connection.			
				<fo:block space-before.minimum="1em" space-before.optimum="1em" space-before.maximum="1em" space-after.minimum="0.8em" space-after.optimum="1em" space-after.maximum="1.2em" hyphenate="false" wrap-option="no-wrap" white-space-collapse="false" white-space-treatment="preserve" linefeed-treatment="preserve" text-align="start" border-color="#444444" border-style="solid" border-width="0.1pt" padding-top="0.5em" padding-left="0.5em" padding-right="0.5em" padding-bottom="0.5em" margin-left="0.5em" margin-right="0.5em" font-family="monospace" font-size="4.8pt" background-color="#F0F0F0" id="d0e348">
		/********* Begin *********/
		...
		import java.sql.*;
		import org.opennms.netmgt.config.DatabaseConfigFactory;
		...
		public void initialize(NetworkInterface iface)
		{
			// Get connection to the database so we can
			// retrieve information pertaining to the 
			// passed interface
			//
			try
			{
				DatabaseConnectionFactory.init();
			}
			catch (Exception e)
			{
				// Log error
				...
				// Throw exception
				throw new RuntimeException("Database connection factory
						initialization failed, reason: " + e.getLocalizedMessage());
			}
			
			try
			{
				java.sql.Connection dbConn = DatabaseConnectionFactory.getInstance().getConnection();
			}
			catch (SQLException sqlE)
			{
				// Log error
				...
				// Throw exception
				throw new RuntimeException("Unable to get connection to the	database, 
						reason: " + sqlE.getLocalizedMessage());
			}
			
			// Do stuff with the database connection
			...
			
			// Close the connection
			try
			{
				dbConn.close();
			}
			catch (SQLException sqlE)
			{
				// Log the error
				...
			}
			...
		}
		/******** End **********/			
				</fo:block>
				NOTE:  For additional example code which uses the DatabaseConnectionFactory 
				take a look at the SNMP poller plugin:  
				src/services/org/opennms/netmgt/poller/SnmpMonitor.java
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Accessing SNMP Configuration Information
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				SNMP configuration information is specified in the 
				$BB_HOME/etc/snmp-config.xml file.  Defined within this 
				configuration file are read/write community strings, retries,
				timeout, and SNMP version information specific to the OpenNMS 
				installation.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				If an SNMP-based poller is being written the class 
				org.opennms.netmgt.config.SnmpPeerFactory may be used retrieve a
				JoeSNMP org.opennms.protocols.snmp.SnmpPeer object for a particular
				interface's IP address based on the content of the snmp-config.xml
				file.  If a specific entry in snmp-config.xml cannot be found a 
				default SnmpPeer object will be returned.  An SnmpPeer object
				encapsulates the SNMP configuration information associated with
				a particular IP address and is used to construct an SNMP session
				(org.opennms.protocols.snmp.SnmpSession) with the remote node.
				Refer to the JoeSNMP documentation for further information on 
				SNMP peer objects and sessions.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The SnmpPeerFactory class is a singleton class used to 
				load the SNMP configuration information.  The class provides a
				convenience method for retrieving an SnmpPeer object for a 
				provided network address.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The following code snippet illustrates how to use the
				SnmpPeerFactory class to load the SNMP config and 
				retrieve an SnmpPeer object for a specified network address.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				<fo:block space-before.minimum="1em" space-before.optimum="1em" space-before.maximum="1em" space-after.minimum="0.8em" space-after.optimum="1em" space-after.maximum="1.2em" hyphenate="false" wrap-option="no-wrap" white-space-collapse="false" white-space-treatment="preserve" linefeed-treatment="preserve" text-align="start" border-color="#444444" border-style="solid" border-width="0.1pt" padding-top="0.5em" padding-left="0.5em" padding-right="0.5em" padding-bottom="0.5em" margin-left="0.5em" margin-right="0.5em" font-family="monospace" font-size="4.8pt" background-color="#F0F0F0" id="d0e363">
		/********* Begin *********/
		...
		import org.opennms.protocols.snmp.SnmpPeer;
		import org.opennms.protocols.snmp.SnmpSession;
		import org.opennms.netmgt.config.SnmpPeerFactory;
		...
		public void initialize(NetworkInterface iface)
		{
			// Initialize the SNMP peer factory and use it
			// to construct an SNMP peer object for the
			// passed interface.
			//
			try
			{
				SnmpPeerFactory.init();
			}
			catch (Exception e)
			{
				// Log error
				...
				// Throw exception
				throw new RuntimeException("SNMP peer factory
						initialization failed, reason: " + e.getLocalizedMessage());
			}
			
			SnmpPeer peer = SnmpPeerFactory.getInstance().getPeer((InetAddress)iface.getAddress());
			
			// Use SnmpPeer object to initialize a JoeSNMP SNMP session
			//
			try
			{
				SnmpSession session = new SnmpSession(peer);
			}
			catch (SocketException sE)
			{
				// Error Handling
				...
			}
			...
			// Use SNMP session to query the remote node's MIB 
			//
			...
			
			// Close the session
			try
			{
				session.close();
			}
			catch (Exception E)
			{
				// Log the error
				...
			}
			...
		}
		/******** End **********/
				</fo:block>
				NOTE:  For additional example code which uses the SnmpPeerFactory 
				take a look at the SNMP poller plugin:  
				src/services/org/opennms/netmgt/poller/SnmpMonitor.java			
			</fo:block></fo:block></fo:block><fo:block id="chap4sect3"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Web UI Design</fo:marker><fo:block font-size="16.5pt" space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.3. Web UI Design</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block id="chap4sect3sub1"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Concepts You Will Need:</fo:marker><fo:block font-size="13.75pt" space-before.optimum="0.6em" space-before.minimum="0.6em" space-before.maximum="0.6em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.3.4.3.1. Concepts You Will Need:</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				To get the most from this document and the WebUI code, you will need to be 
				familiar with the following subjects:
				Java, Servlet, and JSP programming
				HTML and XML
				Servlet 2.3 and JSP 1.2 specifications
				Tomcat 4.0 setup and configuration
				HTTP methods, error codes, and headers
			</fo:block></fo:block><fo:block id="chap4sect3sub2"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Overall Architecture</fo:marker><fo:block font-size="13.75pt" space-before.optimum="0.6em" space-before.minimum="0.6em" space-before.maximum="0.6em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.3.4.3.2. Overall Architecture</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The basic idea behind our architecture is to separate the logic from the 
				presentation as much as possible.  This facilitates rapid feature addition, 
				rapid feature redesign, and long-term maintenance.  
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				To meet this goal, we use three distinct tools, each described in more detail
				below: 
				<fo:list-block space-before.optimum="0.8em" space-before.minimum="0.8em" space-before.maximum="0.8em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em" provisional-label-separation="0.2em" provisional-distance-between-starts="1.0em" id="d0e381"><fo:list-item space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em" id="d0e382"><fo:list-item-label end-indent="label-end()"><fo:block>•</fo:block></fo:list-item-label><fo:list-item-body start-indent="body-start()"><fo:block><fo:block><fo:inline font-weight="bold" keep-with-next.within-line="always" padding-end="1em">models. </fo:inline>
								non-visual objects for non-visual work like reading
								and writing to the database
							</fo:block></fo:block></fo:list-item-body></fo:list-item><fo:list-item space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em" id="d0e388"><fo:list-item-label end-indent="label-end()"><fo:block>•</fo:block></fo:list-item-label><fo:list-item-body start-indent="body-start()"><fo:block><fo:block><fo:inline font-weight="bold" keep-with-next.within-line="always" padding-end="1em">JSPs. </fo:inline>
								generate HTML or XML to display to the user based on 
								information retrieved by the models
							</fo:block></fo:block></fo:list-item-body></fo:list-item><fo:list-item space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em" id="d0e394"><fo:list-item-label end-indent="label-end()"><fo:block>•</fo:block></fo:list-item-label><fo:list-item-body start-indent="body-start()"><fo:block><fo:block><fo:inline font-weight="bold" keep-with-next.within-line="always" padding-end="1em">servlets. </fo:inline>
								use the models to make changes to the system and then
								use the JSPs to display results to the user
							</fo:block></fo:block></fo:list-item-body></fo:list-item></fo:list-block>
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				All logic for database activity and performance data querying are encapsulated 
				in non-visual models.  Models allow reuse of the same code across several 
				different user interface components. There are many good examples of this 
				throughout the WebUI code.  A few are the PerformanceModel, the 
				RealTimeDataModel, and the OutageModel.  Each of these models are used by three 
				or more servlets or JSPs.  Models are not allowed to generate visual content; 
				they are for non-visual work only.    
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				To create HTML or XML to display to the user, we use JSPs.  They make simple 
				calls to the models (and thus the database) to retrieve data to plug into their 
				HTML or XML to display to the user.  No HTML or XML is generated outside of 
				a JSP, and a JSP is not allowed to make changes to the database or other data.
				They are for display only.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				To allow the user to make changes to data or other features, we write servlets
				that respond to an HTTP POST.  The servlet code first takes the necessary action
				(in most cases changing the database or sending an event) and then redirects 
				the request (with the results of the action) to a JSP for HTML generation and 
				display.  
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				An exception to the rule above is if a URL must return an output type other 
				than HTML or XML (like an image or PDF), then we implement the URL as a servlet.  
				In this context, the servlet acts like a JSP in the fact that it is purely used
				for creation of content for display.  
			</fo:block></fo:block><fo:block id="chap4sect3sub3"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Servlet Forwards and Includes versus HTTP Redirects </fo:marker><fo:block font-size="13.75pt" space-before.optimum="0.6em" space-before.minimum="0.6em" space-before.maximum="0.6em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.3.4.3.3. Servlet Forwards and Includes versus HTTP Redirects </fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Forwards and includes are servlet/JSP mechanisms that allow Tomcat (or any 
				servlet container) to ferry requests around different servlets and JSPs to 
				generate the correct content before returning it to the user.  Forwards and
				includes can be nested as deep as necessary, and they do not leave the web 
				server until the content is fully generated.  We often use forwards in servlets 
				that handle only GET requests, and we often use includes in JSPs to standardize
				the content.  For example, the header.jsp and footer.jsp are included in each
				JSP.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				HTTP Redirects are actually a two-request process.  The web browser makes the 
				first request which is almost always a POST to a servlet.  Then the servlet does 
				something (like writes to a database or sends an event) and then sends a 
				redirect response (HTTP response code 301 or 307) back to the web browser with 
				a new URL.  The second request is then made by the web browser to the URL in 
				the redirect response.  This second request is usually a GET request to a JSP.
				The first request does the work, and the second request displays the results. 
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Redirects are useful after using a POST, because if the user uses the back 
				button or the refresh button, they will not get a cryptic error from the web 
				browser because it does not want to (or cannot) resend the POST.  This creates 
				a much more seamless user experience, and is easier to code.  The logic is in
				the servlet -- pure Java code, and the output is in the JSP -- almost pure HTML.
			</fo:block></fo:block><fo:block id="chap4sect3sub4"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Internal URLs versus External URLs</fo:marker><fo:block font-size="13.75pt" space-before.optimum="0.6em" space-before.minimum="0.6em" space-before.maximum="0.6em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.3.4.3.4. Internal URLs versus External URLs</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Internal URLs are used in forwards and includes by Tomcat.  They are relative 
				to the webapp context URL.  In our case, they are relative to the /opennms URL.  
				These URLs contain leading slashes.  If they do not, they are considered to be a 
				sibling of the current URL and will not work.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				External URLs are used as links to other pages by the web browser.  They are 
				made relative to our URL base (see the org.opennms.web.Util.calculateBaseUrl 
				method).  These URLs do not use leading slashes.  If they do, they are 
				considered relative to the root URL and will not work.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				You must follow the convention of setting up the HTML BASE tag in the HTML 
				header on every page or the external URLs will not work.  This at the very least
				will cause problems with loading images from included JSPs, and your page's 
				header will display incorrectly.  At worst, however, many or all of your HTML 
				links will not work either.
			</fo:block></fo:block><fo:block id="chap4sect3sub5"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Security Roles and Protected URLs</fo:marker><fo:block font-size="13.75pt" space-before.optimum="0.6em" space-before.minimum="0.6em" space-before.maximum="0.6em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.3.4.3.5. Security Roles and Protected URLs</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				In the OpenNMS system, we use the BASIC HTTP authentication mechanism, and 
				there are two major security roles.  The default security role is the 
				"OpenNMS User" role, and all users belong to that role.  All URLs of the
				OpenNMS WebUI are protected at least by this default role.  
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Other security roles are configured in the WEB-INF/web.xml file and the 
				/opt/OpenNMS/etc/magic-users.properties file.  The web.xml file defines which 
				URLs are protected by a role, and the magic-user.properties file defines 
				which users are authorized in each role.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Another important user role is the "OpenNMS Administrator" role.  All URLs under
				/opennms/admin/* are protected by this role.  Currently only the special "admin"
				user is allowed access to this role. 
			</fo:block></fo:block><fo:block id="chap4sect3sub6"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Internal Structure of a JSP</fo:marker><fo:block font-size="13.75pt" space-before.optimum="0.6em" space-before.minimum="0.6em" space-before.maximum="0.6em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.3.4.3.6. Internal Structure of a JSP</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				A good example to look at is the web/web/element/node.jsp.  One of the 
				major goals in our JSP writing is to keep the Java code as far away as possible 
				from the HTML content, and the format of our JSPs reflect this.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The JSP @page directive is first.  Followed by the declaration for any class 
				variables and the init method (if required). This declaration section usually 
				defines and initializes the JSP's model which handles all non-visual code.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The scriptlet for the data-gathering code is next.  This section is where all 
				of your Java code that is not directly related to displaying HTML should go.  
				It usually consists of a short check of the request parameters and then calling 
				a model method or two.  Remember, keeping your Java code in one area keeps the 
				code portable in case you need to move it into a non-visual object or servlet.  
				It also helps you fight the temptation to add logic throughout the body of your
				JSP.  We try to keep our JSPs short and dumb.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Next is the HTML header.  This section defines the page's title, base URL,
				and includes our global stylesheet.  Please take notice of the HTML BASE tag, 
				the org.opennms.web.Util.calculateBaseURL method, and the 
				web/web/includes/styles.css stylesheet.  
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				After the header is the body tag and then an include of our header JSP.  This 
				JSP include tag gives the header.jsp enough information to display itself 
				properly, including the page's title, breadcrumbs to give the user an idea 
				of where they are in the page hierarchy, and links to get back to earlier 
				pages.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The body of our JSPs is a table that gives it a little indention on either 
				side.  Notice the empty columns with only non-breaking spaces (&amp;nbsp;).  When 
				we completely move over to Cascading Style Sheets in a future release, we will 
				use CSS to create indention.  
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				In the body, use the data you collected in the main scriptlet to display here.  
				Try to keep the Java code in this section to only JSP expressions, if 
				conditionals, and for loops. 
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				After the body is the footer include, which mirrors much of the header include, 
				but without the breadcrumb information.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Then at the bottom, below the HTML, if you need any convenience methods for 
				display purposes (creating HTML or URLs, but not reading the database or any 
				other sort of non-visual logic), then put a JSP declaration section that creates 
				these convenience methods. 
			</fo:block></fo:block><fo:block id="chap4sect3sub7"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Internal Structure of a Servlet</fo:marker><fo:block font-size="13.75pt" space-before.optimum="0.6em" space-before.minimum="0.6em" space-before.maximum="0.6em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.3.4.3.7. Internal Structure of a Servlet</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				A good example servlet is the org.opennms.web.nodelabel.NodeLabelChangeServlet.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Our servlet structure is actually very similar to Java portions of our JSPs.  
				The servlet has a model class variable that is initialized in the init method.  
				Then the doGet or doPost method checks the request parameters, does a database 
				lookup or makes a database change through a model call, but then it breaks from 
				the JSP structure by calling either a forward or a redirect instead of creating
				its own results content. 
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				If the servlet is handling POST methods, it will use a redirect.  If the servlet
				is using a GET method, it will use a forward.
			</fo:block></fo:block><fo:block id="chap4sect3sub8"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Log4J Logging</fo:marker><fo:block font-size="13.75pt" space-before.optimum="0.6em" space-before.minimum="0.6em" space-before.maximum="0.6em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.3.4.3.8. Log4J Logging</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				In the WebUI, we use a dual servlet-logging and Log4J-logging system.  Actually,
				we are in the process of moving to a Log4J-based logging scheme, but it is 
				likely that there will always be some amount of logs going through the servlet 
				logging API into Log4J.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Logging to Log4J through the servlet API is acheived by the use of a  
				Tomcat-specific logger class that wrappers a Log4J category.  Using the servlet 
				API instead of Log4J may be more intuitive to servlet/JSP programmers who are 
				not familiar with Log4J, but using Log4J gives us many more features.  Log4J
				gives us control over what level of logging is used; whether a given log message
				is a debug message, an informative message, a warning, or an error message; 
				how often the log files should roll; and how large the log files should grow.  
				Log4J can also send logs to other destinations other than text files.  It can 
				also add various timestamps and log adornments through configuration files 
				without changing code.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				Currently the web logs end up in one of two log files, but the file count will
				probably increase as we adopt Log4J throughout more of the WebUI and create 
				finer-grained Web log categories.  Almost all WebUI logs today end up in the 
				web.log file in the OpenNMS log directory (historically one of /var/log/opennms 
				or /opt/OpenNMS/log).  The only exceptions are authentication logs messages 
				which end up in the webauth.log file. 
			</fo:block></fo:block><fo:block id="chap4sect3sub9"><fo:block><fo:block><fo:block keep-together.within-column="always" margin-left="0pc" font-family="sans-serif,Symbol,ZapfDingbats"><fo:block keep-with-next.within-column="always"><fo:block font-family="sans-serif" font-weight="bold" keep-with-next.within-column="always" space-before.minimum="0.8em" space-before.optimum="1.0em" space-before.maximum="1.2em" text-align="left" start-indent="0pc"><fo:marker marker-class-name="section.head.marker">Performance Reporting System</fo:marker><fo:block font-size="13.75pt" space-before.optimum="0.6em" space-before.minimum="0.6em" space-before.maximum="0.6em" space-after.optimum="0.1em" space-after.minimum="0.1em" space-after.maximum="0.1em">4.3.4.3.9. Performance Reporting System</fo:block></fo:block></fo:block></fo:block></fo:block></fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The SNMP polling system gathers information and stores it in round-robin 
				databases (RRD files) which are named in a convention that uniquely identifies 
				the interface from which the data was collected.  The WebUI then queries the 
				RRD file directory to see which interfaces have data collected, and then 
				presents that list to the user.  The user selects an interface from the list, 
				and the corresponding RRD is queried to find out what information was collected.
				Different types of network devices yield different types of performance data,
				so our reporting system is designed to be flexible.  From the list of data 
				collected, a list of prefabricated reports is created and presented to the user.  
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The user then, having selected an RRD, a prefabricated report, and a date range,
				requests the report.  The WebUI sends the report parameters to the 
				RRDGraphServlet which executes a command-line program called rrdtool 
				(see http://www.rrdtool.org). The rrdtool reads the RRD information and creates 
				a graph in a PNG image.  That image is sent back to the user to view. 
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The prefabricated reports are actually just command-line options to give to 
				the rrdtool to create a graph.  They are read from the rrdtool-graph.properties 
				file in the /opt/OpenNMS/etc directory.
			</fo:block><fo:block space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em">
				The user is also able to create a "custom" or "ad hoc" performance report by
				picking and choosing the data sources inside the RRD to query.  The user works
				through a wizard that allows him to choose and name each data source, give the
				graph a name, and even choose in which colors each data source should graph.
				This uses some templates from the rrdtool-graph.properties file, but all the 
				values are filled in the template from the users choices.  Then the same 
				RRDGraphServlet serves up the resulting PNG graph image.
			</fo:block></fo:block></fo:block></fo:flow></fo:page-sequence></fo:root>