Index: include/zbxjson.h =================================================================== --- include/zbxjson.h (revision 46554) +++ include/zbxjson.h (working copy) @@ -35,6 +35,7 @@ #define ZBX_PROTO_TAG_IP "ip" #define ZBX_PROTO_TAG_DNS "dns" #define ZBX_PROTO_TAG_CONN "conn" +#define ZBX_PROTO_TAG_URL "url" #define ZBX_PROTO_TAG_KEY "key" #define ZBX_PROTO_TAG_KEY_ORIG "key_orig" #define ZBX_PROTO_TAG_KEYS "keys" Index: src/zabbix_java/src/com/zabbix/gateway/ItemChecker.java =================================================================== --- src/zabbix_java/src/com/zabbix/gateway/ItemChecker.java (revision 46554) +++ src/zabbix_java/src/com/zabbix/gateway/ItemChecker.java (working copy) @@ -30,6 +30,7 @@ { private static final Logger logger = LoggerFactory.getLogger(ItemChecker.class); + public static final String JSON_TAG_URL = "url"; public static final String JSON_TAG_CONN = "conn"; public static final String JSON_TAG_DATA = "data"; public static final String JSON_TAG_ERROR = "error"; Index: src/zabbix_java/src/com/zabbix/gateway/JMXItemChecker.java =================================================================== --- src/zabbix_java/src/com/zabbix/gateway/JMXItemChecker.java (revision 46554) +++ src/zabbix_java/src/com/zabbix/gateway/JMXItemChecker.java (working copy) @@ -57,7 +57,13 @@ String conn = request.getString(JSON_TAG_CONN); int port = request.getInt(JSON_TAG_PORT); - url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://[" + conn + "]:" + port + "/jmxrmi"); + String zUrl = request.optString(JSON_TAG_URL, null); + + if (null != zUrl) + url = new JMXServiceURL(zUrl); + else + url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://[" + conn + "]:" + port + "/jmxrmi"); + jmxc = null; mbsc = null; Index: src/zabbix_server/poller/checks_java.c =================================================================== --- src/zabbix_server/poller/checks_java.c (revision 46554) +++ src/zabbix_server/poller/checks_java.c (working copy) @@ -22,6 +22,7 @@ #include "log.h" #include "zbxjson.h" +#include "zbxserver.h" #include "checks_java.h" @@ -188,6 +189,41 @@ zbx_json_addstring(&json, ZBX_PROTO_TAG_USERNAME, items[j].username, ZBX_JSON_TYPE_STRING); if ('\0' != *items[j].password) zbx_json_addstring(&json, ZBX_PROTO_TAG_PASSWORD, items[j].password, ZBX_JSON_TYPE_STRING); + + { + char *url, *p, port[8]; + zbx_uint64_t hostid = items[j].host.hostid; + + url = zbx_strdup(NULL, "{$JMX_SERVICE_URL}"); + substitute_simple_macros(NULL, NULL, NULL, NULL, &hostid, NULL, NULL, + NULL, &url, MACRO_TYPE_COMMON, NULL, 0); + + if (0 != strcmp(url, "{$JMX_SERVICE_URL}")) + { + substitute_simple_macros(NULL, NULL, NULL, NULL, &hostid, NULL, NULL, + NULL, &url, MACRO_TYPE_COMMON, NULL, 0); + + while (NULL != (p = strstr(url, "{JMX.CONN}"))) + { + size_t l = p - url; + size_t r = l + sizeof("{JMX.CONN}") - 2; + zbx_replace_string(&url, l, &r, items[j].interface.addr); + } + + zbx_snprintf(port, sizeof(port), "%hu", items[j].interface.port); + + while (NULL != (p = strstr(url, "{JMX.PORT}"))) + { + size_t l = p - url; + size_t r = l + sizeof("{JMX.PORT}") - 2; + zbx_replace_string(&url, l, &r, port); + } + + zbx_json_addstring(&json, ZBX_PROTO_TAG_URL, url, ZBX_JSON_TYPE_STRING); + } + + zbx_free(url); + } } else assert(0);