Introduction
SelfDiagnose is a library of diagnotistic tasks that can
verify the availability of external resources required for
the execution of a J2EE web application.
How does it help?
When applications are deployed on a development, test or
production environment, you need to perform integration
tests to verify that all systems are working together and
provide the application functionality.
Although your application is properly
JUnit
tested, the
validity highly depends on its environment. For instance,
the Web container should accept incoming requests, database
connections can be established, log files are writeable, etc.
Depending on your level of automation in deployment,
problems in the configuration of your environment will
prevent the application from working as expected. And even
if your environment is setup correctly, will it be available
24x7? SelfDiagnose can help detect such problems during
both deployment and in production. Reports can provide
information about possible causes of application problems
that are related to the availability of external resources.
How does it work?
SelfDiagnose provides a collection of diagnostic tasks that
check some external or internal aspect required by the
application.
For instance, the task
CheckURLReachable
verifies that a connection to a server can be opened. The
task
CheckJNDIBinding
verifies that a resource can be found in a naming server.
CheckDatabaseTableExists
simply does what it says.
Using a simple XML configuration, you specifiy which tasks
should run. Running the tasks is requested through a servlet
that responds with a report.
Let's
Get Started
Task Selection Guide
Find the task to check the availability or configuration of your resource.
To use a task, enter the declaration in the
selfdiagnose.xml
after you completed the
Installation
.
File System
CheckDirectoryAccessible
|
<checkdirectoryaccessible name="/home/user" read="true" write="false" />
|
Verifies access properties of a directory in a File System.
|
CheckFileContainsString
|
<checkfilecontainsstring name="environment.properties" string="smtp.xs4all.nl" />
|
Scans a file for at least one occurrence of a String.
The file must be character-based and is found as a resource (on the classpath) or a simple file/url.
|
CheckPropertyValuesAreJavaTypes
|
<checkpropertyvaluesarejavatypes name="some.properties" filter=".*[.]class" />
|
Verifies that each Java type name is loadable. The pattern parameter is used to filter only those keys for which the value represent a Java type.
|
CheckResourceAccessible
|
<checkresourceaccessible name="application.properties" />
|
Verifies the availability of a resource by name on the classpath.
|
Database
CheckJNDIBinding
|
<checkjndibinding name="jdbc/mydb" />
|
Checks whether the naming server has a JNDI binding for a given name.
|
CheckDataSourceConnectable
|
< checkdatasourceconnectable name="jdbc/demo" />
|
Verifies the availability and ability to create a connection to a DataSource.
|
CheckDatabaseTableExists
|
< checkdatabasetableexists name="BUZ.CUSTOMERS" datasource="BusinessDs" />
|
Verifies whether a database schema has a definition for a table.
This task requires a datasource. It uses the basic COUNT(*) query to detect table presence.
If found then the number of records is reported.
|
Message Queue
CheckJNDIBinding
|
< checkjndibinding name="jms/Orders" />
|
Check whether the naming server has a JNDI binding for a given name.
Optional parameters are "class" , the JNDI server "url" and "factory".
If you add a variable declaration then you can use CheckBeanProperty to access
the properties of the Queue object.
See also
CheckWebSphereJMSListenerPort
|
Network
CheckHttpRequestHeader
|
< checkhttprequestheader header="Content-Type" protocol="http" pattern="text*" />
|
Reads a header field from the current Http Servlet Request and matches it against a pattern if specified.
|
CheckURLReachable
|
< checkurlreachable url="http://www.philemonworks.com" />
|
Verifies that an URL is reachable by connecting to it and inspecting the (http) response code.
|
CheckValidURL
|
< checkvalidurl url="http://www.nu.nl" />
|
Verifies the syntax of a given URL.
|
CheckXMLContent
|
< checkxmlcontent url="${variable with URL value}" xpath="/root/child" pattern="childvalue" />
|
Verifies the presence of an element or attribute (by evaluating an XPath) and optionally test is against a given pattern.
|
Misceleanous
ReportMavenPOMProperties
|
< reportmavenpomproperties name="/META-INF/maven/package/app/pom.properties" />
|
Reports information written by a Maven build.
|
CheckClassLoadable
|
<checkclassloadable name="org.xml.sax.Attributes" />
|
Verifies that a given class is loadable.
|
CheckBeanProperty
|
<checkbeanproperty bean="${name of var}" property="attribute name" pattern="regular expression"/>
|
Checks a property and matches its (String) value to a regular expression pattern. This task can only be used together with another task that provides the bean by inserting a variable into the execution context
|
CheckSystemProperty
|
<checksystemproperty property="java.version" />
|
Checks a global Java System property.
|
CheckValueMatches
|
<checkvaluematches value="${country_names[0]}" pattern="NL" />
|
The value is specified by an expression that refers to objects available in the execution context.
The pattern attribute speficy the regular expression that is used to perform the match against the value.
If a variable is specified then store the element into the execution context using the variable name.
|
CheckResourceBundleKey
|
<checkresourcebundlekey name="some.properties" key="welcome" />
|
Verifies the existence of a given key for a given resource.
|
CheckResourceProperty
|
<checkresourceproperty name="some.properties" property="help.url" />
|
Verifies the availability of a property in a resource.
|
CheckMBeanProperty
|
<checkmbeanproperty query="MyApp:name=myBean" operation="getVersion" />
|
CheckMBeanProperty is a DiagnosticTask that checks a property and matches its (String) value to a regular expression pattern.
|
Reporting
ReportMavenPOMProperties
|
<reportmavenpomproperties
comment="Maven POM properties"
name="/META-INF/maven/com.yours.appp/myapp/pom.properties" />
|
ReportMavenPOMProperties is a task that reports the Maven build properties
which are included in the application if it is build using Maven.
|
ReportJVMRuntimeMemory
|
<reportjvmruntimememory comment="Java VM Memory" />
|
ReportJVMRuntimeMemory is a task that reports the current JVM memory consumption.
|
ReportProperties
|
<reportproperties value="${myProperties}" comment="my.properties"/>
|
ReportProperties can dump the key value pairs of a Properties object.
This object must be available in the execution context of the tasks.
Use a context variable to put a Properties in that context. Here by the name "myProperties".
|
ReportMap
|
<reportmap value="${myMap}" comment="my.map"/>
|
ReportMap can dump the key value pairs of a Map object.
This object must be available in the execution context of the tasks.
Use a context variable to put a Properties in that context. Here by the name "myMap".
|
ReportJamonMonitors
|
<reportjamonmonitors comment="my.map"/>
|
ReportJamonMonitors reports for each Monitor its main statistics values (hits,max,min,avg,last).
|
Third party (vendor)
CheckAtgComponentProperty
|
<checkatgcomponentproperty
component="/atg/dynamo/Configuration"
property="siteHttpServerName" />
|
Checks the availability of a component and its property. If a pattern is specified then perform the match and report the result.
|
CheckEndecaService
|
<checkendecaservice host="10.10.10.1" port="8000" query="N=0" />
|
Checks the availability of an Endeca service by running a query.
It reports the results of this query by count and execution time.
|
CheckWebSphereJMSListenerPort
|
<checkwebspherejmslistenerport name="sli_caseStatusService-ontvangenBLIBerichtLp" />
|
Verifies the operational status of a ListenerPort in WAS.
|
CheckSpringBeanProperty
|
<checkspringbeanproperty id="myBean" property="myFieldOrOperation" pattern="*.*"/>
|
Checks the value of a property from an object that is available in the Spring ApplicationContext.
|
CheckSpringDatasourceConnectable
|
<checkspringdatasourceconnectable name="myDatasource" />
|
Access a Datasource from the application context and uses that to check that a connection can be created (and closed)
|