ABRT team: Java exceptions from container

As you know from a previous blog post, lately we have been dealing with
catching unhandled exceptions from inside of containers.

In this blog post, we would like to introduce a new language we are
capable of doing that for. The language is JAVA.

We’ve taken ABRT’s tool abrt-java-connector which catches java’s exceptions
and we’ve added a new option cel there. The cel option turns on writing
exceptions to container-exception-logger. For more information about
abrt-java-connector options see abrt-java-connector readme.
Also, a new package abrt-java-connector-container was released. It contains
a minimal set of files needed for container exception logging.

How to make it work in a container

If you use executables which load /usr/share/java-utils/java-functions file
(for instance will_java_throw shipped by package will-crash), you only need
to have package abrt-java-connector-container installed. This is default in
Fedora.

Content of will_java_throw executable:

$ cat /usr/bin/will_java_throw
 #!/bin/sh
 MAIN_CLASS="WontCatchNullPointerException"
 export MAIN_CLASS
 . /usr/share/java-utils/java-functions
 set_classpath "willcrash/willuncaught.jar"
 run

In other cases you have to load shared native library (.so)
/usr/lib/abrt-java-connector/libabrt-java-connector.so into VM using either
-agentlib or -agentpath command line parameter. The first
parameter requires the library’s file name and works only if the library is
placed in one of the ld searched directories or a directory included in
LD_LIBRARY_PATH environment variable. The latter command line argument works
with an arbitrary, valid absolute path pointing to the library.

$ java -agentlib:abrt-java-connector=cel=on $MyClass -platform.jvmtiSupported true

For more information see abrt-java-connector readme.

Example (exception in container -> host’s systemd journal log)

Inside of container:
[root@049e3e4b7233 tmp]# will_java_throw
Can't open '/usr/share/abrt/conf.d/plugins/java.conf': No such file or directory
Can't open '/etc/abrt/plugins/java.conf': No such file or directory
Exception in thread "main" java.lang.NullPointerException
	at WontCatchNullPointerException.die_hard(WontCatchNullPointerException.java:30)
	at WontCatchNullPointerException.die_hard(WontCatchNullPointerException.java:33)
	at WontCatchNullPointerException.die_hard(WontCatchNullPointerException.java:33)
	at WontCatchNullPointerException.die_hard(WontCatchNullPointerException.java:33)
	at WontCatchNullPointerException.die(WontCatchNullPointerException.java:21)
	at WontCatchNullPointerException.main(WontCatchNullPointerException.java:38)
Host’s systemd journal:
# journalctl -f
May 22 14:40:19 localhost.localdomain dockerd-current[972]:
container-exception-logger - {"type": "Java", "executable":
"/usr/share/java/willcrash/willuncaught.jar", "reason": "Uncaught exception
java.lang.NullPointerException in method
WontCatchNullPointerException.die_hard()", "backtrace": "Exception in thread
"main" java.lang.NullPointerExceptionn        at
WontCatchNullPointerException.die_hard(WontCatchNullPointerException.java:30)
[jar:file:/usr/share/java/willcrash/willuncaught.jar!/WontCatchNullPointerException.class]n
at
WontCatchNullPointerException.die_hard(WontCatchNullPointerException.java:33)
[jar:file:/usr/share/java/willcrash/willuncaught.jar!/WontCatchNullPointerException.class]n
at
WontCatchNullPointerException.die_hard(WontCatchNullPointerException.java:33)
[jar:file:/usr/share/java/willcrash/willuncaught.jar!/WontCatchNullPointerException.class]n
at
WontCatchNullPointerException.die_hard(WontCatchNullPointerException.java:33)
[jar:file:/usr/share/java/willcrash/willuncaught.jar!/WontCatchNullPointerException.class]n
at WontCatchNullPointerException.die(WontCatchNullPointerException.java:21)
[jar:file:/usr/share/java/willcrash/willuncaught.jar!/WontCatchNullPointerException.class]n
at WontCatchNullPointerException.main(WontCatchNullPointerException.java:38)
[jar:file:/usr/share/java/willcrash/willuncaught.jar!/WontCatchNullPointerException.class]n",
"uid": "0", "abrt-java-connector": "1.1.1-3ec4e6c"}


Source From: fedoraplanet.org.
Original article title: ABRT team: Java exceptions from container.
This full article can be read at: ABRT team: Java exceptions from container.

Advertisement


Random Article You May Like

Leave a Reply

Your email address will not be published. Required fields are marked *

*
*