You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by da...@apache.org on 2009/04/22 17:19:39 UTC
svn commit: r767564 - in /cxf/dosgi/trunk:
discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/
discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/
dsw/cxf-dsw/src/main/java...
Author: davidb
Date: Wed Apr 22 15:19:37 2009
New Revision: 767564
URL: http://svn.apache.org/viewvc?rev=767564&view=rev
Log:
[Discovery] Support for modifiedService and removedService callbacks on the ServicePublication service.
Unit tests included.
Modified:
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishToZooKeeperCustomizer.java
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishToZooKeeperCustomizerTest.java
cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/hooks/AbstractClientHook.java
Modified: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishToZooKeeperCustomizer.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishToZooKeeperCustomizer.java?rev=767564&r1=767563&r2=767564&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishToZooKeeperCustomizer.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishToZooKeeperCustomizer.java Wed Apr 22 15:19:37 2009
@@ -54,8 +54,7 @@
try {
Object obj = bundleContext.getService(sr);
Collection<String> interfaces = Util.getMultiValueProperty(sr.getProperty("service.interface"));
- String endpoint = sr.getProperty("osgi.remote.endpoint.location").toString();
- String endpointKey = getKey(endpoint);
+ String endpointKey = getKey(sr.getProperty("osgi.remote.endpoint.location").toString());
for (String name : interfaces) {
String path = Util.getZooKeeperPath(name);
@@ -68,26 +67,30 @@
}
return obj;
} catch (Exception ex) {
- LOG.log(Level.SEVERE, "Exception while processing a ServicePublication.", ex);
+ LOG.log(Level.SEVERE, "Exception while processing the addition of a ServicePublication.", ex);
return null;
}
}
public void modifiedService(ServiceReference sr, Object obj) {
- // TODO Auto-generated method stub
-
+ removedService(sr, obj);
+ addingService(sr);
}
public void removedService(ServiceReference sr, Object obj) {
-// Collection<String> interfaces = Util.getMultiValueProperty(sr.getProperty("service.interface"));
-// String endpoint = sr.getProperty("osgi.remote.endpoint.location").toString();
-// String endpointKey = getKey(endpoint);
-//
-// for (String name : interfaces) {
-//
-// }
-// zookeeper.delete(fullPath, -1);
-
+ try {
+ Collection<String> interfaces = Util.getMultiValueProperty(sr.getProperty("service.interface"));
+ String endpointKey = getKey(sr.getProperty("osgi.remote.endpoint.location").toString());
+
+ for (String name : interfaces) {
+ String path = Util.getZooKeeperPath(name);
+ String fullPath = path + '/' + endpointKey;
+ LOG.info("Removing ZooKeeper node: " + fullPath);
+ zookeeper.delete(fullPath, -1);
+ }
+ } catch (Exception ex) {
+ LOG.log(Level.SEVERE, "Exception while processing the removal of a ServicePublication.", ex);
+ }
}
void ensurePath(String path) throws KeeperException, InterruptedException {
Modified: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishToZooKeeperCustomizerTest.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishToZooKeeperCustomizerTest.java?rev=767564&r1=767563&r2=767564&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishToZooKeeperCustomizerTest.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/PublishToZooKeeperCustomizerTest.java Wed Apr 22 15:19:37 2009
@@ -21,6 +21,9 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.net.InetAddress;
+import java.net.URISyntaxException;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Hashtable;
@@ -32,6 +35,7 @@
import junit.framework.TestCase;
import org.apache.zookeeper.CreateMode;
+import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.data.ACL;
@@ -40,6 +44,7 @@
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.discovery.ServicePublication;
+import org.springframework.osgi.service.importer.support.ServiceReferenceEditor;
public class PublishToZooKeeperCustomizerTest extends TestCase {
public void testAddingService() throws Exception {
@@ -113,6 +118,57 @@
EasyMock.verify(zk);
}
+ public void testRemovedService() throws Exception {
+ BundleContext bc = EasyMock.createMock(BundleContext.class);
+ EasyMock.replay(bc);
+
+ String endpoint = "http://localhost:2991/123";
+ ServiceReference sr = EasyMock.createMock(ServiceReference.class);
+ EasyMock.expect(sr.getProperty("service.interface")).andReturn(Runnable.class.getName());
+ EasyMock.expect(sr.getProperty("osgi.remote.endpoint.location")).andReturn(endpoint);
+ EasyMock.replay(sr);
+
+ ZooKeeper zk = EasyMock.createMock(ZooKeeper.class);
+ zk.delete(Util.getZooKeeperPath(Runnable.class.getName()) + "/" +
+ PublishToZooKeeperCustomizer.getKey(endpoint), -1);
+ EasyMock.replay(zk);
+
+ PublishToZooKeeperCustomizer pc = new PublishToZooKeeperCustomizer(null, zk);
+ pc.removedService(sr, null);
+
+ EasyMock.verify(bc);
+ EasyMock.verify(sr);
+ EasyMock.verify(zk);
+ }
+
+ public void testModifiedService() {
+ final List<Object> actual = new ArrayList<Object>();
+ PublishToZooKeeperCustomizer pc = new PublishToZooKeeperCustomizer(null, null) {
+ @Override
+ public Object addingService(ServiceReference sr) {
+ actual.add("add");
+ actual.add(sr);
+ return null;
+ }
+
+ @Override
+ public void removedService(ServiceReference sr, Object obj) {
+ actual.add("remove");
+ actual.add(sr);
+ actual.add(obj);
+ }
+ };
+
+ ServiceReference sr = EasyMock.createMock(ServiceReference.class);
+ Object obj = new Object();
+
+ assertEquals("Precondition failed", 0, actual.size());
+ pc.modifiedService(sr, obj);
+
+ List<Object> expected = Arrays.asList("remove", sr, obj, "add", sr);
+ assertEquals(expected, actual);
+ }
+
public void testEnsurePath() throws Exception {
ZooKeeper zk = EasyMock.createStrictMock(ZooKeeper.class);
EasyMock.expect(zk.exists((String) EasyMock.anyObject(), EasyMock.anyBoolean())).andReturn(null);
Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/hooks/AbstractClientHook.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/hooks/AbstractClientHook.java?rev=767564&r1=767563&r2=767564&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/hooks/AbstractClientHook.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/hooks/AbstractClientHook.java Wed Apr 22 15:19:37 2009
@@ -75,7 +75,7 @@
ServiceEndpointDescription sd =
notification.getServiceEndpointDescription();
if (sd.getProperty(Constants.REMOTE_INTERFACES_PROPERTY) == null) {
- LOG.info("not proxifying service, enabling property unset: "
+ LOG.info("not proxifying service, enabling property not set: "
+ Constants.REMOTE_INTERFACES_PROPERTY);
return;
}