.. _tutorials-how-to-apply-kieker-in-java-ee-environments:
How to apply Kieker in Java EE Environments
===========================================
Depending on the configuration of the JavaEE application to be
monitored, different instrumentation technologies (e.g., Spring AOP and
SOAP/CXF interceptors) can and should be used. In this page, we show how
to use AspectJ to monitor method calls in different JavaEE environments.
Jetty
-----
Copy ``task ':aspectJJar' property 'archiveFileName'`` into a directory, where it can be accessed
by Jetty, e.g. ``jetty/kieker/``.
Jetty is usually shipped with a configuration file start.ini in which
start parameters are defined. Add the following snippet to this file:
.. code::
--exec
-javaagent:kieker/task ':aspectJJar' property 'archiveFileName'
-Dkieker.monitoring.skipDefaultAOPConfiguration=true
-Daj.weaving.verbose=true
To use a custom Kieker configuration at the given location, the
following parameter can be added:
``-Dkieker.monitoring.configuration=kieker/kieker.monitoring.properties``
**Important:** Due to a bug in the parser of Jetty, a line ending with
.properties is misinterpreted and leads to an exception. We recommend to
rename the extension of Kieker's configuration file.
To use a custom AspectJ configuration at the given location, the
following parameter can be added:
``-Dorg.aspectj.weaver.loadtime.configuration=file://c:/jetty/kieker/aop.xml``
**Important:** There seems to be problems with relative paths for
AspectJ in JavaEE environments. We recommend to use URIs instead.
*Tested with JPetStore 6 and Jetty 9.2.2.*
JBoss
-----
- Needs documentation but ` NovaTec's blog
post `__
may serve as a starting point
Tomcat
======
Copy ``kieker-1.10_aspectj.jar`` into a directory, where it can be accessed
by Tomcat, e.g. ``tomcat/kieker/``.
Tomcat is usually shipped with start scripts ``bin/catalina.(sh|.bat)``. Add
one of the following snippets to the correct file, depending on your
operation system:
.. code::
set JAVA_OPTS=%JAVA_OPTS%
-javaagent:%CATALINA_BASE%\kieker\kieker-1.10_aspectj.jar
-Dkieker.monitoring.skipDefaultAOPConfiguration=true
-Daj.weaving.verbose=true
-Dkieker.monitoring.configuration=%CATALINA_BASE%/kieker/kieker.monitoring.properties
-Dorg.aspectj.weaver.loadtime.configuration=...
set JAVA_OPTS=${JAVA_OPTS}
-javaagent:${CATALINA_BASE}\kieker\kieker-1.10_aspectj.jar
-Dkieker.monitoring.skipDefaultAOPConfiguration=true
-Daj.weaving.verbose=true
-Dkieker.monitoring.configuration=${CATALINA_BASE}/kieker/kieker.monitoring.properties
-Dorg.aspectj.weaver.loadtime.configuration=...
...
- Needs documentation but
`ticket/566 `__
may serve as a starting point
Glassfish
=========
On Glassfish 4, this can be achieved with adding properties to the
domain.xml. The default domain in glassfish is normally called domain0.
Let further assume that glassfish was installed in /opt/glassfish-4.0
then the domain.xml file will be located in
/opt/glassfish-4.0/glassfish/domains/domain0/config. In that file search
for jvm-options. You will find multiple such entries between
.. code::
...
After the last entry in that XML environment, add the following lines
and adapt the paths to your situation.
.. code::
-javaagent:${com.sun.aas.installRoot}/lib/task ':aspectJJar' property 'archiveFileName'
-Dkieker.monitoring.skipDefaultAOPConfiguration=true
-Daj.weaving.verbose=true
-Dkieker.monitoring.configuration=${com.sun.aas.installRoot}/kieker/kieker.monitoring.properties
-Dorg.aspectj.weaver.loadtime.configuration=${com.sun.aas.installRoot}/kieker
WebSphere
=========
- Needs documentation
JBoss (Wildfly)
===============
An alternative approach to run Kieker within a JBoss environment is
described
`here `__.
Requires:
- Kieker-1.13 or above (1.12 and below cause an error in JBoss
environments)
- Kieker packed as Wildfly module
- AspectJ Weaver packed as Wildfly module
Kopiere beide Module einfach in das folgende Wildfly-Verzeichnis:
``modules/system/layers/base``
Kopiere die Dateien ``kieker.properties`` und ``aop.xml`` in das
(neue) Verzeichnis "kieker" auf oberster Ebene von Wildfly. Passe nun
den Ausgabepfad von Kieker an und schränke das Instrumentieren auf den
gewünschten Paketnamen ein.
[in der Datei standalone.xml]
- Unter dem folgenden, vorhandenen Subsystem müssen die beiden, neuen
Module als globale Module registriert werden:
.. code::
[in der Datei standalone.conf]
- Dort, wo die Systempakete deklariert werden, müssen die folgenden
ergänzt werden: org.jboss.logmanager, com.manageengine, org.aspectj,
kieker. Du musst im Folgenden nur darauf achten, dass ich
Windows-Syntax für die Skriptbefehle genutzt habe.
.. code::
set "JAVA_OPTS=%JAVA_OPTS% -Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager,com.manageengine,org.aspectj,kieker"
set "WILDFLY=I:\Software-Engineering\wildfly-10.1.0.Final"
- Weiterhin muss der Aspectjweaver als Javaagent eingetragen werden und
für Wildfly entsprechende notwendige Ergänzungen vorgenommen werden,
die das Verwenden von AspectJ überhaupt erst ermöglichen:
.. code::
set "JAVA_OPTS=%JAVA_OPTS% -javaagent:%WILDFLY%/modules/system/layers/base/org/aspectj/main/aspectjweaver.jar"
set "JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
set "JAVA_OPTS=%JAVA_OPTS% -Xbootclasspath/p:%WILDFLY%/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.0.4.Final.jar;%WILDFLY%\modules\system\layers\base\kieker\main\task ':mainJar' property 'archiveFileName';%WILDFLY%\modules\system\layers\base\org\aspectj\main\aspectjweaver.jar"
- Anschließend werden Einstellungen für das Monitoring durch Kieker
vorgenommen:
.. code::
set "JAVA_OPTS=%JAVA_OPTS% -Dkieker.monitoring.configuration=%WILDFLY%/kieker/kieker.monitoring.1.13.properties"
set "JAVA_OPTS=%JAVA_OPTS% -Dkieker.monitoring.skipDefaultAOPConfiguration=true"
set "JAVA_OPTS=%JAVA_OPTS% -Daj.weaving.verbose=true"
set "JAVA_OPTS=%JAVA_OPTS% -Dorg.aspectj.weaver.loadtime.configuration=file:%WILDFLY%/kieker/aop.xml"
Wenn du nun Wildfly startest, sollten keine Fehler erscheinen. Da das
Instrumentieren erst beim Laden der entsprechenden Klassen erfolgt,
siehst du an dieser Stelle nur Konsolenausgaben von AspectJ. Erst wenn
du das Szenario ausführst, wird Kieker gestartet und der Log-Ordner
angelegt und mit Daten gefüllt.