Skip to content

Commit cdcdbe3

Browse files
committed
reuse JMX connection (via ProxyClient) in JMXModelImpl
1 parent bb63b4f commit cdcdbe3

File tree

4 files changed

+421
-334
lines changed

4 files changed

+421
-334
lines changed

visualvm/jmx/src/org/graalvm/visualvm/jmx/impl/JmxApplication.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public final class JmxApplication extends Application {
5757
// hard reference jvm from application so we are sure that it is not garbage collected
5858
public Jvm jvm;
5959
JmxModel jmxModel;
60+
ProxyClient client;
6061

6162
// Note: storage may be null, in this case the JmxApplication isn't persistent
6263
// and creates a temporary storage just like any other regular Application
@@ -102,6 +103,7 @@ public void setStateImpl(int newState) {
102103
pid = UNKNOWN_PID;
103104
jvm = null;
104105
jmxModel = null;
106+
client = null;
105107
}
106108
setState(newState);
107109
}
@@ -144,4 +146,12 @@ private static String createId(JMXServiceURL url, EnvironmentProvider envProvide
144146
// Typically 'username-service:jmx:rmi:///jndi/rmi://hostName:portNum/jmxrmi'
145147
return envId + "-" + urlId; // NOI18N
146148
}
149+
150+
ProxyClient getProxyClient() {
151+
return client;
152+
}
153+
154+
void setClient(ProxyClient client) {
155+
this.client = client;
156+
}
147157
}

visualvm/jmx/src/org/graalvm/visualvm/jmx/impl/JmxApplicationProvider.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@
6262
import java.util.Map;
6363
import java.util.Set;
6464
import java.util.concurrent.atomic.AtomicInteger;
65+
import java.util.logging.Level;
66+
import java.util.logging.Logger;
6567
import javax.management.remote.JMXServiceURL;
6668
import javax.swing.BorderFactory;
6769
import javax.swing.JCheckBox;
@@ -94,6 +96,8 @@ public class JmxApplicationProvider {
9496
//
9597
// -------------------------------------------------------------------------
9698

99+
private final static Logger LOGGER = Logger.getLogger(ProxyClient.class.getName());
100+
97101
private static final String SNAPSHOT_VERSION = "snapshot_version"; // NOI18N
98102
private static final String SNAPSHOT_VERSION_DIVIDER = "."; // NOI18N
99103
private static final String CURRENT_SNAPSHOT_VERSION_MAJOR = "1"; // NOI18N
@@ -400,10 +404,20 @@ private void scheduleHeartbeatImpl(boolean immediately) {
400404
@Override
401405
public void run() {
402406
try {
403-
JmxModel model = new JmxModelProvider().createModelFor(app);
404-
if (model == null || model.getConnectionState() != ConnectionState.CONNECTED) {
407+
boolean connected = false;
408+
try {
409+
ProxyClient client = new ProxyClient(app);
410+
client.connect();
411+
if (client.getConnectionState() == ConnectionState.CONNECTED) {
412+
app.setClient(client);
413+
connected = true;
414+
}
415+
} catch (IOException ex) {
416+
LOGGER.log(Level.FINE, "ProxyClient.connect", ex);
417+
}
418+
if (!connected) {
405419
synchronized (unavailableApps) { unavailableApps.add(app); }
406-
} else {
420+
} else {
407421
app.setStateImpl(Stateful.STATE_AVAILABLE);
408422

409423
app.jmxModel = JmxModelFactory.getJmxModelFor(app);

0 commit comments

Comments
 (0)