{scrollbar} |
The basic information of the server can be captured and stored in a database that is supported by Geronimo. The Geronimo management node takes advantage of MBeans to collect the server's statistics for a given time, also called snapshots. These snapshots are all JSR-77 compatible. In this way the administrator can monitor the server status.
By default, the datasources are used to connect an Apache Derby database (the reason for this is because the default DB that Geronimo uses is also Derby). However, since the datasources are all packaged into separate plugins, anyone is able to write their own datasource deployment descriptor, package it into a plugin, and use it instead of the one provided by default. |
In order to use your own database for the Monitoring Plugin you must ensure the following:
Here is the original deployment descriptor for the datasources used for the Monitoring Plugin in <geronimo_home>\repository\org\apache\geronimo\plugins\monitoring\agent-ds\<version>\agent-ds-<version>.car\META-INF
.
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-${geronimoSchemaVersion}"> <environment> <moduleId> <groupId>${pom.groupId}</groupId> <artifactId>${pom.artifactId}</artifactId> <version>${version}</version> <type>car</type> </moduleId> <dependencies> <dependency> <groupId>org.apache.geronimo.configs</groupId> <artifactId>system-database</artifactId> <type>car</type> </dependency> <!-- SQL files --> <dependency> <groupId>org.apache.geronimo.plugins.monitoring</groupId> <artifactId>agent-sql</artifactId> <version>${monitoringConsoleVersion}</version> <type>jar</type> </dependency> </dependencies> </environment> <resourceadapter> <outbound-resourceadapter> <!-- Pool for Active Statistics --> <connection-definition> <connectionfactory-interface>javax.sql.DataSource</connectionfactory-interface> <connectiondefinition-instance> <name>jdbc/ActiveDS</name> <config-property-setting name="CreateDatabase">true</config-property-setting> <config-property-setting name="Password">monitor</config-property-setting> <config-property-setting name="UserName">monitor</config-property-setting> <config-property-setting name="DatabaseName">ActiveMRCDB</config-property-setting> <connectionmanager> <local-transaction/> <single-pool> <max-size>10</max-size> <min-size>0</min-size> <match-one/> </single-pool> </connectionmanager> </connectiondefinition-instance> </connection-definition> <!-- Pool for Archived Statistics --> <connection-definition> <connectionfactory-interface>javax.sql.DataSource</connectionfactory-interface> <connectiondefinition-instance> <name>jdbc/ArchiveDS</name> <config-property-setting name="CreateDatabase">true</config-property-setting> <config-property-setting name="Password">monitor</config-property-setting> <config-property-setting name="UserName">monitor</config-property-setting> <config-property-setting name="DatabaseName">ArchiveMRCDB</config-property-setting> <connectionmanager> <local-transaction/> <single-pool> <max-size>10</max-size> <min-size>0</min-size> <match-one/> </single-pool> </connectionmanager> </connectiondefinition-instance> </connection-definition> </outbound-resourceadapter> </resourceadapter> <!-- These two GBeans will create the tables for the database automatically --> <gbean name="ActiveDSGBean" class="org.apache.geronimo.connector.DatabaseInitializationGBean"> <attribute name="testSQL">SELECT t.tablename FROM SYS.SYSTABLES t WHERE lower(t.tablename)='statistics'</attribute> <attribute name="path">META-INF/database/derby/createTables.sql</attribute> <reference name="DataSource"> <name>jdbc/ActiveDS</name> </reference> </gbean> <gbean name="ArchiveDSGBean" class="org.apache.geronimo.connector.DatabaseInitializationGBean"> <attribute name="testSQL">SELECT t.tablename FROM SYS.SYSTABLES t WHERE lower(t.tablename)='statistics'</attribute> <attribute name="path">META-INF/database/derby/createTables.sql</attribute> <reference name="DataSource"> <name>jdbc/ArchiveDS</name> </reference> </gbean> <!--this ought to be in the agent plan but this realm is not always started before the credential-store, even with the dependency--> <gbean name="monitoring-runas-realm" class="org.apache.geronimo.security.realm.GenericSecurityRealm"> <attribute name="realmName">monitoring-runas-realm</attribute> <attribute name="global">false</attribute> <xml-reference name="LoginModuleConfiguration"> <lc:login-config xmlns:lc="http://geronimo.apache.org/xml/ns/loginconfig-1.2"> <lc:login-module control-flag="REQUIRED"> <lc:login-domain-name>monitoring-runas-domain</lc:login-domain-name> <lc:login-module-class>org.apache.geronimo.security.credentialstore.RunAsLoginModule</lc:login-module-class> <lc:option name="principalClass">org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal</lc:option> <lc:option name="principalNames">admin</lc:option> </lc:login-module> </lc:login-config> </xml-reference> <!--<reference name="ServerInfo">--> <!--<name>ServerInfo</name>--> <!--</reference>--> </gbean> </connector> |
META-INF/database/derby
is the path of createTables.sql
packaged in tha JAR file <geronimo_home>\repository\org\apache\geronimo\plugins\monitoring\agent-sql\<version>\agent-sql-<version>.jar
, which is a dependency of the datasource.
The two gbeans at the end of the deployment descriptor is pointing to an SQL file createTables.sql
in order to create the necessary tables under the condition that they do not exist. The elements of these two tables are described as the following:
----------------------------------------------------------------------------- -- MBEANS ----------------------------------------------------------------------------- CREATE TABLE MBeans( id INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), mbeanName VARCHAR(256) NOT NULL, statsNameList VARCHAR(512) NOT NULL, PRIMARY KEY(id) ); ----------------------------------------------------------------------------- -- STATISTICS ----------------------------------------------------------------------------- CREATE TABLE Statistics ( id INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), mbeanId INT NOT NULL, snapshot_time BIGINT NOT NULL, statsValueList VARCHAR(512) NOT NULL, PRIMARY KEY(id), FOREIGN KEY (mbeanId) REFERENCES MBeans(id) ); |
In this example, we will replace the default Apache Derby plugin datasource in Geronimo 2.2 with a DB2 Express-C one.
Before we get started to replace the monitoring plugin datasource, we should install DB2 Express-C database and its driver JAR packages on Geronimo, and then configure a DB2 Express-C datasource for Geronimo to connect to that database.
Now that we have a DB2 monitoring plugin datasource, we have to create deployment descriptors for the datasource.
db2-agent-ds.xml
based on the default plan.xml
.
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2"> <dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2"> <dep:moduleId> <dep:groupId>org.apache.geronimo.plugins.monitoring</dep:groupId> <dep:artifactId>db2-agent-ds</dep:artifactId> <dep:version>2.2</dep:version> <dep:type>car</dep:type> </dep:moduleId> <dep:dependencies> <dep:dependency> <dep:groupId>org.apache.geronimo.plugins.monitoring</dep:groupId> <dep:artifactId>agent-sql</dep:artifactId> <dep:version>2.2</dep:version> <dep:type>jar</dep:type> </dep:dependency> <dep:dependency> <dep:groupId>com.ibm.db2</dep:groupId> <dep:artifactId>db2jcc</dep:artifactId> <dep:version>9.5.0</dep:version> <dep:type>jar</dep:type> </dep:dependency> <dep:dependency> <dep:groupId>com.ibm.db2</dep:groupId> <dep:artifactId>db2jcc_license_cu</dep:artifactId> <dep:version>9.5.0</dep:version> <dep:type>jar</dep:type> </dep:dependency> </dep:dependencies> <dep:hidden-classes/> <dep:non-overridable-classes/> <dep:private-classes/> </dep:environment> <resourceadapter> <outbound-resourceadapter> <!--Pool for Active Statistics--> <connection-definition> <connectionfactory-interface>javax.sql.DataSource</connectionfactory-interface> <connectiondefinition-instance> <name>jdbc/ActiveDS</name> <config-property-setting name="UserName">db2admin</config-property-setting> <config-property-setting name="Password">db2manager</config-property-setting> <config-property-setting name="PortNumber">50000</config-property-setting> <config-property-setting name="ServerName">localhost</config-property-setting> <config-property-setting name="DatabaseName">activedb</config-property-setting> <config-property-setting name="DriverType">4</config-property-setting> <connectionmanager> <xa-transaction> <transaction-caching/> </xa-transaction> <single-pool> <max-size>10</max-size> <min-size>0</min-size> <match-one/> </single-pool> </connectionmanager> </connectiondefinition-instance> </connection-definition> <!--Pool for Archived Statistics--> <connection-definition> <connectionfactory-interface>javax.sql.DataSource</connectionfactory-interface> <connectiondefinition-instance> <name>jdbc/ArchiveDS</name> <config-property-setting name="UserName">db2admin</config-property-setting> <config-property-setting name="Password">db2manager</config-property-setting> <config-property-setting name="PortNumber">50000</config-property-setting> <config-property-setting name="ServerName">localhost</config-property-setting> <config-property-setting name="DatabaseName">archdb</config-property-setting> <config-property-setting name="DriverType">4</config-property-setting> <connectionmanager> <xa-transaction> <transaction-caching/> </xa-transaction> <single-pool> <max-size>10</max-size> <min-size>0</min-size> <match-one/> </single-pool> </connectionmanager> </connectiondefinition-instance> </connection-definition> </outbound-resourceadapter> </resourceadapter> <!--These two GBeans will create the tables for the database automatically--> <gbean name="ActiveDSGBean" class="org.apache.geronimo.connector.DatabaseInitializationGBean"> <attribute name="testSQL">SELECT t.tablename FROM SYS.SYSTABLES t WHERE lower(t.tablename)='statistics'</attribute> <attribute name="path">META-INF/database/derby/createTables.sql</attribute> <reference name="DataSource"> <name>jdbc/ActiveDS</name> </reference> </gbean> <gbean name="ArchiveDSGBean" class="org.apache.geronimo.connector.DatabaseInitializationGBean"> <attribute name="testSQL">SELECT t.tablename FROM SYS.SYSTABLES t WHERE lower(t.tablename)='statistics'</attribute> <attribute name="path">META-INF/database/derby/createTables.sql</attribute> <reference name="DataSource"> <name>jdbc/ArchiveDS</name> </reference> </gbean> <!--this ought to be in the agent plan but this realm is not always started before the credential-store, even with the dependency--> <gbean name="monitoring-runas-realm" class="org.apache.geronimo.security.realm.GenericSecurityRealm"> <attribute name="realmName">monitoring-runas-realm</attribute> <attribute name="global">false</attribute> <xml-reference name="LoginModuleConfiguration"> <lc:login-config xmlns:lc="http://geronimo.apache.org/xml/ns/loginconfig-1.2"> <lc:login-module control-flag="REQUIRED"> <lc:login-domain-name>monitoring-runas-domain</lc:login-domain-name> <lc:login-module-class>org.apache.geronimo.security.credentialstore.RunAsLoginModule</lc:login-module-class> <lc:option name="principalClass">org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal</lc:option> <lc:option name="principalNames">admin</lc:option> </lc:login-module> </lc:login-config> </xml-reference> <!--<reference name="ServerInfo">--> <!--<name>ServerInfo</name>--> <!--</reference>--> </gbean> </connector> |
db2-agent-ds.xml
:
activedb
, and the DatabaseName for jdbc/ArchiveDS is archdb
.db2-mconsole-ds.xml
. DatabaseName in this file is mcdb
.var\config\config.xml
for Geronimo to prevent the following modules from being launched at startup time. This can be done by adding a Load="false"
to each module. This will prevent the configuration changes below from causing conflicts.
deploy.bat deploy ..\repository\org\tranql\tranql-connector-db2-xa\1.3\tranql-connector-db2-xa-1.3.rar <plan_path>:\db2-agent-ds.xml deploy.bat deploy ..\repository\org\tranql\tranql-connector-db2-xa\1.3\tranql-connector-db2-xa-1.3.rar <plan_path>:\db2-mconsole-ds.xml |
var\config\artifact_aliases.properties
file to replace default modules. In this way Geronimo will load DB2 datasources at startup time instead of the default ones.
org.apache.geronimo.plugins.monitoring/agent-ds/2.2/car=org.apache.geronimo.plugins.monitoring/db2-agent-ds/2.2/car org.apache.geronimo.plugins.monitoring/mconsole-ds/2.2/car=org.apache.geronimo.plugins.monitoring/db2-mconsole-ds/2.2/car |
var\config\config.xml
, load org.apache.geronimo.plugins.monitoring/agent/2.2/car
and org.apache.geronimo.plugins.monitoring/mconsole-tomcat/2.2/car
at startup time. This can be done by removing the Load="false"
for each module.