diff options
| author | Markus Alexander Kuppe | 2010-06-26 11:22:44 +0000 |
|---|---|---|
| committer | Markus Alexander Kuppe | 2010-06-26 11:22:44 +0000 |
| commit | 3afbfa256cd03db8283d137e69fd97e41a5f1765 (patch) | |
| tree | 05f35b72473a1316ddc711df265250c3e7cab6f4 | |
| parent | d5c12f84eef1e8b4d7baa5d6a4eb10aaad5bebb9 (diff) | |
| download | org.eclipse.ecf-3afbfa256cd03db8283d137e69fd97e41a5f1765.tar.gz org.eclipse.ecf-3afbfa256cd03db8283d137e69fd97e41a5f1765.tar.xz org.eclipse.ecf-3afbfa256cd03db8283d137e69fd97e41a5f1765.zip | |
NEW - bug 317798: [Discovery][DNS-SD] Create/register IDiscoveryAdvertiser container/service
https://bugs.eclipse.org/bugs/show_bug.cgi?id=317798
6 files changed, 102 insertions, 52 deletions
diff --git a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/Activator.java b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/Activator.java index c3b5b5a80..338d078df 100644 --- a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/Activator.java +++ b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/Activator.java @@ -13,12 +13,12 @@ package org.eclipse.ecf.tests.provider.dnssd; import java.util.Dictionary; import java.util.Hashtable; +import org.eclipse.ecf.discovery.IDiscoveryAdvertiser; import org.eclipse.ecf.discovery.IDiscoveryLocator; import org.eclipse.ecf.provider.dnssd.IDnsSdDiscoveryConstants; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; -import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceEvent; import org.osgi.framework.ServiceListener; import org.osgi.framework.ServiceReference; @@ -29,10 +29,13 @@ public class Activator implements BundleActivator { private static Activator instance; private IDiscoveryLocator discoveryLocator; + private IDiscoveryAdvertiser discoveryAdvertiser; - private ServiceListener listener; + private ServiceListener locListener; + private ServiceListener advListener; - private final Object lock = new Object(); + private final Object locLock = new Object(); + private final Object advLock = new Object(); public Activator() { instance = this; @@ -42,61 +45,89 @@ public class Activator implements BundleActivator { * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext) */ public void start(final BundleContext context) throws Exception { - String filter = ""; - final ServiceReference configAdminServiceRef = context .getServiceReference(ConfigurationAdmin.class.getName()); - - if (configAdminServiceRef != null) { - ConfigurationAdmin configAdmin = (ConfigurationAdmin) context - .getService(configAdminServiceRef); - - Configuration config = configAdmin.createFactoryConfiguration( - DnsSdTestHelper.ECF_DISCOVERY_DNSSD, null); - Dictionary properties = new Hashtable(); - properties.put(IDnsSdDiscoveryConstants.CA_SEARCH_PATH, new String[]{DnsSdTestHelper.DOMAIN}); - properties.put(IDnsSdDiscoveryConstants.CA_RESOLVER, DnsSdTestHelper.DNS_RESOLVER); - properties.put(IDnsSdDiscoveryConstants.CA_TSIG_KEY, DnsSdTestHelper.TSIG_KEY); - properties.put(IDnsSdDiscoveryConstants.CA_TSIG_KEY_NAME, DnsSdTestHelper.TSIG_KEY_NAME); - config.update(properties); - - filter = "(" + Constants.SERVICE_PID + "=" + config.getPid() + ")"; - } else { + if (configAdminServiceRef == null) { System.err.println("You don't have config admin deployed. Some tests will fail that require configuration!"); - filter = "(" + Constants.OBJECTCLASS + "=" + IDiscoveryLocator.class.getName() + ")"; + return; } + final ConfigurationAdmin configAdmin = (ConfigurationAdmin) context.getService(configAdminServiceRef); + + Configuration config = configAdmin.createFactoryConfiguration( + DnsSdTestHelper.ECF_DISCOVERY_DNSSD + ".locator", null); + Dictionary properties = new Hashtable(); + properties.put(IDnsSdDiscoveryConstants.CA_SEARCH_PATH, new String[]{DnsSdTestHelper.DOMAIN}); + properties.put(IDnsSdDiscoveryConstants.CA_RESOLVER, DnsSdTestHelper.DNS_RESOLVER); + properties.put(IDnsSdDiscoveryConstants.CA_TSIG_KEY, DnsSdTestHelper.TSIG_KEY); + properties.put(IDnsSdDiscoveryConstants.CA_TSIG_KEY_NAME, DnsSdTestHelper.TSIG_KEY_NAME); + config.update(properties); + + String filter = "(" + Constants.SERVICE_PID + "=" + config.getPid() + ")"; // add the service listener - listener = new ServiceListener() { + locListener = new ServiceListener() { public void serviceChanged(ServiceEvent event) { switch (event.getType()) { case ServiceEvent.REGISTERED: ServiceReference serviceReference = event.getServiceReference(); discoveryLocator = (IDiscoveryLocator) context.getService(serviceReference); - synchronized (lock) { - lock.notifyAll(); + synchronized (locLock) { + locLock.notifyAll(); } } } }; - context.addServiceListener(listener, filter); + context.addServiceListener(locListener, filter); // try to get the service initially - ServiceReference[] references = null; - try { - references = context.getServiceReferences(IDiscoveryLocator.class.getName(), filter); - } catch (InvalidSyntaxException e) { - // may never happen - e.printStackTrace(); - } - if(references == null) { - return; + ServiceReference[] references = context.getServiceReferences(IDiscoveryLocator.class.getName(), filter); + if(references != null) { + for (int i = 0; i < references.length;) { + ServiceReference serviceReference = references[i]; + discoveryLocator = (IDiscoveryLocator) context.getService(serviceReference); + synchronized (locLock) { + locLock.notifyAll(); + } + } } - for (int i = 0; i < references.length;) { - ServiceReference serviceReference = references[i]; - discoveryLocator = (IDiscoveryLocator) context.getService(serviceReference); - synchronized (lock) { - lock.notifyAll(); + + + // advertiser + config = configAdmin.createFactoryConfiguration( + DnsSdTestHelper.ECF_DISCOVERY_DNSSD + ".advertiser", null); + properties = new Hashtable(); + properties.put(IDnsSdDiscoveryConstants.CA_SEARCH_PATH, new String[]{DnsSdTestHelper.DOMAIN}); + properties.put(IDnsSdDiscoveryConstants.CA_RESOLVER, DnsSdTestHelper.DNS_RESOLVER); + properties.put(IDnsSdDiscoveryConstants.CA_TSIG_KEY, DnsSdTestHelper.TSIG_KEY); + properties.put(IDnsSdDiscoveryConstants.CA_TSIG_KEY_NAME, DnsSdTestHelper.TSIG_KEY_NAME); + config.update(properties); + + filter = "(" + Constants.SERVICE_PID + "=" + config.getPid() + ")"; + + // add the service listener + advListener = new ServiceListener() { + public void serviceChanged(ServiceEvent event) { + switch (event.getType()) { + case ServiceEvent.REGISTERED: + ServiceReference serviceReference = event.getServiceReference(); + discoveryAdvertiser = (IDiscoveryAdvertiser) context.getService(serviceReference); + synchronized (advLock) { + advLock.notifyAll(); + } + } + } + }; + context.addServiceListener(advListener, filter); + + // try to get the service initially + references = context.getServiceReferences(IDiscoveryAdvertiser.class.getName(), filter); + if(references != null) { + for (int i = 0; i < references.length;) { + ServiceReference serviceReference = references[i]; + discoveryAdvertiser = (IDiscoveryAdvertiser) context.getService(serviceReference); + synchronized (advLock) { + advLock.notifyAll(); + } } } } @@ -105,9 +136,13 @@ public class Activator implements BundleActivator { * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { - if(listener != null) { - context.removeServiceListener(listener); - listener = null; + if(locListener != null) { + context.removeServiceListener(locListener); + locListener = null; + } + if(advListener != null) { + context.removeServiceListener(advListener); + advListener = null; } } @@ -118,8 +153,8 @@ public class Activator implements BundleActivator { public IDiscoveryLocator getDiscoveryLocator() { if (discoveryLocator == null) { try { - synchronized (lock) { - lock.wait(); + synchronized (locLock) { + locLock.wait(2000); // wait 2 few for config admin } } catch (InterruptedException e) { // may never happen @@ -129,4 +164,19 @@ public class Activator implements BundleActivator { } return discoveryLocator; } + + public IDiscoveryAdvertiser getDiscoveryAdvertiser() { + if (discoveryAdvertiser == null) { + try { + synchronized (advLock) { + advLock.wait(2000); // wait a few sec for config admin + } + } catch (InterruptedException e) { + // may never happen + e.printStackTrace(); + return null; + } + } + return discoveryAdvertiser; + } } diff --git a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserServiceTest.java b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserServiceTest.java index c434149d7..8f76c3c83 100644 --- a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserServiceTest.java +++ b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserServiceTest.java @@ -28,7 +28,7 @@ import org.xbill.DNS.ZoneTransferIn; public class DnsSdAdvertiserServiceTest extends AbstractDiscoveryTest { public DnsSdAdvertiserServiceTest() { - super(DnsSdTestHelper.ECF_DISCOVERY_DNSSD); + super(DnsSdTestHelper.ECF_DISCOVERY_DNSSD + ".advertiser"); setNamingAuthority(DnsSdTestHelper.NAMING_AUTH); setScope(DnsSdTestHelper.REG_DOMAIN); setServices(new String[]{DnsSdTestHelper.REG_SCHEME}); @@ -72,7 +72,7 @@ public class DnsSdAdvertiserServiceTest extends AbstractDiscoveryTest { * @see org.eclipse.ecf.tests.discovery.AbstractDiscoveryTest#getDiscoveryLocator() */ protected IDiscoveryAdvertiser getDiscoveryAdvertiser() { - return (IDiscoveryAdvertiser) Activator.getDefault().getDiscoveryLocator(); + return Activator.getDefault().getDiscoveryAdvertiser(); } /* (non-Javadoc) diff --git a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserWithoutRegister.java b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserWithoutRegister.java index b54cb2a95..70897e9eb 100644 --- a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserWithoutRegister.java +++ b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdAdvertiserWithoutRegister.java @@ -16,6 +16,6 @@ public class DnsSdAdvertiserWithoutRegister extends DiscoveryTestsWithoutRegister { public DnsSdAdvertiserWithoutRegister() { - super("ecf.discovery.dnssd.advertiser"); + super(DnsSdTestHelper.ECF_DISCOVERY_DNSSD + ".advertiser"); } } diff --git a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdDiscoveryServiceTest.java b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdDiscoveryServiceTest.java index aa981d0f7..ed736b75d 100644 --- a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdDiscoveryServiceTest.java +++ b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdDiscoveryServiceTest.java @@ -24,12 +24,12 @@ import org.eclipse.ecf.tests.discovery.DiscoveryServiceTest; public class DnsSdDiscoveryServiceTest extends DiscoveryServiceTest { public DnsSdDiscoveryServiceTest() { - this(DnsSdTestHelper.ECF_DISCOVERY_DNSSD, DnsSdTestHelper.DOMAIN, DnsSdTestHelper.SCHEME, DnsSdTestHelper.PROTO); + this(DnsSdTestHelper.ECF_DISCOVERY_DNSSD + ".locator", DnsSdTestHelper.DOMAIN, DnsSdTestHelper.SCHEME, DnsSdTestHelper.PROTO); } public DnsSdDiscoveryServiceTest(String aContainer, String aDomain, String aService, String aProtocol) { - super(DnsSdTestHelper.ECF_DISCOVERY_DNSSD); + super(aContainer); setNamingAuthority(DnsSdTestHelper.NAMING_AUTH); setScope(aDomain); setServices(new String[]{aService}); diff --git a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdDiscoveryServiceTestWithWildcards.java b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdDiscoveryServiceTestWithWildcards.java index 1f329cd6b..b8a181501 100644 --- a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdDiscoveryServiceTestWithWildcards.java +++ b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdDiscoveryServiceTestWithWildcards.java @@ -14,6 +14,6 @@ package org.eclipse.ecf.tests.provider.dnssd; public class DnsSdDiscoveryServiceTestWithWildcards extends DnsSdDiscoveryServiceTest { public DnsSdDiscoveryServiceTestWithWildcards() { - super(DnsSdTestHelper.ECF_DISCOVERY_DNSSD, DnsSdTestHelper.DOMAIN, "", ""); + super(DnsSdTestHelper.ECF_DISCOVERY_DNSSD + ".locator", DnsSdTestHelper.DOMAIN, "", ""); } } diff --git a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdDiscoveryWithoutRegistration.java b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdDiscoveryWithoutRegistration.java index 52086af82..b15d656ef 100644 --- a/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdDiscoveryWithoutRegistration.java +++ b/tests/bundles/org.eclipse.ecf.tests.provider.dnssd/src/org/eclipse/ecf/tests/provider/dnssd/DnsSdDiscoveryWithoutRegistration.java @@ -16,7 +16,7 @@ public class DnsSdDiscoveryWithoutRegistration extends DiscoveryTestsWithoutRegister { public DnsSdDiscoveryWithoutRegistration() { - super("ecf.discovery.dnssd.locator"); + super(DnsSdTestHelper.ECF_DISCOVERY_DNSSD + ".locator"); } } |
