[ZBX-9824] Various improvements for java gateway itself and installation Created: 2015 Aug 27  Updated: 2019 Dec 10

Status: Reopened
Project: ZABBIX BUGS AND ISSUES
Component/s: Installation (I), Java gateway (J)
Affects Version/s: 2.2.10, 2.4.5, 2.5.0
Fix Version/s: None

Type: Incident report Priority: Trivial
Reporter: Oleksii Zagorskyi Assignee: Unassigned
Resolution: Unresolved Votes: 1
Labels: installation, javagateway, version
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Duplicate

 Description   

If one compiles and updates zabbix binaries (including java gateway) from sources (make install), then corresponding ./bin folder will contain many .jar files like zabbix-java-gateway-2.4.3.jar, zabbix-java-gateway-2.4.4.jar etc
Then startup.sh will start java vm with all these .jar files loaded:

CLASSPATH="lib"
for jar in lib/*.jar bin/*.jar; do
        CLASSPATH="$CLASSPATH:$jar"
done

Need to improve the code block to load for example only one (sort + select only last ?) .jar file.

Also, I don't understand why do we use versioning in .jar file name at all ?
It leads to inconveniences.

For example (in my own internal scripts to "install/deploy" development branches etc) to workaround the version suffix presence I had to use something like:

ls -l ./src/zabbix_java/bin/* &> /dev/null && cp ./src/zabbix_java/bin/* $BINARIES/$BRANCH/bin/zabbix-java-gateway.jar

to copy zabbix-java-gateway-2.4.4.jar as zabbix-java-gateway.jar
This is an example that we indeed could review the version inclusion approach and exclude it.



 Comments   
Comment by Oleksii Zagorskyi [ 2015 Aug 27 ]

In ZBX-9336 Kodai has agreed that:

I agree that versioning is not necessary for java gateway binary file name

Comment by richlv [ 2015 Oct 27 ]

got bitten by this a bit today - was trying to figure out why is java gateway not updating properly (spotted old version number in the commandline).
ended up with a piece in a script that deletes all files in the java bin directory but the most recent one

Comment by Oleksii Zagorskyi [ 2015 Nov 06 ]

After discussion, asaveljevs confirmed that there are no any specific reasons to include version to file name. It was just for usability, agreed to remove it.

We decided that I'll try to prepare something and then will show results.

Comment by Aleksandrs Saveljevs [ 2015 Nov 06 ]

(1) ZBX-8391 changed the output format of --version for C binaries:

Index: src/libs/zbxcommon/str.c
===================================================================
--- src/libs/zbxcommon/str.c	(revision 49001)
+++ src/libs/zbxcommon/str.c	(revision 49002)
@@ -34,7 +45,7 @@
  ******************************************************************************/
 static void	app_title(void)
 {
-	printf("%s v%s (revision %s) (%s)\n", title_message, ZABBIX_VERSION, ZABBIX_REVISION, ZABBIX_REVDATE);
+	printf("%s (Zabbix) %s\n", title_message, ZABBIX_VERSION);
 }
 
 /******************************************************************************
@@ -50,7 +61,8 @@
 void	version(void)
 {
 	app_title();
-	printf("Compilation time: %s %s\n", __DATE__, __TIME__);
+	printf("Revision %s %s, compilation time: %s %s\n\n", ZABBIX_REVISION, ZABBIX_REVDATE, __DATE__, __TIME__);
+	puts(copyright_message);
 }
 
 /******************************************************************************

However, it did not change that for Java gateway. Should be made consistent.

Comment by Oleksii Zagorskyi [ 2015 Nov 06 ]

Even if use zabbix packages it's not guaranteed that that someone will start several gateways with different versions.
Here is an example from production installation, not sure how that could happen and how it was resolved, I just have a log file and I know for sure that official zabbix repo is used.

It's just a proof that only one main jar file should be loaded in init/startup script, with fixed file name:

2015-10-14 07:03:49.043 [main] INFO  com.zabbix.gateway.JavaGateway - Zabbix Java Gateway 2.2.8 (revision 51174) has started
2015-10-14 07:03:49.086 [main] INFO  com.zabbix.gateway.JavaGateway - listening on 0.0.0.0/0.0.0.0:10052
2015-10-14 15:27:13.925 [main] INFO  com.zabbix.gateway.JavaGateway - Zabbix Java Gateway 2.2.10 (revision 54806) has started
2015-10-14 15:27:14.194 [main] ERROR com.zabbix.gateway.JavaGateway - caught fatal exception
java.net.BindException: Address already in use
        at java.net.PlainSocketImpl.socketBind(Native Method) ~[na:1.8.0_45]
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:382) ~[na:1.8.0_45]
        at java.net.ServerSocket.bind(ServerSocket.java:375) ~[na:1.8.0_45]
        at java.net.ServerSocket.<init>(ServerSocket.java:237) ~[na:1.8.0_45]
        at com.zabbix.gateway.JavaGateway.main(JavaGateway.java:65) ~[zabbix-java-gateway-2.2.10.jar:na]
2015-10-14 15:27:14.210 [Thread-0] INFO  com.zabbix.gateway.JavaGateway - Zabbix Java Gateway 2.2.10 (revision 54806) has stopped
2015-10-14 15:29:13.881 [main] INFO  com.zabbix.gateway.JavaGateway - Zabbix Java Gateway 2.2.10 (revision 54806) has started
2015-10-14 15:29:13.930 [main] ERROR com.zabbix.gateway.JavaGateway - caught fatal exception
java.net.BindException: Address already in use
        at java.net.PlainSocketImpl.socketBind(Native Method) ~[na:1.8.0_45]
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:382) ~[na:1.8.0_45]
        at java.net.ServerSocket.bind(ServerSocket.java:375) ~[na:1.8.0_45]
        at java.net.ServerSocket.<init>(ServerSocket.java:237) ~[na:1.8.0_45]
        at com.zabbix.gateway.JavaGateway.main(JavaGateway.java:65) ~[zabbix-java-gateway-2.2.10.jar:na]
2015-10-14 15:29:13.935 [Thread-0] INFO  com.zabbix.gateway.JavaGateway - Zabbix Java Gateway 2.2.10 (revision 54806) has stopped
2015-10-14 15:34:49.245 [main] INFO  com.zabbix.gateway.JavaGateway - Zabbix Java Gateway 2.2.10 (revision 54806) has started
2015-10-14 15:34:49.289 [main] ERROR com.zabbix.gateway.JavaGateway - caught fatal exception
java.net.BindException: Address already in use
        at java.net.PlainSocketImpl.socketBind(Native Method) ~[na:1.8.0_45]
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:382) ~[na:1.8.0_45]
        at java.net.ServerSocket.bind(ServerSocket.java:375) ~[na:1.8.0_45]
        at java.net.ServerSocket.<init>(ServerSocket.java:237) ~[na:1.8.0_45]
        at com.zabbix.gateway.JavaGateway.main(JavaGateway.java:65) ~[zabbix-java-gateway-2.2.10.jar:na]
2015-10-14 15:34:49.307 [Thread-0] INFO  com.zabbix.gateway.JavaGateway - Zabbix Java Gateway 2.2.10 (revision 54806) has stopped
2015-10-14 15:35:18.832 [main] INFO  com.zabbix.gateway.JavaGateway - Zabbix Java Gateway 2.2.10 (revision 54806) has started
2015-10-14 15:35:19.123 [main] ERROR com.zabbix.gateway.JavaGateway - caught fatal exception
java.net.BindException: Address already in use
        at java.net.PlainSocketImpl.socketBind(Native Method) ~[na:1.8.0_45]
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:382) ~[na:1.8.0_45]
        at java.net.ServerSocket.bind(ServerSocket.java:375) ~[na:1.8.0_45]
        at java.net.ServerSocket.<init>(ServerSocket.java:237) ~[na:1.8.0_45]
        at com.zabbix.gateway.JavaGateway.main(JavaGateway.java:65) ~[zabbix-java-gateway-2.2.10.jar:na]
2015-10-14 15:35:19.164 [Thread-0] INFO  com.zabbix.gateway.JavaGateway - Zabbix Java Gateway 2.2.10 (revision 54806) has stopped
2015-10-14 15:39:26.508 [main] INFO  com.zabbix.gateway.JavaGateway - Zabbix Java Gateway 2.2.10 (revision 54806) has started
2015-10-14 15:39:26.546 [main] ERROR com.zabbix.gateway.JavaGateway - caught fatal exception
java.net.BindException: Address already in use
        at java.net.PlainSocketImpl.socketBind(Native Method) ~[na:1.8.0_45]
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:382) ~[na:1.8.0_45]
        at java.net.ServerSocket.bind(ServerSocket.java:375) ~[na:1.8.0_45]
        at java.net.ServerSocket.<init>(ServerSocket.java:237) ~[na:1.8.0_45]
        at com.zabbix.gateway.JavaGateway.main(JavaGateway.java:65) ~[zabbix-java-gateway-2.2.10.jar:na]
2015-10-14 15:39:26.550 [Thread-0] INFO  com.zabbix.gateway.JavaGateway - Zabbix Java Gateway 2.2.10 (revision 54806) has stopped
2015-10-14 15:45:02.684 [Thread-0] INFO  com.zabbix.gateway.JavaGateway - Zabbix Java Gateway 2.2.8 (revision 51174) has stopped
Comment by Oleksii Zagorskyi [ 2015 Nov 10 ]

(2)
logback actually supports TRACE level, which shows more information than DEBUG.
After discussion with asaveljevs we agreed that it worth to be added to doc (all versions)
Will be done in this sub-issue.

Examples:

TRACE:

2015-11-05 15:23:14.623 [main] INFO  com.zabbix.gateway.JavaGateway - Zabbix Java Gateway 2.4.7rc1 (revision {ZABBIX_REVISION}) has started
2015-11-05 15:23:14.629 [main] DEBUG c.z.gateway.ConfigurationManager - starting to parse configuration parameters
2015-11-05 15:23:14.629 [main] DEBUG c.z.gateway.ConfigurationManager - found pidFile configuration parameter with value '/zab/bin/2.4/zabbix_java.pid'
2015-11-05 15:23:14.629 [main] DEBUG c.z.gateway.ConfigurationManager - received pidFile configuration parameter, daemonizing
2015-11-05 15:23:14.630 [main] DEBUG c.z.gateway.ConfigurationManager - finished parsing configuration parameters
2015-11-05 15:23:14.632 [main] INFO  com.zabbix.gateway.JavaGateway - listening on 0.0.0.0/0.0.0.0:10052
2015-11-05 15:23:14.635 [main] DEBUG com.zabbix.gateway.JavaGateway - created a thread pool of 5 pollers
2015-11-05 15:26:01.637 [pool-1-thread-3] DEBUG com.zabbix.gateway.SocketProcessor - starting to process incoming connection
2015-11-05 15:26:01.637 [pool-1-thread-3] DEBUG c.z.gateway.BinaryProtocolSpeaker - reading Zabbix protocol header
2015-11-05 15:26:01.638 [pool-1-thread-3] DEBUG c.z.gateway.BinaryProtocolSpeaker - reading 8 bytes of data length
2015-11-05 15:26:01.638 [pool-1-thread-3] DEBUG c.z.gateway.BinaryProtocolSpeaker - reading 227 bytes of request data
2015-11-05 15:26:01.638 [pool-1-thread-3] DEBUG c.z.gateway.BinaryProtocolSpeaker - received the following data in request: {
        "request":"java gateway jmx",
        "conn":"127.0.0.1",
        "port":12345,
        "username":"username",
        "password":"password",
"keys":["jmx[\"java.lang:type=Memory\",\"HeapMemoryUsage.used\"]"]}
2015-11-05 15:26:01.639 [pool-1-thread-3] DEBUG com.zabbix.gateway.SocketProcessor - dispatched request to class com.zabbix.gateway.JMXItemChecker
2015-11-05 15:26:01.639 [pool-1-thread-3] DEBUG c.z.g.ZabbixJMXConnectorFactory - connecting to JMX agent at 'service:jmx:rmi:///jndi/rmi://127.0.0.1:12345/jmxrmi'
2015-11-05 15:26:01.639 [pool-2-thread-2] TRACE c.z.g.ZabbixJMXConnectorFactory - making a call to JMXConnectorFactory.connect('service:jmx:rmi:///jndi/rmi://127.0.0.1:12345/jmxrmi')
2015-11-05 15:26:01.645 [pool-2-thread-2] TRACE c.z.g.ZabbixJMXConnectorFactory - call to JMXConnectorFactory.connect('service:jmx:rmi:///jndi/rmi://127.0.0.1:12345/jmxrmi') successful
2015-11-05 15:26:01.645 [pool-1-thread-3] TRACE c.z.g.ZabbixJMXConnectorFactory - connector acquired
2015-11-05 15:26:01.645 [pool-1-thread-3] DEBUG com.zabbix.gateway.ItemChecker - getting value for item 'jmx["java.lang:type=Memory","HeapMemoryUsage.used"]'
2015-11-05 15:26:01.645 [pool-1-thread-3] TRACE com.zabbix.gateway.JMXItemChecker - 'HeapMemoryUsage.used' contains composite data
2015-11-05 15:26:01.646 [pool-1-thread-3] TRACE com.zabbix.gateway.JMXItemChecker - attributeName:'HeapMemoryUsage'
2015-11-05 15:26:01.646 [pool-1-thread-3] TRACE com.zabbix.gateway.JMXItemChecker - fieldNames:'used'
2015-11-05 15:26:01.649 [pool-1-thread-3] TRACE com.zabbix.gateway.JMXItemChecker - drilling down with data object 'javax.management.openmbean.CompositeDataSupport(compositeType=javax.management.openmbean.CompositeType(name=java.lang.management.MemoryUsage,items=((itemName=committed,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=init,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=max,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=used,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)))),contents={committed=196608000, init=162363264, max=358088704, used=51614112})' and field names 'used'
2015-11-05 15:26:01.649 [pool-1-thread-3] TRACE com.zabbix.gateway.JMXItemChecker - 'javax.management.openmbean.CompositeDataSupport(compositeType=javax.management.openmbean.CompositeType(name=java.lang.management.MemoryUsage,items=((itemName=committed,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=init,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=max,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=used,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)))),contents={committed=196608000, init=162363264, max=358088704, used=51614112})' contains composite data
2015-11-05 15:26:01.649 [pool-1-thread-3] TRACE com.zabbix.gateway.JMXItemChecker - drilling down with data object '51614112' and field names ''
2015-11-05 15:26:01.649 [pool-1-thread-3] DEBUG com.zabbix.gateway.ItemChecker - received value '51614112' for item 'jmx["java.lang:type=Memory","HeapMemoryUsage.used"]'
2015-11-05 15:26:01.650 [pool-1-thread-3] DEBUG c.z.gateway.BinaryProtocolSpeaker - sending the following data in response: {"response":"success","data":[{"value":"51614112"}]}
2015-11-05 15:26:01.650 [pool-1-thread-3] DEBUG com.zabbix.gateway.SocketProcessor - finished processing incoming connection

DEBUG:

2015-11-05 15:29:36.071 [pool-1-thread-5] DEBUG com.zabbix.gateway.SocketProcessor - starting to process incoming connection
2015-11-05 15:29:36.071 [pool-1-thread-5] DEBUG c.z.gateway.BinaryProtocolSpeaker - reading Zabbix protocol header
2015-11-05 15:29:36.072 [pool-1-thread-5] DEBUG c.z.gateway.BinaryProtocolSpeaker - reading 8 bytes of data length
2015-11-05 15:29:36.073 [pool-1-thread-5] DEBUG c.z.gateway.BinaryProtocolSpeaker - reading 227 bytes of request data
2015-11-05 15:29:36.073 [pool-1-thread-5] DEBUG c.z.gateway.BinaryProtocolSpeaker - received the following data in request: {
        "request":"java gateway jmx",
        "conn":"127.0.0.1",
        "port":12345,
        "username":"username",
        "password":"password",
"keys":["jmx[\"java.lang:type=Memory\",\"HeapMemoryUsage.used\"]"]}
2015-11-05 15:29:36.074 [pool-1-thread-5] DEBUG com.zabbix.gateway.SocketProcessor - dispatched request to class com.zabbix.gateway.JMXItemChecker
2015-11-05 15:29:36.074 [pool-1-thread-5] DEBUG c.z.g.ZabbixJMXConnectorFactory - connecting to JMX agent at 'service:jmx:rmi:///jndi/rmi://127.0.0.1:12345/jmxrmi'
2015-11-05 15:29:36.082 [pool-1-thread-5] DEBUG com.zabbix.gateway.ItemChecker - getting value for item 'jmx["java.lang:type=Memory","HeapMemoryUsage.used"]'
2015-11-05 15:29:36.086 [pool-1-thread-5] DEBUG com.zabbix.gateway.ItemChecker - received value '53577520' for item 'jmx["java.lang:type=Memory","HeapMemoryUsage.used"]'
2015-11-05 15:29:36.087 [pool-1-thread-5] DEBUG c.z.gateway.BinaryProtocolSpeaker - sending the following data in response: {"response":"success","data":[{"value":"53577520"}]}
2015-11-05 15:29:36.087 [pool-1-thread-5] DEBUG com.zabbix.gateway.SocketProcessor - finished processing incoming connection
Comment by Oleksii Zagorskyi [ 2015 Nov 23 ]

(3) Start and stop log messages will be replaced from:

"Zabbix Java Gateway {} (revision {}) has started"
"Zabbix Java Gateway {} (revision {}) has stopped"

to:

"Starting Zabbix Java Gateway. Zabbix {} (revision {})"
"Zabbix Java Gateway stopped. Zabbix {} (revision {})"

This way they will be consistent with zabbix server:

Starting Zabbix Server. Zabbix 3.0.0alpha5 (revision 56596)
Zabbix Server stopped. Zabbix 3.0.0alpha5 (revision 56596).
Comment by Oleksii Zagorskyi [ 2015 Nov 24 ]

(4) implement new, unified approach to run java gateway in the foreground, as part of ZBXNEXT-611

Comment by Oleksii Zagorskyi [ 2015 Dec 03 ]

(5) create man page for zabbix java gateway.

Generated at Sat Jun 21 08:30:38 EEST 2025 using Jira 9.12.4#9120004-sha1:625303b708afdb767e17cb2838290c41888e9ff0.