Skip to content

Commit 1946f4a

Browse files
committed
Prototype of improved JMX and Jvmstat applications
- can be resurrected from STATE_UNAVAILABLE back to STATE_AVAILABLE - opened views can be reloaded when needed
1 parent 6a69cb4 commit 1946f4a

File tree

12 files changed

+380
-54
lines changed

12 files changed

+380
-54
lines changed

visualvm/application/src/org/graalvm/visualvm/application/Application.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,14 @@
2525

2626
package org.graalvm.visualvm.application;
2727

28+
import java.beans.PropertyChangeEvent;
29+
import java.beans.PropertyChangeListener;
2830
import org.graalvm.visualvm.core.datasource.DataSource;
2931
import org.graalvm.visualvm.core.datasource.Storage;
3032
import org.graalvm.visualvm.core.datasupport.Stateful;
3133
import org.graalvm.visualvm.host.Host;
3234
import java.io.File;
35+
import java.util.Objects;
3336
import org.graalvm.visualvm.core.datasupport.DataRemovedListener;
3437
import org.graalvm.visualvm.core.options.GlobalPreferences;
3538
import org.graalvm.visualvm.core.ui.DataSourceWindowListener;
@@ -123,14 +126,13 @@ protected final synchronized void setState(final int newState) {
123126
});
124127
}
125128

126-
protected boolean autoRemoveWhenTerminated() {
127-
return !DataSourceWindowManager.sharedInstance().isDataSourceOpened(this) &&
128-
getRepository().getDataSources().isEmpty();
129+
protected boolean supportsFinishedRemove() {
130+
return true;
129131
}
130132

131133
protected boolean handleControlledRemove() {
132134
if (!canRemoveFinished_Opened()) {
133-
class ApplicationListener implements DataSourceWindowListener<Application>, DataRemovedListener<Application> {
135+
class ApplicationListener implements DataSourceWindowListener<Application>, DataRemovedListener<Application>, PropertyChangeListener {
134136
private boolean done;
135137

136138
public void windowClosed(Application application) {
@@ -149,14 +151,24 @@ public void dataRemoved(Application application) {
149151
}
150152
}
151153

154+
public void propertyChange(PropertyChangeEvent evt) {
155+
if (PROPERTY_STATE.equals(evt.getPropertyName()) &&
156+
!Objects.equals(evt.getNewValue(), STATE_UNAVAILABLE))
157+
synchronized (ApplicationListener.this) {
158+
if (!done) unregister();
159+
}
160+
}
161+
152162
void register() {
153163
Application.this.notifyWhenRemoved(this);
164+
Application.this.addPropertyChangeListener(PROPERTY_STATE, this);
154165
DataSourceWindowManager.sharedInstance().addWindowListener(Application.this, this);
155166
}
156167

157168
void unregister() {
158169
done = true;
159170
DataSourceWindowManager.sharedInstance().removeWindowListener(Application.this, this);
171+
Application.this.removePropertyChangeListener(this);
160172
}
161173
}
162174

visualvm/application/src/org/graalvm/visualvm/application/RemoveFinishedApplicationsAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ private void removeApplications(Set<Host> hosts) {
110110

111111

112112
private static boolean isRemovable(Application application) {
113-
return application.getState() != Stateful.STATE_AVAILABLE && application.supportsUserRemove();
113+
return application.getState() == Stateful.STATE_UNAVAILABLE && application.supportsFinishedRemove();
114114
}
115115

116116

visualvm/core/src/org/graalvm/visualvm/core/explorer/ExplorerModelBuilder.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -397,8 +397,11 @@ public void propertyChange(final PropertyChangeEvent evt) {
397397
final ExplorerNode node = getNodeFor(dataSource);
398398
if (node != null) SwingUtilities.invokeLater(new Runnable() {
399399
public void run() {
400-
((ExplorerNode)node.getParent()).sortChildren();
401-
updateContainer(node.getParent());
400+
ExplorerNode parent = (ExplorerNode)node.getParent();
401+
if (parent != null) {
402+
parent.sortChildren();
403+
updateContainer(parent);
404+
}
402405
}
403406
});
404407
}

visualvm/core/src/org/graalvm/visualvm/core/model/ModelFactory.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,10 @@ public final boolean unregisterProvider(ModelProvider<M, D> oldProvider) {
169169
}
170170
}
171171

172+
public final void clearModel(D dataSource) {
173+
modelCache.remove(new DataSourceKey(dataSource));
174+
}
175+
172176
/**
173177
* Add data change listener. Data change is fired when
174178
* {@link ModelProvider} is registered/unregister.

visualvm/core/src/org/graalvm/visualvm/core/ui/Bundle.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,6 @@
2323
# questions.
2424

2525
LBL_Opening=Opening {0}...
26+
27+
DataSourceCaption_LBL_Reload=The view is not up to date, click to reload obsolete data\:
28+
DataSourceCaption_BTN_Reload=Reload

0 commit comments

Comments
 (0)