diff --git a/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/MessageSource.java b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/MessageSource.java new file mode 100644 index 00000000..b8e51109 --- /dev/null +++ b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/MessageSource.java @@ -0,0 +1,6 @@ +package org.ops4j.pax.cdi.sample6; + + +public interface MessageSource extends MessageProducer { + +} diff --git a/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/AlternativeMessageSourceImpl.java b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/AlternativeMessageSourceImpl.java new file mode 100644 index 00000000..a36542c6 --- /dev/null +++ b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/AlternativeMessageSourceImpl.java @@ -0,0 +1,31 @@ +/* + * Copyright 2015 Harald Wellmann. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.ops4j.pax.cdi.sample6.impl; + +import javax.enterprise.inject.Alternative; + +import org.ops4j.pax.cdi.sample6.MessageSource; + +@Alternative +public class AlternativeMessageSourceImpl implements MessageSource { + + @Override + public String getMessage() { + return "Quod erat demonstrandum."; + } +} diff --git a/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/MessageProducerImpl.java b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/MessageProducerImpl.java index dd157f33..4fa0cf87 100644 --- a/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/MessageProducerImpl.java +++ b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/MessageProducerImpl.java @@ -17,14 +17,20 @@ */ package org.ops4j.pax.cdi.sample6.impl; +import javax.inject.Inject; + import org.ops4j.pax.cdi.api.OsgiServiceProvider; import org.ops4j.pax.cdi.sample6.MessageProducer; +import org.ops4j.pax.cdi.sample6.MessageSource; @OsgiServiceProvider public class MessageProducerImpl implements MessageProducer { + @Inject + private MessageSource source; + @Override public String getMessage() { - return "Quod erat demonstrandum."; + return source.getMessage(); } } diff --git a/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/MessageSourceImpl.java b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/MessageSourceImpl.java new file mode 100644 index 00000000..7c8b8816 --- /dev/null +++ b/pax-cdi-samples/pax-cdi-sample6/src/main/java/org/ops4j/pax/cdi/sample6/impl/MessageSourceImpl.java @@ -0,0 +1,29 @@ +/* + * Copyright 2015 Harald Wellmann. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.ops4j.pax.cdi.sample6.impl; + +import org.ops4j.pax.cdi.sample6.MessageSource; + + +public class MessageSourceImpl implements MessageSource { + + @Override + public String getMessage() { + return "Tertium non datur."; + } +} diff --git a/pax-cdi-samples/pax-cdi-sample6/src/main/resources/META-INF/beans.xml b/pax-cdi-samples/pax-cdi-sample6/src/main/resources/META-INF/beans.xml index e69de29b..53d88167 100644 --- a/pax-cdi-samples/pax-cdi-sample6/src/main/resources/META-INF/beans.xml +++ b/pax-cdi-samples/pax-cdi-sample6/src/main/resources/META-INF/beans.xml @@ -0,0 +1,7 @@ + + + + org.ops4j.pax.cdi.sample6.impl.AlternativeMessageSourceImpl + + diff --git a/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanBundleFilter.java b/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanBundleFilter.java index 22633b58..5dac22b3 100644 --- a/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanBundleFilter.java +++ b/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanBundleFilter.java @@ -18,8 +18,10 @@ package org.ops4j.pax.cdi.spi.scan; import java.net.URL; +import java.util.ArrayList; import java.util.Dictionary; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.ops4j.pax.cdi.spi.BeanBundles; @@ -45,8 +47,9 @@ public boolean accept(Bundle providerBundle, String className) { return true; case NONE: return false; + default: + throw new IllegalArgumentException(descriptor.getBeanDiscoveryMode().toString()); } - return false; } public BeanDescriptor findDescriptor(Bundle providerBundle) { @@ -85,4 +88,12 @@ private boolean isWebBundle(Bundle bundle) { String contextPath = headers.get("Web-ContextPath"); return (contextPath != null); } + + public List getBeanDescriptors() { + List urls = new ArrayList<>(); + for (BeanDescriptor descriptor : descriptorMap.values()) { + urls.add(descriptor.getUrl()); + } + return urls; + } } diff --git a/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanScanner.java b/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanScanner.java index 2276b16b..f28676f8 100644 --- a/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanScanner.java +++ b/pax-cdi-spi/src/main/java/org/ops4j/pax/cdi/spi/scan/BeanScanner.java @@ -94,8 +94,8 @@ public Set getBeanClasses() { * @return unmodifiable set */ public Set getBeanDescriptors() { - // FIXME - return Collections.emptySet(); + Set urls = new HashSet<>(filter.getBeanDescriptors()); + return Collections.unmodifiableSet(urls); } /**