Wiki Markup |
---|
{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.
Excerpt |
---|
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:
- Datasource for the Active Database must be named jdbc/ActiveDS
- Datasource for the Archive Database must be named jdbc/ArchiveDS
- Module ID must be org.apache.geronimo.plugins.monitoring/agent-ds//car because there is a dependency on this module ID in the plugin
The deployment descriptor for the original datasource
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
.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<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
- id (Primary Key): id of the MBean.
- mbeanName: name of the MBean.
- statsNameList: comma separated strings to represent an MBean's statistics name.
- Statistics
- id (Primary Key): id of the statistics.
- mbeanId (Foreign Key): id of MBean.
- snapshot_time: the duration of time in between snapshots.
- statsValueList: comma separated strings to represent an MBean's statistics value.
Code Block | ||
---|---|---|
| ||
----------------------------------------------------------------------------- -- 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) ); |
An Example
In this example, we will replace the default Apache Derby plugin datasource in Geronimo 2.2 with a DB2 Express-C one.
Prerequisites
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.
- Download and install DB2 Express-C. See DB2 Express-C for details about downloading and installing this database.
- Install the driver JAR packages on Geronimo. See Adding DB2 drivers to the repository for detailed steps.
- Deploy a datasource for DB2 Express-C. See Creating a database connection pool using the wizard from the Geronimo Administration Console for detailed information.
Replacing the default monitoring plugin datasouce
Now that we have a DB2 monitoring plugin datasource, we have to create deployment descriptors for the datasource.
- Create the deployment plan
db2-agent-ds.xml
based on the defaultplan.xml
.
You have to make the following changes toCode Block xml title db2-agent-ds.xml 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
:- Update <dependencies> section with drivers required by DB2 Express-C.
- Change the username and password for the datasource, and add ServerName and portnumber settings.
- The DatabaseName for jdbc/ActiveDS is
activedb
, and the DatabaseName for jdbc/ArchiveDS isarchdb
.
- Similarly, create
db2-mconsole-ds.xml
. DatabaseName in this file ismcdb
. - Create the corresponding databases in DB2 Express-C: activedb, archdb and mcdb.
- Change
var\config\config.xml
for Geronimo to prevent the following modules from being launched at startup time. This can be done by adding aLoad="false"
to each module. This will prevent the configuration changes below from causing conflicts.- org.apache.geronimo.plugins.monitoring/agent-ds/2.2/car
- org.apache.geronimo.plugins.monitoring/agent/2.2/car
- org.apache.geronimo.plugins.monitoring/mconsole-ds/2.2/car
- org.apache.geronimo.plugins.monitoring/mconsole-tomcat/2.2/car
- Start the server and deploy the plans using the deploy command.
where <plan_path> is the directory where your plans are placed.No Format 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
- Shutdown the server and change
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.No Format 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
- In
var\config\config.xml
, loadorg.apache.geronimo.plugins.monitoring/agent/2.2/car
andorg.apache.geronimo.plugins.monitoring/mconsole-tomcat/2.2/car
at startup time. This can be done by removing theLoad="false"
for each module.