diff --git a/dist/redhat/scylla-jmx.spec b/dist/redhat/scylla-jmx.spec
index 525f460..a14cf29 100644
--- a/dist/redhat/scylla-jmx.spec
+++ b/dist/redhat/scylla-jmx.spec
@@ -64,10 +64,10 @@ rm -rf $RPM_BUILD_ROOT
%config(noreplace) %{_sysconfdir}/sysconfig/scylla-jmx
%{_unitdir}/scylla-jmx.service
/opt/scylladb/jmx/scylla-jmx
-/opt/scylladb/jmx/scylla-jmx-1.0.jar
+/opt/scylladb/jmx/scylla-jmx-1.1.jar
/opt/scylladb/jmx/symlinks/scylla-jmx
%{_prefix}/lib/scylla/jmx/scylla-jmx
-%{_prefix}/lib/scylla/jmx/scylla-jmx-1.0.jar
+%{_prefix}/lib/scylla/jmx/scylla-jmx-1.1.jar
%{_prefix}/lib/scylla/jmx/symlinks/scylla-jmx
%changelog
diff --git a/install.sh b/install.sh
index 9b12e14..96fd45b 100755
--- a/install.sh
+++ b/install.sh
@@ -89,12 +89,10 @@ if ! $packaging; then
has_java=false
if [ -x /usr/bin/java ]; then
javaver=$(/usr/bin/java -version 2>&1|head -n1|cut -f 3 -d " ")
- if [[ "$javaver" =~ ^\"1.8.0 || "$javaver" =~ ^\"11.0. ]]; then
- has_java=true
- fi
+ has_java=true
fi
if ! $has_java; then
- echo "Please install openjdk-8 or openjdk-11 before running install.sh."
+ echo "Please install openjdk-8, openjdk-11, or openjdk-17 before running install.sh."
exit 1
fi
fi
@@ -152,12 +150,12 @@ WorkingDirectory=$rprefix
EOS
fi
-install -m644 scylla-jmx-1.0.jar "$rprefix/jmx"
+install -m644 scylla-jmx-1.1.jar "$rprefix/jmx"
install -m755 scylla-jmx "$rprefix/jmx"
ln -sf /usr/bin/java "$rprefix/jmx/symlinks/scylla-jmx"
if ! $nonroot; then
install -m755 -d "$rusr"/lib/scylla/jmx/symlinks
- ln -srf "$rprefix"/jmx/scylla-jmx-1.0.jar "$rusr"/lib/scylla/jmx/
+ ln -srf "$rprefix"/jmx/scylla-jmx-1.1.jar "$rusr"/lib/scylla/jmx/
ln -srf "$rprefix"/jmx/scylla-jmx "$rusr"/lib/scylla/jmx/
ln -sf /usr/bin/java "$rusr"/lib/scylla/jmx/symlinks/scylla-jmx
fi
diff --git a/pom.xml b/pom.xml
index 0bf5123..e7d8a5f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
scylla-jmx
- 1.0
+ 1.1
jar
@@ -35,8 +35,8 @@
maven-compiler-plugin
3.10.1
-
- 17
+
+ 11
--add-exports
java.management/com.sun.jmx.mbeanserver=scylla.jmx
diff --git a/scripts/create-relocatable-package.py b/scripts/create-relocatable-package.py
index 182570f..ecbdd6e 100755
--- a/scripts/create-relocatable-package.py
+++ b/scripts/create-relocatable-package.py
@@ -57,7 +57,7 @@ ar.reloc_add('build/SCYLLA-VERSION-FILE', arcname='SCYLLA-VERSION-FILE')
ar.reloc_add('build/SCYLLA-PRODUCT-FILE', arcname='SCYLLA-PRODUCT-FILE')
ar.reloc_add('dist')
ar.reloc_add('install.sh')
-ar.reloc_add('target/scylla-jmx-1.0.jar', arcname='scylla-jmx-1.0.jar')
+ar.reloc_add('target/scylla-jmx-1.1.jar', arcname='scylla-jmx-1.1.jar')
ar.reloc_add('scripts/scylla-jmx', arcname='scylla-jmx')
ar.reloc_add('README.md')
ar.reloc_add('NOTICE')
diff --git a/scripts/scylla-jmx b/scripts/scylla-jmx
index 1c46f4c..beb5681 100755
--- a/scripts/scylla-jmx
+++ b/scripts/scylla-jmx
@@ -131,11 +131,13 @@ else
fi
fi
-exec "$LOCATION_SCRIPTS"/symlinks/scylla-jmx $DEBUG \
+"$LOCATION_SCRIPTS"/symlinks/scylla-jmx $DEBUG \
$API_PORT $API_ADDR $CONF_FILE -Xmx256m -XX:+UseSerialGC \
-XX:+HeapDumpOnOutOfMemoryError \
$JMX_AUTH $JMX_SSL $JMX_ADDR $JMX_LOCAL \
+ --add-exports java.management/com.sun.jmx.mbeanserver=scylla.jmx \
+ --add-exports java.management/com.sun.jmx.interceptor=scylla.jmx \
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=$JMX_PORT \
-Djava.rmi.server.hostname=$HOSTNAME -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT \
-Djavax.management.builder.initial=com.scylladb.jmx.utils.APIBuilder \
- $PROPERTIES -jar $LOCATION/scylla-jmx-1.0.jar
+ $PROPERTIES -jar $LOCATION/scylla-jmx-1.1.jar
diff --git a/scylla-apiclient/pom.xml b/scylla-apiclient/pom.xml
index f7c5882..5a9eab6 100644
--- a/scylla-apiclient/pom.xml
+++ b/scylla-apiclient/pom.xml
@@ -21,6 +21,11 @@
+
+ org.eclipse.parsson
+ parsson
+ 1.1.1
+
org.yaml
snakeyaml
@@ -41,6 +46,11 @@
jersey-client
3.1.0
+
+ org.glassfish.jersey.inject
+ jersey-hk2
+ 3.1.0
+
jakarta.json
jakarta.json-api
@@ -80,7 +90,7 @@
maven-compiler-plugin
3.10.1
- 17
+ 11
diff --git a/scylla-apiclient/src/main/java/com/scylladb/jmx/api/APIClient.java b/scylla-apiclient/src/main/java/com/scylladb/jmx/api/APIClient.java
index 4db469c..cf5f573 100644
--- a/scylla-apiclient/src/main/java/com/scylladb/jmx/api/APIClient.java
+++ b/scylla-apiclient/src/main/java/com/scylladb/jmx/api/APIClient.java
@@ -102,7 +102,12 @@ public class APIClient {
}
}
}
- return webTarget.request(MediaType.APPLICATION_JSON);
+ try {
+ return webTarget.request(MediaType.APPLICATION_JSON);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ throw ex;
+ }
}
public Invocation.Builder get(String path) {
diff --git a/scylla-apiclient/src/main/java/module-info.java b/scylla-apiclient/src/main/java/module-info.java
index 1c8ae97..014475c 100644
--- a/scylla-apiclient/src/main/java/module-info.java
+++ b/scylla-apiclient/src/main/java/module-info.java
@@ -1,6 +1,7 @@
module scylla.apiclient {
exports com.scylladb.jmx.api;
exports com.scylladb.jmx.api.utils;
+ requires org.eclipse.parsson;
requires jakarta.ws.rs;
requires com.fasterxml.jackson.jakarta.rs.json;
requires jersey.client;
@@ -10,4 +11,5 @@ module scylla.apiclient {
requires org.yaml.snakeyaml;
requires com.google.common;
requires jersey.common;
+ requires jersey.hk2;
}
\ No newline at end of file
diff --git a/src/main/java/com/scylladb/jmx/main/Main.java b/src/main/java/com/scylladb/jmx/main/Main.java
index 3aa5a2f..9651d80 100644
--- a/src/main/java/com/scylladb/jmx/main/Main.java
+++ b/src/main/java/com/scylladb/jmx/main/Main.java
@@ -27,12 +27,27 @@ import com.scylladb.jmx.api.APIConfig;
import com.scylladb.jmx.metrics.APIMBean;
public class Main {
- // todo: command line options. Make us an agent class (also)
- private static final APIConfig config = new APIConfig();
- public static final APIClient client = new APIClient(config);
+
+ private static APIConfig config;
+ private static APIClient client;
+
+ public static synchronized APIConfig getApiConfig() {
+ if (config == null) {
+ config = new APIConfig();
+ }
+ return config;
+ }
+
+ public static synchronized APIClient getApiClient() {
+ if (client == null) {
+ client = new APIClient(getApiConfig());
+ }
+ return client;
+ }
public static void main(String[] args) throws Exception {
- System.out.println("Connecting to " + config.getBaseUrl());
+ System.out.printf("Java %s%n", System.getProperty("java.version"));
+ System.out.printf("Connecting to %s%n", getApiConfig().getBaseUrl());
System.out.println("Starting the JMX server");
MBeanServer server = getPlatformMBeanServer();
@@ -40,7 +55,7 @@ public class Main {
CommitLog.class, Gossiper.class, EndpointSnitchInfo.class, FailureDetector.class, CacheService.class,
CompactionManager.class, GCInspector.class, StreamManager.class)) {
Constructor extends APIMBean> c = clazz.getDeclaredConstructor(APIClient.class);
- APIMBean m = c.newInstance(client);
+ APIMBean m = c.newInstance(getApiClient());
server.registerMBean(m, null);
}
diff --git a/src/main/java/com/scylladb/jmx/utils/APIBuilder.java b/src/main/java/com/scylladb/jmx/utils/APIBuilder.java
index 08a9f48..b5ef823 100644
--- a/src/main/java/com/scylladb/jmx/utils/APIBuilder.java
+++ b/src/main/java/com/scylladb/jmx/utils/APIBuilder.java
@@ -3,7 +3,7 @@ package com.scylladb.jmx.utils;
* Copyright 2016 ScyllaDB
*/
-import static com.scylladb.jmx.main.Main.client;
+import static com.scylladb.jmx.main.Main.getApiClient;
import static com.sun.jmx.mbeanserver.Util.wildmatch;
import static java.util.logging.Level.SEVERE;
import static javax.management.MBeanServerDelegate.DELEGATE_NAME;
@@ -491,6 +491,6 @@ public class APIBuilder extends MBeanServerBuilder {
throw new RuntimeException(e);
}
- return new APIMBeanServer(client, nested);
+ return new APIMBeanServer(getApiClient(), nested);
}
}
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index a5d15a5..4c7c5c9 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -1,4 +1,10 @@
module scylla.jmx {
+ opens com.scylladb.jmx.utils;
+ exports com.scylladb.jmx.utils;
+ opens com.scylladb.jmx.main;
+ exports com.scylladb.jmx.main;
+ opens com.scylladb.jmx.metrics;
+ exports com.scylladb.jmx.metrics;
requires java.logging;
requires java.management;
requires scylla.apiclient;