Index: osgi-javaee/osgi-cdi/src/main/java/org/glassfish/osgicdi/impl/OSGiServiceExtension.java =================================================================== --- osgi-javaee/osgi-cdi/src/main/java/org/glassfish/osgicdi/impl/OSGiServiceExtension.java (revision 44595) +++ osgi-javaee/osgi-cdi/src/main/java/org/glassfish/osgicdi/impl/OSGiServiceExtension.java (working copy) @@ -42,10 +42,12 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; @@ -197,12 +199,22 @@ */ private void addBean(AfterBeanDiscovery abd, final Type type, final Set injectionPoints) { + List registeredBeans = new ArrayList(); for (Iterator iterator = injectionPoints.iterator(); iterator .hasNext();) { final InjectionPoint svcInjectionPoint = iterator.next(); - System.out.println(" --- Adding an OSGi service BEAN " - + type + " for " + svcInjectionPoint); - abd.addBean(new OSGiServiceBean(svcInjectionPoint)); + if (!registeredBeans.contains(svcInjectionPoint.getAnnotated().getAnnotation(OSGiService.class))) { + debug(" --- Adding an OSGi service BEAN " + + type + " for " + svcInjectionPoint); + abd.addBean(new OSGiServiceBean(svcInjectionPoint)); + registeredBeans.add(svcInjectionPoint.getAnnotated().getAnnotation(OSGiService.class)); + } else { + debug(" --- NOT Adding an OSGi service BEAN " + + type + " for " + svcInjectionPoint + + "as there has already been one registered for" + + svcInjectionPoint.getAnnotated().getAnnotation(OSGiService.class)); + + } } } Index: osgi-javaee/osgi-cdi/src/main/java/org/glassfish/osgicdi/impl/OSGiServiceFactory.java =================================================================== --- osgi-javaee/osgi-cdi/src/main/java/org/glassfish/osgicdi/impl/OSGiServiceFactory.java (revision 44595) +++ osgi-javaee/osgi-cdi/src/main/java/org/glassfish/osgicdi/impl/OSGiServiceFactory.java (working copy) @@ -125,14 +125,14 @@ debug("service obtained from tracker" + service); if (service == null) { throw new ServiceUnavailableException( - "Service" + (((Class)serviceType).getName()) + "Unavailable", + "Service " + (((Class)serviceType).getName()) + " Unavailable", ServiceException.SUBCLASSED, null); } return service; } catch (InterruptedException e) { e.printStackTrace(); throw new ServiceUnavailableException("" + - "Service" + (((Class)serviceType).getName()) + "Unavailable", + "Service " + (((Class)serviceType).getName()) + " Unavailable", ServiceException.SUBCLASSED, e); } finally { if (st != null) st.close(); @@ -283,8 +283,8 @@ private void throwServiceUnavailable() { Type serviceType = svcInjectionPoint.getType(); - throw new ServiceUnavailableException("Service" - + (((Class) serviceType).getName()) + "Unavailable", + throw new ServiceUnavailableException("Service " + + (((Class) serviceType).getName()) + " Unavailable", ServiceException.SUBCLASSED, null); }