From f3ebf3538abbf63d8455d42f259f61dfdbf6ad30 Mon Sep 17 00:00:00 2001 From: Michael Arrastia Date: Fri, 13 Jul 2018 17:00:13 +0100 Subject: Move XML based Spring configuration to Java - The original externalised Spring XML-based configuration deployed to: /opt/app/spike-service/dynamic/conf/spike-beans.xml has been replaced with Spring Java based configuration. - Event consumer and publisher configuration is now in property files. This now allows obfuscation of passwords. - Bean creation now allows pre-processing the topic properties. For example, the password can now be de-obfuscated before it is passed into the bean constructor. Change-Id: I5c265dca266b0dcbb562ca1b391080fe237b1e64 Issue-ID: AAI-1377 Signed-off-by: Michael Arrastia --- .../onap/aai/spike/EventConsumerConfiguration.java | 53 ++++++++++++++++++++++ .../aai/spike/EventPublisherConfiguration.java | 50 ++++++++++++++++++++ .../java/org/onap/aai/spike/SpikeApplication.java | 8 ++-- .../org/onap/aai/spike/service/SpikeService.java | 13 ++++-- 4 files changed, 116 insertions(+), 8 deletions(-) create mode 100644 src/main/java/org/onap/aai/spike/EventConsumerConfiguration.java create mode 100644 src/main/java/org/onap/aai/spike/EventPublisherConfiguration.java diff --git a/src/main/java/org/onap/aai/spike/EventConsumerConfiguration.java b/src/main/java/org/onap/aai/spike/EventConsumerConfiguration.java new file mode 100644 index 0000000..e45288a --- /dev/null +++ b/src/main/java/org/onap/aai/spike/EventConsumerConfiguration.java @@ -0,0 +1,53 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017-2018 Amdocs + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.spike; + +import java.net.MalformedURLException; +import org.onap.aai.event.client.DMaaPEventConsumer; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@PropertySource("file:${CONFIG_HOME}/event-consumer.properties") +public class EventConsumerConfiguration { + + //@formatter:off + @Bean + DMaaPEventConsumer dmaapEventConsumer( //NOSONAR + @Value("${event.consumer.host}") String host, + @Value("${event.consumer.topic}") String topic, + @Value("${event.consumer.username}") String username, + @Value("${event.consumer.password}") String password, + @Value("${event.consumer.consumerGroup}") String consumerGroup, + @Value("${event.consumer.consumerId}") String consumerId, + @Value("${event.consumer.timeoutMs}") int timeoutMs, + @Value("${event.consumer.messageLimit}") int messageLimit, + @Value("${event.consumer.transportType}") String transportType, + @Value("${event.consumer.protocol}") String protocol) throws MalformedURLException + { + //@formatter:on + return new DMaaPEventConsumer(host, topic, username, password, consumerGroup, consumerId, timeoutMs, + messageLimit, transportType, protocol, null); + } + +} diff --git a/src/main/java/org/onap/aai/spike/EventPublisherConfiguration.java b/src/main/java/org/onap/aai/spike/EventPublisherConfiguration.java new file mode 100644 index 0000000..6e7d26d --- /dev/null +++ b/src/main/java/org/onap/aai/spike/EventPublisherConfiguration.java @@ -0,0 +1,50 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017-2018 Amdocs + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.spike; + +import org.onap.aai.event.client.DMaaPEventPublisher; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@PropertySource("file:${CONFIG_HOME}/event-publisher.properties") +public class EventPublisherConfiguration { + + //@formatter:off + @Bean + DMaaPEventPublisher dmaapEventPublisher( //NOSONAR + @Value("${event.publisher.host}") String host, + @Value("${event.publisher.topic}") String topic, + @Value("${event.publisher.username}") String username, + @Value("${event.publisher.password}") String password, + @Value("${event.publisher.maxBatchSize}") int maxBatchSize, + @Value("${event.publisher.maxAgeMs}") long maxAgeMs, + @Value("${event.publisher.delayBetweenBatchesMs}") int delayBetweenBatchesMs, + @Value("${event.publisher.transportType}") String transportType) + { + //@formatter:on + return new DMaaPEventPublisher(host, topic, username, password, maxBatchSize, maxAgeMs, delayBetweenBatchesMs, + transportType); + } + +} diff --git a/src/main/java/org/onap/aai/spike/SpikeApplication.java b/src/main/java/org/onap/aai/spike/SpikeApplication.java index e031de3..33760de 100644 --- a/src/main/java/org/onap/aai/spike/SpikeApplication.java +++ b/src/main/java/org/onap/aai/spike/SpikeApplication.java @@ -1,9 +1,9 @@ /** - * ============LICENSE_START======================================================= + * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. - * Copyright © 2017-2018 European Software Marketing Ltd. + * Copyright © 2017-2018 Amdocs * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,13 +25,13 @@ import org.eclipse.jetty.util.security.Password; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; -import org.springframework.context.annotation.ImportResource; +import org.springframework.context.annotation.Import; /** * Spike service Spring Boot Application */ @SpringBootApplication -@ImportResource({"file:${SERVICE_BEANS}/*.xml"}) +@Import({ EventConsumerConfiguration.class, EventPublisherConfiguration.class }) public class SpikeApplication extends SpringBootServletInitializer { public static void main(String[] args) { diff --git a/src/main/java/org/onap/aai/spike/service/SpikeService.java b/src/main/java/org/onap/aai/spike/service/SpikeService.java index 3aa6dfe..8689903 100644 --- a/src/main/java/org/onap/aai/spike/service/SpikeService.java +++ b/src/main/java/org/onap/aai/spike/service/SpikeService.java @@ -21,6 +21,7 @@ package org.onap.aai.spike.service; import java.util.Timer; +import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.onap.aai.cl.api.Logger; import org.onap.aai.cl.eelf.LoggerFactory; @@ -31,7 +32,11 @@ import org.onap.aai.spike.schema.EdgeRulesLoader; import org.onap.aai.spike.schema.OXMModelLoader; import org.onap.aai.spike.util.SpikeConstants; import org.onap.aai.spike.util.SpikeProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; +@Component public class SpikeService { private EventConsumer consumer; @@ -39,12 +44,14 @@ public class SpikeService { private static Logger logger = LoggerFactory.getInstance().getLogger(SpikeService.class.getName()); private Timer timer; - public SpikeService(EventConsumer consumer, EventPublisher publisher) { + @Autowired + public SpikeService(@Qualifier("dmaapEventConsumer") EventConsumer consumer, + @Qualifier("dmaapEventPublisher") EventPublisher publisher) { this.consumer = consumer; this.publisher = publisher; } - + @PostConstruct public void startup() throws Exception { // Load models @@ -68,8 +75,6 @@ public class SpikeService { protected void preShutdown() { logger.info(SpikeMsgs.SPIKE_SERVICE_STARTED_SUCCESSFULLY, consumer.getClass().getName()); timer.cancel(); - - } } -- cgit 1.2.3-korg