You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by am...@apache.org on 2016/01/29 17:15:08 UTC
[5/5] cxf-dosgi git commit: Fix greeter sample issues: - many dialogs
created but never disposed (resource leak) - thread never ends (thread leak)
- dialog still shown after service bundle is stopped - dialog still shown
after client bundle is stopped
Fix greeter sample issues:
- many dialogs created but never disposed (resource leak)
- thread never ends (thread leak)
- dialog still shown after service bundle is stopped
- dialog still shown after client bundle is stopped
Project: http://git-wip-us.apache.org/repos/asf/cxf-dosgi/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf-dosgi/commit/1e102fb8
Tree: http://git-wip-us.apache.org/repos/asf/cxf-dosgi/tree/1e102fb8
Diff: http://git-wip-us.apache.org/repos/asf/cxf-dosgi/diff/1e102fb8
Branch: refs/heads/master
Commit: 1e102fb85054dc958bed74c32f6e7b32c88a55f9
Parents: 2f2bb26
Author: Amichai Rothman <am...@apache.org>
Authored: Fri Jan 29 17:56:15 2016 +0200
Committer: Amichai Rothman <am...@apache.org>
Committed: Fri Jan 29 17:56:15 2016 +0200
----------------------------------------------------------------------
.../dosgi/samples/greeter/client/Activator.java | 26 ++++++++++++++------
.../samples/greeter/client/GreeterDialog.java | 4 +++
2 files changed, 23 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/1e102fb8/samples/greeter/client/src/main/java/org/apache/cxf/dosgi/samples/greeter/client/Activator.java
----------------------------------------------------------------------
diff --git a/samples/greeter/client/src/main/java/org/apache/cxf/dosgi/samples/greeter/client/Activator.java b/samples/greeter/client/src/main/java/org/apache/cxf/dosgi/samples/greeter/client/Activator.java
index 78b9fe1..121573e 100644
--- a/samples/greeter/client/src/main/java/org/apache/cxf/dosgi/samples/greeter/client/Activator.java
+++ b/samples/greeter/client/src/main/java/org/apache/cxf/dosgi/samples/greeter/client/Activator.java
@@ -19,6 +19,7 @@
package org.apache.cxf.dosgi.samples.greeter.client;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.cxf.dosgi.samples.greeter.GreeterData;
import org.apache.cxf.dosgi.samples.greeter.GreeterException;
@@ -32,15 +33,25 @@ import org.osgi.util.tracker.ServiceTracker;
public class Activator implements BundleActivator {
private ServiceTracker<GreeterService, GreeterService> tracker;
+ private ConcurrentHashMap<GreeterService, GreeterDialog> dialogs =
+ new ConcurrentHashMap<GreeterService, GreeterDialog>();
public void start(final BundleContext bc) {
tracker = new ServiceTracker<GreeterService, GreeterService>(bc, GreeterService.class, null) {
@Override
public GreeterService addingService(ServiceReference<GreeterService> reference) {
GreeterService service = super.addingService(reference);
+ dialogs.put(service, new GreeterDialog());
useService(service);
return service;
}
+
+ @Override
+ public void removedService(ServiceReference<GreeterService> reference, GreeterService service) {
+ super.removedService(reference, service);
+ GreeterDialog dialog = dialogs.remove(service);
+ dialog.dispose();
+ }
};
tracker.open();
}
@@ -56,8 +67,15 @@ public class Activator implements BundleActivator {
private void greeterUI(final GreeterService greeter) {
while (true) {
+ GreeterDialog dialog = dialogs.get(greeter);
+ if (dialog == null) {
+ return; // exit thread if service is removed
+ }
System.out.println("*** Opening greeter client dialog ***");
- Object gd = getGreeterData();
+ dialog.resetSelection();
+ dialog.setVisible(true); // blocks until dismissed
+ Object gd = dialog.getSelection();
+
if (gd instanceof String) {
System.out.println("*** Invoking greeter ***");
Map<GreetingPhrase, String> result = greeter.greetMe((String) gd);
@@ -82,12 +100,6 @@ public class Activator implements BundleActivator {
}
}
- private static Object getGreeterData() {
- GreeterDialog gd = new GreeterDialog();
- gd.setVisible(true);
- return gd.getSelection();
- }
-
public void stop(BundleContext bc) throws Exception {
tracker.close();
}
http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/1e102fb8/samples/greeter/client/src/main/java/org/apache/cxf/dosgi/samples/greeter/client/GreeterDialog.java
----------------------------------------------------------------------
diff --git a/samples/greeter/client/src/main/java/org/apache/cxf/dosgi/samples/greeter/client/GreeterDialog.java b/samples/greeter/client/src/main/java/org/apache/cxf/dosgi/samples/greeter/client/GreeterDialog.java
index 3983a82..fa48792 100644
--- a/samples/greeter/client/src/main/java/org/apache/cxf/dosgi/samples/greeter/client/GreeterDialog.java
+++ b/samples/greeter/client/src/main/java/org/apache/cxf/dosgi/samples/greeter/client/GreeterDialog.java
@@ -186,6 +186,10 @@ public class GreeterDialog extends JDialog {
return complexPanel;
}
+ public void resetSelection() {
+ selection = null;
+ }
+
public Object getSelection() {
return selection;
}