You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2013/01/18 02:57:33 UTC
svn commit: r1435006 - in /camel/trunk/components/camel-core-osgi/src:
main/java/org/apache/camel/core/osgi/ test/java/org/apache/camel/core/osgi/
Author: ningjiang
Date: Fri Jan 18 01:57:33 2013
New Revision: 1435006
URL: http://svn.apache.org/viewvc?rev=1435006&view=rev
Log:
CAMEL-5969, CAMEL-5972 added the OsgiiServiceRegistry.lookupByType() and supports to lookup service with filter on name=blabla
Modified:
camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java
camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java
camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java
Modified: camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java?rev=1435006&r1=1435005&r2=1435006&view=diff
==============================================================================
--- camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java (original)
+++ camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java Fri Jan 18 01:57:33 2013
@@ -17,6 +17,7 @@
package org.apache.camel.core.osgi;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Map;
import java.util.Queue;
import java.util.concurrent.ConcurrentHashMap;
@@ -25,6 +26,7 @@ import java.util.concurrent.ConcurrentLi
import org.apache.camel.CamelContext;
import org.apache.camel.spi.Registry;
import org.apache.camel.support.LifecycleStrategySupport;
+import org.apache.camel.util.ObjectHelper;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
@@ -34,21 +36,46 @@ import org.osgi.framework.ServiceReferen
public class OsgiServiceRegistry extends LifecycleStrategySupport implements Registry {
private final BundleContext bundleContext;
private final Map<String, Object> serviceCacheMap = new ConcurrentHashMap<String, Object>();
- private final Queue<ServiceReference> serviceReferenceQueue = new ConcurrentLinkedQueue<ServiceReference>();
+ private final Map<Class<?>, Map<String, Object>> typeCacheMap = new ConcurrentHashMap<Class<?>, Map<String, Object>>();
+ private final Queue<ServiceReference<?>> serviceReferenceQueue = new ConcurrentLinkedQueue<ServiceReference<?>>();
public OsgiServiceRegistry(BundleContext bc) {
bundleContext = bc;
}
+ /**
+ * Support to lookup the Object with filter with the (name=NAME) and class type
+ *
+ */
public <T> T lookup(String name, Class<T> type) {
- Object service = lookup(name);
+ Object service = serviceCacheMap.get(name);
+ if (service == null) {
+ ServiceReference<?> sr = null;
+ try {
+ ServiceReference<?>[] refs = bundleContext.getServiceReferences(type.getName(), "(name=" + name + ")");
+ if (refs != null && refs.length > 0) {
+ // just return the first one
+ sr = refs[0];
+ }
+ serviceReferenceQueue.add(sr);
+ service = bundleContext.getService(sr);
+ if (service != null) {
+ serviceCacheMap.put(name, service);
+ }
+ } catch (Exception ex) {
+ throw ObjectHelper.wrapRuntimeCamelException(ex);
+ }
+ }
return type.cast(service);
}
+ /**
+ * It's only support to look up the ServiceReference with Class name
+ */
public Object lookup(String name) {
Object service = serviceCacheMap.get(name);
if (service == null) {
- ServiceReference sr = bundleContext.getServiceReference(name);
+ ServiceReference<?> sr = bundleContext.getServiceReference(name);
if (sr != null) {
// Need to keep the track of Service
// and call ungetService when the camel context is closed
@@ -63,14 +90,31 @@ public class OsgiServiceRegistry extends
}
public <T> Map<String, T> lookupByType(Class<T> type) {
- // not implemented so we return an empty map
- return Collections.<String, T>emptyMap();
+ Map<String, T> result = new HashMap<String, T>();
+ try {
+ ServiceReference<?>[] refs = bundleContext.getAllServiceReferences(type.getName(), null);
+ if (refs != null) {
+ for (ServiceReference<?> sr : refs) {
+ serviceReferenceQueue.add(sr);
+ Object service = bundleContext.getService(sr);
+ if (service != null) {
+ String name = (String)sr.getProperty("name");
+ if (name != null) {
+ result.put(name , type.cast(service));
+ }
+ }
+ }
+ }
+ } catch (Exception ex) {
+ throw ObjectHelper.wrapRuntimeCamelException(ex);
+ }
+ return result;
}
@Override
public void onContextStop(CamelContext context) {
// Unget the OSGi service
- ServiceReference sr = serviceReferenceQueue.poll();
+ ServiceReference<?> sr = serviceReferenceQueue.poll();
while (sr != null) {
bundleContext.ungetService(sr);
sr = serviceReferenceQueue.poll();
Modified: camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java?rev=1435006&r1=1435005&r2=1435006&view=diff
==============================================================================
--- camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java (original)
+++ camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java Fri Jan 18 01:57:33 2013
@@ -16,6 +16,10 @@
*/
package org.apache.camel.core.osgi;
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import com.sun.org.apache.xml.internal.security.encryption.Reference;
import org.apache.camel.CamelContext;
import org.apache.camel.Component;
import org.apache.camel.component.file.FileComponent;
@@ -26,8 +30,10 @@ import org.apache.camel.spi.Language;
import org.apache.camel.spi.LanguageResolver;
import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
+import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.springframework.osgi.mock.MockBundleContext;
+import org.springframework.osgi.mock.MockServiceReference;
public class CamelMockBundleContext extends MockBundleContext {
@@ -61,5 +67,14 @@ public class CamelMockBundleContext exte
return null;
}
}
-
+
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ public ServiceReference[] getAllServiceReferences(String clazz, String filter) throws InvalidSyntaxException {
+ MockServiceReference reference = new MockServiceReference(getBundle(), new String[] {clazz});
+ // setup the name property with the class name
+ Dictionary properties = new Hashtable();
+ properties.put("name", clazz);
+ reference.setProperties(properties);
+ return new ServiceReference[] {reference};
+ }
}
Modified: camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java?rev=1435006&r1=1435005&r2=1435006&view=diff
==============================================================================
--- camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java (original)
+++ camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java Fri Jan 18 01:57:33 2013
@@ -16,6 +16,8 @@
*/
package org.apache.camel.core.osgi;
+import java.util.Map;
+
import org.apache.camel.core.osgi.test.MyService;
import org.apache.camel.impl.DefaultCamelContext;
import org.junit.Test;
@@ -32,9 +34,11 @@ public class ServiceRegistryTest extends
Object service = context.getRegistry().lookup(MyService.class.getName());
assertNotNull("MyService should not be null", service);
+ assertTrue("It should be the instance of MyService ", service instanceof MyService);
- service = context.getRegistry().lookupByType(MyService.class);
- assertNotNull("MyService should not be null", service);
+ Map<String, MyService> collection = context.getRegistry().lookupByType(MyService.class);
+ assertNotNull("MyService should not be null", collection);
+ assertNotNull("There should have one MyService.", collection.get(MyService.class.getName()));
context.stop();
}
Re: svn commit: r1435006 - in
/camel/trunk/components/camel-core-osgi/src:
main/java/org/apache/camel/core/osgi/
test/java/org/apache/camel/core/osgi/
Posted by Willem jiang <wi...@gmail.com>.
Hi Claus,
I'm my bad, I should not import the class, and it is useless.
I will commit a quick fix for it shortly.
Thanks for pointing that out.
--
Willem Jiang
Red Hat, Inc.
FuseSource is now part of Red Hat
Web: http://www.fusesource.com | http://www.redhat.com
Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/) (English)
http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese)
Twitter: willemjiang
Weibo: 姜宁willem
On Friday, January 18, 2013 at 3:03 PM, Claus Ibsen wrote:
> On Fri, Jan 18, 2013 at 2:57 AM, <ningjiang@apache.org (mailto:ningjiang@apache.org)> wrote:
> > Author: ningjiang
> > Date: Fri Jan 18 01:57:33 2013
> > New Revision: 1435006
> >
> > URL: http://svn.apache.org/viewvc?rev=1435006&view=rev
> > Log:
> > CAMEL-5969, CAMEL-5972 added the OsgiiServiceRegistry.lookupByType() and supports to lookup service with filter on name=blabla
> >
> > Modified:
> > camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java
> > camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java
> > camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java
> >
> > Modified: camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java
> > URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java?rev=1435006&r1=1435005&r2=1435006&view=diff
> > ==============================================================================
> > --- camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java (original)
> > +++ camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java Fri Jan 18 01:57:33 2013
> > @@ -17,6 +17,7 @@
> > package org.apache.camel.core.osgi;
> >
> > import java.util.Collections;
> > +import java.util.HashMap;
> > import java.util.Map;
> > import java.util.Queue;
> > import java.util.concurrent.ConcurrentHashMap;
> > @@ -25,6 +26,7 @@ import java.util.concurrent.ConcurrentLi
> > import org.apache.camel.CamelContext;
> > import org.apache.camel.spi.Registry;
> > import org.apache.camel.support.LifecycleStrategySupport;
> > +import org.apache.camel.util.ObjectHelper;
> > import org.osgi.framework.BundleContext;
> > import org.osgi.framework.ServiceReference;
> >
> > @@ -34,21 +36,46 @@ import org.osgi.framework.ServiceReferen
> > public class OsgiServiceRegistry extends LifecycleStrategySupport implements Registry {
> > private final BundleContext bundleContext;
> > private final Map<String, Object> serviceCacheMap = new ConcurrentHashMap<String, Object>();
> > - private final Queue<ServiceReference> serviceReferenceQueue = new ConcurrentLinkedQueue<ServiceReference>();
> > + private final Map<Class<?>, Map<String, Object>> typeCacheMap = new ConcurrentHashMap<Class<?>, Map<String, Object>>();
> > + private final Queue<ServiceReference<?>> serviceReferenceQueue = new ConcurrentLinkedQueue<ServiceReference<?>>();
> >
> > public OsgiServiceRegistry(BundleContext bc) {
> > bundleContext = bc;
> > }
> >
> > + /**
> > + * Support to lookup the Object with filter with the (name=NAME) and class type
> > + *
> > + */
> > public <T> T lookup(String name, Class<T> type) {
> > - Object service = lookup(name);
> > + Object service = serviceCacheMap.get(name);
> > + if (service == null) {
> > + ServiceReference<?> sr = null;
> > + try {
> > + ServiceReference<?>[] refs = bundleContext.getServiceReferences(type.getName(), "(name=" + name + ")");
> > + if (refs != null && refs.length > 0) {
> > + // just return the first one
> > + sr = refs[0];
> > + }
> > + serviceReferenceQueue.add(sr);
> > + service = bundleContext.getService(sr);
> > + if (service != null) {
> > + serviceCacheMap.put(name, service);
> > + }
> > + } catch (Exception ex) {
> > + throw ObjectHelper.wrapRuntimeCamelException(ex);
> > + }
> > + }
> > return type.cast(service);
> > }
> >
> > + /**
> > + * It's only support to look up the ServiceReference with Class name
> > + */
> > public Object lookup(String name) {
> > Object service = serviceCacheMap.get(name);
> > if (service == null) {
> > - ServiceReference sr = bundleContext.getServiceReference(name);
> > + ServiceReference<?> sr = bundleContext.getServiceReference(name);
> > if (sr != null) {
> > // Need to keep the track of Service
> > // and call ungetService when the camel context is closed
> > @@ -63,14 +90,31 @@ public class OsgiServiceRegistry extends
> > }
> >
> > public <T> Map<String, T> lookupByType(Class<T> type) {
> > - // not implemented so we return an empty map
> > - return Collections.<String, T>emptyMap();
> > + Map<String, T> result = new HashMap<String, T>();
> > + try {
> > + ServiceReference<?>[] refs = bundleContext.getAllServiceReferences(type.getName(), null);
> > + if (refs != null) {
> > + for (ServiceReference<?> sr : refs) {
> > + serviceReferenceQueue.add(sr);
> > + Object service = bundleContext.getService(sr);
> > + if (service != null) {
> > + String name = (String)sr.getProperty("name");
> > + if (name != null) {
> > + result.put(name , type.cast(service));
> > + }
> > + }
> > + }
> > + }
> > + } catch (Exception ex) {
> > + throw ObjectHelper.wrapRuntimeCamelException(ex);
> > + }
> > + return result;
> > }
> >
> > @Override
> > public void onContextStop(CamelContext context) {
> > // Unget the OSGi service
> > - ServiceReference sr = serviceReferenceQueue.poll();
> > + ServiceReference<?> sr = serviceReferenceQueue.poll();
> > while (sr != null) {
> > bundleContext.ungetService(sr);
> > sr = serviceReferenceQueue.poll();
> >
> > Modified: camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java
> > URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java?rev=1435006&r1=1435005&r2=1435006&view=diff
> > ==============================================================================
> > --- camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java (original)
> > +++ camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java Fri Jan 18 01:57:33 2013
> > @@ -16,6 +16,10 @@
> > */
> > package org.apache.camel.core.osgi;
> >
> > +import java.util.Dictionary;
> > +import java.util.Hashtable;
> > +
> > +import com.sun.org.apache.xml.internal.security.encryption.Reference;
>
>
>
> This is a mistake it should not be this internal Reference class from
> SUN that should be imported.
> This causes the CI server to fail building the code.
>
>
>
>
> > import org.apache.camel.CamelContext;
> > import org.apache.camel.Component;
> > import org.apache.camel.component.file.FileComponent;
> > @@ -26,8 +30,10 @@ import org.apache.camel.spi.Language;
> > import org.apache.camel.spi.LanguageResolver;
> > import org.osgi.framework.Bundle;
> > import org.osgi.framework.Constants;
> > +import org.osgi.framework.InvalidSyntaxException;
> > import org.osgi.framework.ServiceReference;
> > import org.springframework.osgi.mock.MockBundleContext;
> > +import org.springframework.osgi.mock.MockServiceReference;
> >
> > public class CamelMockBundleContext extends MockBundleContext {
> >
> > @@ -61,5 +67,14 @@ public class CamelMockBundleContext exte
> > return null;
> > }
> > }
> > -
> > +
> > + @SuppressWarnings({"rawtypes", "unchecked"})
> > + public ServiceReference[] getAllServiceReferences(String clazz, String filter) throws InvalidSyntaxException {
> > + MockServiceReference reference = new MockServiceReference(getBundle(), new String[] {clazz});
> > + // setup the name property with the class name
> > + Dictionary properties = new Hashtable();
> > + properties.put("name", clazz);
> > + reference.setProperties(properties);
> > + return new ServiceReference[] {reference};
> > + }
> > }
> >
> > Modified: camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java
> > URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java?rev=1435006&r1=1435005&r2=1435006&view=diff
> > ==============================================================================
> > --- camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java (original)
> > +++ camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java Fri Jan 18 01:57:33 2013
> > @@ -16,6 +16,8 @@
> > */
> > package org.apache.camel.core.osgi;
> >
> > +import java.util.Map;
> > +
> > import org.apache.camel.core.osgi.test.MyService;
> > import org.apache.camel.impl.DefaultCamelContext;
> > import org.junit.Test;
> > @@ -32,9 +34,11 @@ public class ServiceRegistryTest extends
> >
> > Object service = context.getRegistry().lookup(MyService.class.getName());
> > assertNotNull("MyService should not be null", service);
> > + assertTrue("It should be the instance of MyService ", service instanceof MyService);
> >
> > - service = context.getRegistry().lookupByType(MyService.class);
> > - assertNotNull("MyService should not be null", service);
> > + Map<String, MyService> collection = context.getRegistry().lookupByType(MyService.class);
> > + assertNotNull("MyService should not be null", collection);
> > + assertNotNull("There should have one MyService.", collection.get(MyService.class.getName()));
> > context.stop();
> > }
>
>
>
>
>
> --
> Claus Ibsen
> -----------------
> Red Hat, Inc.
> FuseSource is now part of Red Hat
> Email: cibsen@redhat.com (mailto:cibsen@redhat.com)
> Web: http://fusesource.com
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen
Re: svn commit: r1435006 - in /camel/trunk/components/camel-core-osgi/src:
main/java/org/apache/camel/core/osgi/ test/java/org/apache/camel/core/osgi/
Posted by Claus Ibsen <cl...@gmail.com>.
On Fri, Jan 18, 2013 at 2:57 AM, <ni...@apache.org> wrote:
> Author: ningjiang
> Date: Fri Jan 18 01:57:33 2013
> New Revision: 1435006
>
> URL: http://svn.apache.org/viewvc?rev=1435006&view=rev
> Log:
> CAMEL-5969, CAMEL-5972 added the OsgiiServiceRegistry.lookupByType() and supports to lookup service with filter on name=blabla
>
> Modified:
> camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java
> camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java
> camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java
>
> Modified: camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java
> URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java?rev=1435006&r1=1435005&r2=1435006&view=diff
> ==============================================================================
> --- camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java (original)
> +++ camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiServiceRegistry.java Fri Jan 18 01:57:33 2013
> @@ -17,6 +17,7 @@
> package org.apache.camel.core.osgi;
>
> import java.util.Collections;
> +import java.util.HashMap;
> import java.util.Map;
> import java.util.Queue;
> import java.util.concurrent.ConcurrentHashMap;
> @@ -25,6 +26,7 @@ import java.util.concurrent.ConcurrentLi
> import org.apache.camel.CamelContext;
> import org.apache.camel.spi.Registry;
> import org.apache.camel.support.LifecycleStrategySupport;
> +import org.apache.camel.util.ObjectHelper;
> import org.osgi.framework.BundleContext;
> import org.osgi.framework.ServiceReference;
>
> @@ -34,21 +36,46 @@ import org.osgi.framework.ServiceReferen
> public class OsgiServiceRegistry extends LifecycleStrategySupport implements Registry {
> private final BundleContext bundleContext;
> private final Map<String, Object> serviceCacheMap = new ConcurrentHashMap<String, Object>();
> - private final Queue<ServiceReference> serviceReferenceQueue = new ConcurrentLinkedQueue<ServiceReference>();
> + private final Map<Class<?>, Map<String, Object>> typeCacheMap = new ConcurrentHashMap<Class<?>, Map<String, Object>>();
> + private final Queue<ServiceReference<?>> serviceReferenceQueue = new ConcurrentLinkedQueue<ServiceReference<?>>();
>
> public OsgiServiceRegistry(BundleContext bc) {
> bundleContext = bc;
> }
>
> + /**
> + * Support to lookup the Object with filter with the (name=NAME) and class type
> + *
> + */
> public <T> T lookup(String name, Class<T> type) {
> - Object service = lookup(name);
> + Object service = serviceCacheMap.get(name);
> + if (service == null) {
> + ServiceReference<?> sr = null;
> + try {
> + ServiceReference<?>[] refs = bundleContext.getServiceReferences(type.getName(), "(name=" + name + ")");
> + if (refs != null && refs.length > 0) {
> + // just return the first one
> + sr = refs[0];
> + }
> + serviceReferenceQueue.add(sr);
> + service = bundleContext.getService(sr);
> + if (service != null) {
> + serviceCacheMap.put(name, service);
> + }
> + } catch (Exception ex) {
> + throw ObjectHelper.wrapRuntimeCamelException(ex);
> + }
> + }
> return type.cast(service);
> }
>
> + /**
> + * It's only support to look up the ServiceReference with Class name
> + */
> public Object lookup(String name) {
> Object service = serviceCacheMap.get(name);
> if (service == null) {
> - ServiceReference sr = bundleContext.getServiceReference(name);
> + ServiceReference<?> sr = bundleContext.getServiceReference(name);
> if (sr != null) {
> // Need to keep the track of Service
> // and call ungetService when the camel context is closed
> @@ -63,14 +90,31 @@ public class OsgiServiceRegistry extends
> }
>
> public <T> Map<String, T> lookupByType(Class<T> type) {
> - // not implemented so we return an empty map
> - return Collections.<String, T>emptyMap();
> + Map<String, T> result = new HashMap<String, T>();
> + try {
> + ServiceReference<?>[] refs = bundleContext.getAllServiceReferences(type.getName(), null);
> + if (refs != null) {
> + for (ServiceReference<?> sr : refs) {
> + serviceReferenceQueue.add(sr);
> + Object service = bundleContext.getService(sr);
> + if (service != null) {
> + String name = (String)sr.getProperty("name");
> + if (name != null) {
> + result.put(name , type.cast(service));
> + }
> + }
> + }
> + }
> + } catch (Exception ex) {
> + throw ObjectHelper.wrapRuntimeCamelException(ex);
> + }
> + return result;
> }
>
> @Override
> public void onContextStop(CamelContext context) {
> // Unget the OSGi service
> - ServiceReference sr = serviceReferenceQueue.poll();
> + ServiceReference<?> sr = serviceReferenceQueue.poll();
> while (sr != null) {
> bundleContext.ungetService(sr);
> sr = serviceReferenceQueue.poll();
>
> Modified: camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java
> URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java?rev=1435006&r1=1435005&r2=1435006&view=diff
> ==============================================================================
> --- camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java (original)
> +++ camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/CamelMockBundleContext.java Fri Jan 18 01:57:33 2013
> @@ -16,6 +16,10 @@
> */
> package org.apache.camel.core.osgi;
>
> +import java.util.Dictionary;
> +import java.util.Hashtable;
> +
> +import com.sun.org.apache.xml.internal.security.encryption.Reference;
This is a mistake it should not be this internal Reference class from
SUN that should be imported.
This causes the CI server to fail building the code.
> import org.apache.camel.CamelContext;
> import org.apache.camel.Component;
> import org.apache.camel.component.file.FileComponent;
> @@ -26,8 +30,10 @@ import org.apache.camel.spi.Language;
> import org.apache.camel.spi.LanguageResolver;
> import org.osgi.framework.Bundle;
> import org.osgi.framework.Constants;
> +import org.osgi.framework.InvalidSyntaxException;
> import org.osgi.framework.ServiceReference;
> import org.springframework.osgi.mock.MockBundleContext;
> +import org.springframework.osgi.mock.MockServiceReference;
>
> public class CamelMockBundleContext extends MockBundleContext {
>
> @@ -61,5 +67,14 @@ public class CamelMockBundleContext exte
> return null;
> }
> }
> -
> +
> + @SuppressWarnings({"rawtypes", "unchecked"})
> + public ServiceReference[] getAllServiceReferences(String clazz, String filter) throws InvalidSyntaxException {
> + MockServiceReference reference = new MockServiceReference(getBundle(), new String[] {clazz});
> + // setup the name property with the class name
> + Dictionary properties = new Hashtable();
> + properties.put("name", clazz);
> + reference.setProperties(properties);
> + return new ServiceReference[] {reference};
> + }
> }
>
> Modified: camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java
> URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java?rev=1435006&r1=1435005&r2=1435006&view=diff
> ==============================================================================
> --- camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java (original)
> +++ camel/trunk/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/ServiceRegistryTest.java Fri Jan 18 01:57:33 2013
> @@ -16,6 +16,8 @@
> */
> package org.apache.camel.core.osgi;
>
> +import java.util.Map;
> +
> import org.apache.camel.core.osgi.test.MyService;
> import org.apache.camel.impl.DefaultCamelContext;
> import org.junit.Test;
> @@ -32,9 +34,11 @@ public class ServiceRegistryTest extends
>
> Object service = context.getRegistry().lookup(MyService.class.getName());
> assertNotNull("MyService should not be null", service);
> + assertTrue("It should be the instance of MyService ", service instanceof MyService);
>
> - service = context.getRegistry().lookupByType(MyService.class);
> - assertNotNull("MyService should not be null", service);
> + Map<String, MyService> collection = context.getRegistry().lookupByType(MyService.class);
> + assertNotNull("MyService should not be null", collection);
> + assertNotNull("There should have one MyService.", collection.get(MyService.class.getName()));
> context.stop();
> }
>
>
>
--
Claus Ibsen
-----------------
Red Hat, Inc.
FuseSource is now part of Red Hat
Email: cibsen@redhat.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen