From be3d32fe7a2b59f682e27022931a27fa552d052d Mon Sep 17 00:00:00 2001
From: Jakub Filak <jfilak@redhat.com>
Date: Tue, 17 Jun 2014 14:51:08 +0200
Subject: [PATCH] Add abrt-java-connector bits
Honor JAVACMD_OPTS with a path to the abrt connector agent when:
1. JAVA_ABRT environment variable does not hold 'off'
2. the connector's library exists
3. abrtd is running
We have to use JAVACMD_OTPS variable instead of FLAGS and OPTIONS
because applications (i.e. ant) migth use the following workflow:
. /usr/share/java-utils/java-functions
set_javacmd
$JAVACMD MyClass
FLAGS and OPTIONS variables are used only from run() function.
Use architecture-independent location of abrt-java-connector
The connector's library has been moved to architecture-independent
directory /usr/lib/abrt-java-connector/, because Java does not
officially support multilib and having the connector installed the arch
specific directory was causing us problems if Java package doesn't match
host architecture (e.g. Java i386 on host x86_64).
Signed-off-by: Jakub Filak <jfilak@redhat.com>
Use wrapper script to inject extra JVM arguments (rhbz#1153652)
Add JAVA_ABRT=off to java.conf template
Log injecting ABRT agent
---
build | 2 ++
configure | 6 ++++++
etc/java.conf | 4 ++++
install | 1 +
java-utils/java-functions | 22 ++++++++++++++++++++--
java-utils/java-wrapper | 8 ++++++++
6 files changed, 41 insertions(+), 2 deletions(-)
create mode 100644 java-utils/java-wrapper
diff --git a/build b/build
index 23cbb90..4e974c0 100755
--- a/build
+++ b/build
@@ -61,7 +61,9 @@ expand()
-e "s|%{jvmdir}|${jvmdir}|" \
-e "s|%{m2home}|${m2home}|" \
-e "s|%{prefix}|${prefix}|" \
+ -e "s|%{rundir}|${rundir}|" \
-e "s|%{sysconfdir}|${sysconfdir}|" \
+ -e "s|%{abrtlibdir}|${abrtlibdir}|" \
"${1}" >"${target}"
}
diff --git a/configure b/configure
index 3288fda..4f22ceb 100755
--- a/configure
+++ b/configure
@@ -35,8 +35,10 @@ set -e
vars="
bindir
datadir
+localstatedir
mandir
prefix
+rundir
sysconfdir
rpmconfigdir
@@ -58,6 +60,7 @@ jvmsysconfdir
mavendepmapdir
mavendepmapfragdir
mavenpomdir
+abrtlibdir
"
vars_re=$(echo $vars | sed 's/ /\\|/g')
@@ -68,11 +71,14 @@ eval $(for _; do echo "$_"; done |
test -z "${prefix}" && prefix="/usr/local"
test -z "${bindir}" && bindir="${prefix}/bin"
test -z "${datadir}" && datadir="${prefix}/share"
+test -z "${localstatedir}" && localstatedir="${prefix}/var"
test -z "${mandir}" && mandir="${datadir}/man"
+test -z "${rundir}" && rundir="${localstatedir}/run"
test -z "${sysconfdir}" && sysconfdir="${prefix}/etc"
test -z "${rpmconfigdir}" && rpmconfigdir="${prefix}/lib/rpm"
test -z "${m2home}" && m2home="${datadir}/xmvn"
+test -z "${abrtlibdir}" && abrtlibdir="${prefix}/lib/abrt-java-connector"
eval $(sed -n 's/^%_\('"$vars_re"'\)\ *\(.*\)$/\1="\2"/;T;s/%{_\(.*}\)/${\1/;p' etc/macros.jpackage)
diff --git a/etc/java.conf b/etc/java.conf
index fa0a989..042e9ad 100644
--- a/etc/java.conf
+++ b/etc/java.conf
@@ -22,3 +22,7 @@ JVM_ROOT=%{jvmdir}
# Options to pass to the java interpreter
#JAVACMD_OPTS=
+
+# You can disable ABRT Java Connector by setting JAVA_ABRT to "off".
+# See: https://github.com/jfilak/abrt-java-connector/
+#JAVA_ABRT=off
diff --git a/install b/install
index d0b941a..33690ed 100755
--- a/install
+++ b/install
@@ -118,6 +118,7 @@ inst_config etc/font.properties "${javaconfdir}"
inst_config target/java.conf "${javaconfdir}"
inst_data target/java-functions "${javadir}-utils"
+inst_exec java-utils/java-wrapper "${javadir}-utils"
inst_data java-utils/maven_depmap.py "${javadir}-utils"
inst_data java-utils/pom_editor.sh "${javadir}-utils"
diff --git a/java-utils/java-functions b/java-utils/java-functions
index dc8aa1b..e9a763a 100644
--- a/java-utils/java-functions
+++ b/java-utils/java-functions
@@ -109,6 +109,14 @@ _load_java_conf()
if [ -n "${java_opts_save}" ]; then
JAVACMD_OPTS="${java_opts_save}"
fi
+
+ if [ "_${JAVA_ABRT}" != "_off" -a -f "%{abrtlibdir}/libabrt-java-connector.so" -a -f "%{rundir}/abrt/abrtd.pid" ]; then
+ _log "ABRT Java connector was enabled"
+ _log "Using ABRT Java agent: %{abrtlibdir}/libabrt-java-connector.so"
+ JAVACMD_OPTS="${JAVACMD_OPTS} -agentpath:%{abrtlibdir}/libabrt-java-connector.so=abrt=on"
+ else
+ _log "ABRT Java connector is disabled"
+ fi
}
@@ -224,7 +232,12 @@ set_javacmd()
JAVACMD="${JAVA_HOME}/${cmd}"
if [ -x "${JAVACMD}" ]; then
_log "Using configured JAVACMD: $JAVACMD"
- JAVACMD="${JAVACMD}${JAVACMD_OPTS:+ }${JAVACMD_OPTS}"
+ if [ -n "${JAVACMD_OPTS}" ]; then
+ _log "Using java-wrapper with extra options: ${JAVACMD_OPTS}"
+ export _JP_JAVACMD="${JAVACMD}"
+ export _JP_JAVACMD_OPTS="${JAVACMD_OPTS}"
+ JAVACMD="%{javadir}-utils/java-wrapper"
+ fi
return 0
fi
done
@@ -232,7 +245,12 @@ set_javacmd()
JAVACMD=$(which java 2>/dev/null || :)
if [ -x "${JAVACMD}" ]; then
_log "Using JAVACMD from PATH: $JAVACMD"
- JAVACMD="${JAVACMD}${JAVACMD_OPTS:+ }${JAVACMD_OPTS}"
+ if [ -n "${JAVACMD_OPTS}" ]; then
+ _log "Using java-wrapper with extra options: ${JAVACMD_OPTS}"
+ export _JP_JAVACMD="${JAVACMD}"
+ export _JP_JAVACMD_OPTS="${JAVACMD_OPTS}"
+ JAVACMD="%{javadir}-utils/java-wrapper"
+ fi
return 0
fi
diff --git a/java-utils/java-wrapper b/java-utils/java-wrapper
new file mode 100644
index 0000000..29b3143
--- /dev/null
+++ b/java-utils/java-wrapper
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+JAVACMD="${_JP_JAVACMD}"
+JAVACMD_OPTS="${_JP_JAVACMD_OPTS}"
+unset _JP_JAVACMD
+unset _JP_JAVACMD_OPTS
+
+exec "${JAVACMD}" ${JAVACMD_OPTS} "${@}"
--
2.4.3