From a38e4fc5d3998cda605e136439f2abdebd435b40 Mon Sep 17 00:00:00 2001 From: "John D. Ament" Date: Mon, 6 Mar 2017 13:34:50 -0500 Subject: [PATCH] ARTEMIS-1020 Observe process bean when finding eligible bean classes to allow producer methods. --- .../cdi/extension/ArtemisExtension.java | 18 +++--- .../client/cdi/logger/ActiveMQCDILogger.java | 6 +- .../bootstrap/CDIBootstrapProducerTest.java | 61 +++++++++++++++++++ .../artemis/cdi/bootstrap/CDIProducers.java | 35 +++++++++++ 4 files changed, 110 insertions(+), 10 deletions(-) create mode 100644 artemis-cdi-client/src/test/java/org/apache/activemq/artemis/cdi/bootstrap/CDIBootstrapProducerTest.java create mode 100644 artemis-cdi-client/src/test/java/org/apache/activemq/artemis/cdi/bootstrap/CDIProducers.java diff --git a/artemis-cdi-client/src/main/java/org/apache/artemis/client/cdi/extension/ArtemisExtension.java b/artemis-cdi-client/src/main/java/org/apache/artemis/client/cdi/extension/ArtemisExtension.java index d9a0d54e897..6f28bc20b89 100644 --- a/artemis-cdi-client/src/main/java/org/apache/artemis/client/cdi/extension/ArtemisExtension.java +++ b/artemis-cdi-client/src/main/java/org/apache/artemis/client/cdi/extension/ArtemisExtension.java @@ -22,7 +22,7 @@ import javax.enterprise.event.Observes; import javax.enterprise.inject.spi.AfterBeanDiscovery; import javax.enterprise.inject.spi.Extension; -import javax.enterprise.inject.spi.ProcessAnnotatedType; +import javax.enterprise.inject.spi.ProcessBean; import org.apache.activemq.artemis.core.config.Configuration; import org.apache.artemis.client.cdi.configuration.ArtemisClientConfiguration; @@ -33,14 +33,18 @@ public class ArtemisExtension implements Extension { private boolean foundEmbeddedConfig = false; private boolean foundConfiguration = false; - void foundClientConfig(@Observes ProcessAnnotatedType pat) { - ActiveMQCDILogger.LOGGER.discoveredConfiguration(pat); - foundConfiguration = true; + void foundClientConfig(@Observes ProcessBean processBean) { + if (processBean.getBean().getTypes().contains(ArtemisClientConfiguration.class)) { + ActiveMQCDILogger.LOGGER.discoveredConfiguration(processBean); + foundConfiguration = true; + } } - void foundEmbeddedConfig(@Observes ProcessAnnotatedType pat) { - ActiveMQCDILogger.LOGGER.discoveredClientConfiguration(pat); - foundEmbeddedConfig = true; + void foundEmbeddedConfig(@Observes ProcessBean processBean) { + if (processBean.getBean().getTypes().contains(Configuration.class)) { + ActiveMQCDILogger.LOGGER.discoveredClientConfiguration(processBean); + foundEmbeddedConfig = true; + } } void afterBeanDiscovery(@Observes AfterBeanDiscovery afterBeanDiscovery) { diff --git a/artemis-cdi-client/src/main/java/org/apache/artemis/client/cdi/logger/ActiveMQCDILogger.java b/artemis-cdi-client/src/main/java/org/apache/artemis/client/cdi/logger/ActiveMQCDILogger.java index fd2f7e7efa0..f02d51b95b9 100644 --- a/artemis-cdi-client/src/main/java/org/apache/artemis/client/cdi/logger/ActiveMQCDILogger.java +++ b/artemis-cdi-client/src/main/java/org/apache/artemis/client/cdi/logger/ActiveMQCDILogger.java @@ -19,7 +19,7 @@ package org.apache.artemis.client.cdi.logger; -import javax.enterprise.inject.spi.ProcessAnnotatedType; +import javax.enterprise.inject.spi.ProcessBean; import org.jboss.logging.BasicLogger; import org.jboss.logging.Logger; @@ -48,11 +48,11 @@ public interface ActiveMQCDILogger extends BasicLogger { @LogMessage @Message(id = 571000, value = "Discovered configuration class {0}", format = Message.Format.MESSAGE_FORMAT) - void discoveredConfiguration(ProcessAnnotatedType pat); + void discoveredConfiguration(ProcessBean pb); @LogMessage @Message(id = 571001, value = "Discovered client configuration class {0}", format = Message.Format.MESSAGE_FORMAT) - void discoveredClientConfiguration(ProcessAnnotatedType pat); + void discoveredClientConfiguration(ProcessBean pb); @LogMessage(level = Logger.Level.DEBUG) @Message(id = 573000, value = "Configuration found, not using built in configuration") diff --git a/artemis-cdi-client/src/test/java/org/apache/activemq/artemis/cdi/bootstrap/CDIBootstrapProducerTest.java b/artemis-cdi-client/src/test/java/org/apache/activemq/artemis/cdi/bootstrap/CDIBootstrapProducerTest.java new file mode 100644 index 00000000000..c999226dd67 --- /dev/null +++ b/artemis-cdi-client/src/test/java/org/apache/activemq/artemis/cdi/bootstrap/CDIBootstrapProducerTest.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.activemq.artemis.cdi.bootstrap; + +import javax.enterprise.inject.Instance; +import javax.enterprise.inject.spi.Extension; +import javax.inject.Inject; + +import org.apache.artemis.client.cdi.configuration.ArtemisClientConfiguration; +import org.apache.artemis.client.cdi.extension.ArtemisExtension; +import org.apache.artemis.client.cdi.factory.ConnectionFactoryProvider; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +@RunWith(Arquillian.class) +public class CDIBootstrapProducerTest { + @Deployment + public static Archive createArchive() { + return ShrinkWrap.create(JavaArchive.class) + .addAsServiceProviderAndClasses(Extension.class, ArtemisExtension.class) + .addClasses(ConnectionFactoryProvider.class, CDIProducers.class) + .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); + } + + @Inject + private Instance artemisClientConfigurations; + + @Test + public void shouldStartJMS() throws Exception { + assertFalse(artemisClientConfigurations.isAmbiguous()); + assertFalse(artemisClientConfigurations.isUnsatisfied()); + assertTrue(artemisClientConfigurations.iterator().hasNext()); + } + +} diff --git a/artemis-cdi-client/src/test/java/org/apache/activemq/artemis/cdi/bootstrap/CDIProducers.java b/artemis-cdi-client/src/test/java/org/apache/activemq/artemis/cdi/bootstrap/CDIProducers.java new file mode 100644 index 00000000000..625268ca5e7 --- /dev/null +++ b/artemis-cdi-client/src/test/java/org/apache/activemq/artemis/cdi/bootstrap/CDIProducers.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.activemq.artemis.cdi.bootstrap; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.inject.Produces; + +import org.apache.artemis.client.cdi.configuration.ArtemisClientConfiguration; +import org.apache.artemis.client.cdi.configuration.DefaultArtemisClientConfigurationImpl; + +@ApplicationScoped +public class CDIProducers { + @Produces + @ApplicationScoped + public ArtemisClientConfiguration createConfig() { + return new DefaultArtemisClientConfigurationImpl(); + } +}