Remove the client load balancer use http client 27/45527/3
authorKajur, Harish (vk250x) <vk250x@att.com>
Tue, 1 May 2018 23:55:48 +0000 (19:55 -0400)
committerKajur, Harish (vk250x) <vk250x@att.com>
Thu, 3 May 2018 00:35:06 +0000 (20:35 -0400)
Issue-ID: AAI-965
Change-Id: I68600c2a586faa5537ac58ca21b06e984413a8bc
Signed-off-by: Kajur, Harish (vk250x) <vk250x@att.com>
13 files changed:
aai-client-loadbalancer/LICENSE.TXT [deleted file]
aai-client-loadbalancer/pom.xml [deleted file]
aai-client-loadbalancer/src/main/java/org/onap/aai/AAIRibbonConfiguration.java [deleted file]
aai-client-loadbalancer/src/main/java/org/onap/aai/config/HttpPing.java [deleted file]
aai-client-loadbalancer/src/main/java/org/onap/aai/config/HttpPingImpl.java [deleted file]
aai-core/pom.xml
aai-core/src/main/java/org/onap/aai/config/DmaapConfig.java
aai-core/src/main/java/org/onap/aai/config/EventClientPublisher.java [new file with mode: 0644]
aai-core/src/main/java/org/onap/aai/dmaap/AAIDmaapEventJMSConsumer.java
aai-core/src/main/java/org/onap/aai/dmaap/JMSConsumer.java [deleted file]
aai-core/src/main/java/org/onap/aai/dmaap/JMSProducer.java [deleted file]
aai-core/src/main/java/org/onap/aai/util/StoreNotificationEvent.java
pom.xml

diff --git a/aai-client-loadbalancer/LICENSE.TXT b/aai-client-loadbalancer/LICENSE.TXT
deleted file mode 100644 (file)
index 3455862..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-============LICENSE_START=======================================================
-org.onap.aai
-================================================================================
-Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
-================================================================================
-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=========================================================
diff --git a/aai-client-loadbalancer/pom.xml b/aai-client-loadbalancer/pom.xml
deleted file mode 100644 (file)
index ace8aa0..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-<!--
-
-    ============LICENSE_START=======================================================
-    org.onap.aai
-    ================================================================================
-    Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
-    ================================================================================
-    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=========================================================
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.onap.aai.aai-common</groupId>
-        <artifactId>aai-common</artifactId>
-        <version>1.2.4-SNAPSHOT</version>
-    </parent>
-    <artifactId>aai-client-loadbalancer</artifactId>
-    <version>1.2.4-SNAPSHOT</version>
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>${java.version}</source>
-                    <target>${java.version}</target>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-    <packaging>jar</packaging>
-
-    <name>aai-client-loadbalancer</name>
-    <description>AAI Client Side Loader Balancer to replace Dmaap</description>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <java.version>1.8</java.version>
-        <logback.version>1.2.3</logback.version>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-ribbon</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.bouncycastle</groupId>
-                    <artifactId>bcprov-jdk15on</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.bouncycastle</groupId>
-                    <artifactId>bcpkix-jdk15on</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-commons</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-            <version>1.5.12.RELEASE</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-tomcat</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-            <version>4.3.16.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>com.att.eelf</groupId>
-            <artifactId>eelf-core</artifactId>
-            <version>1.0.0</version>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-codec-http</artifactId>
-            <version>4.1.9.Final</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-core</artifactId>
-            <version>${logback.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-access</artifactId>
-            <version>${logback.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-core</artifactId>
-            <version>2.8.11</version>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-            <version>2.8.11</version>
-        </dependency>
-    </dependencies>
-
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.springframework.cloud</groupId>
-                <artifactId>spring-cloud-dependencies</artifactId>
-                <version>Camden.SR5</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
-    <repositories>
-        <repository>
-            <id>spring-snapshots</id>
-            <name>Spring Snapshots</name>
-            <url>https://repo.spring.io/snapshot</url>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-        </repository>
-        <repository>
-            <id>spring-milestones</id>
-            <name>Spring Milestones</name>
-            <url>https://repo.spring.io/milestone</url>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </repository>
-    </repositories>
-
-</project>
diff --git a/aai-client-loadbalancer/src/main/java/org/onap/aai/AAIRibbonConfiguration.java b/aai-client-loadbalancer/src/main/java/org/onap/aai/AAIRibbonConfiguration.java
deleted file mode 100644 (file)
index 601c873..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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;
-
-import com.netflix.client.config.IClientConfig;
-import com.netflix.loadbalancer.ILoadBalancer;
-import com.netflix.loadbalancer.LoadBalancerBuilder;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cloud.client.loadbalancer.LoadBalanced;
-import org.springframework.context.annotation.Bean;
-import org.springframework.web.client.RestTemplate;
-
-/**
- * AAIRibbonConfiguration is responsible for configuring the dmaap
- * and it reads the users the application properties class
- * and is mostly configurable via properties
- */
-public class AAIRibbonConfiguration {
-
-    @Autowired
-    IClientConfig ribbonClientConfig;
-
-    @Bean
-    public ILoadBalancer ribbonLoadBalancer() {
-        return LoadBalancerBuilder.newBuilder()
-                .withClientConfig(ribbonClientConfig)
-                .buildLoadBalancerFromConfigWithReflection();
-    }
-
-    @LoadBalanced
-    @Bean
-    public RestTemplate loadBalancedRestTemplate(){
-        return new RestTemplate();
-    }
-}
diff --git a/aai-client-loadbalancer/src/main/java/org/onap/aai/config/HttpPing.java b/aai-client-loadbalancer/src/main/java/org/onap/aai/config/HttpPing.java
deleted file mode 100644 (file)
index fcda074..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.config;
-
-import java.util.Optional;
-
-/**
- * <b>HttpPing</b> interface provides access to update the endpoint and
- * and the security level of the server that the user is trying to access
- */
-public interface HttpPing {
-
-    /**
-     * Sets the endpoint that the http get request will
-     * make to verify if the url can be reached
-     *
-     * @param endpoint - the endpoint of the url that is used to do healthcheck
-     */
-    void setHealthCheckEndpoint(String endpoint);
-
-    /**
-     * Returns the health check endpoint that the implementation
-     * will use in order to verify if the server is reachable at that location
-     *
-     * @return endpoint - the endpoint of the url that is used to do healthcheck
-     */
-    String getHealthCheckEndpoint();
-
-    /**
-     * Set the credentials for the rest endpoint to verify authorization
-     *
-     * @param username - the username to the server trying to connect to
-     * @param password - the password to the server trying to connect to
-     */
-    void setCredentials(String username, String password);
-
-    /**
-     * Return the base64 authorization string set from the username and password
-     *
-     * @return encoded string using base64 of the username and password values
-     * like this:
-     * <pre>
-     * @{code
-     *      "username:password" => "Basic dXNlcm5hbWU6cGFzc3dvcmQ="
-     * }
-     * </pre>
-     */
-    Optional<String> getAuthorization();
-}
diff --git a/aai-client-loadbalancer/src/main/java/org/onap/aai/config/HttpPingImpl.java b/aai-client-loadbalancer/src/main/java/org/onap/aai/config/HttpPingImpl.java
deleted file mode 100644 (file)
index dd19801..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.config;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.netflix.client.config.DefaultClientConfigImpl;
-import com.netflix.client.config.IClientConfig;
-import com.netflix.loadbalancer.IPing;
-import com.netflix.loadbalancer.Server;
-import org.springframework.http.*;
-import org.springframework.web.client.HttpClientErrorException;
-import org.springframework.web.client.RestTemplate;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.SocketAddress;
-import java.util.Base64;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Optional;
-
-public class HttpPingImpl implements HttpPing, IPing {
-
-    private static final EELFLogger logger = EELFManager.getInstance().getLogger(HttpPingImpl.class);
-
-    private static final Base64.Encoder base64Encoder = Base64.getEncoder();
-
-    private static final HttpHeaders HTTP_HEADERS = new HttpHeaders();
-
-    // This is a workaround for the topics that the user
-    // does not have the access to read their own topic status
-    private static final String MR_STATUS_PATTERN = ".*\"mrstatus\":\\s*4002.*";
-
-    private static final int HTTPS_PORT = 3905;
-    private static final int DEFAULT_TIMEOUT = 2;
-
-    private String healthCheckEndpoint;
-    private String username;
-    private String password;
-
-    private int timeout;
-
-    private final RestTemplate restTemplate;
-
-    public HttpPingImpl(String healthCheckEndpoint) {
-        this(new RestTemplate());
-        this.healthCheckEndpoint = healthCheckEndpoint;
-        this.timeout = DEFAULT_TIMEOUT;
-    }
-
-    public HttpPingImpl(RestTemplate restTemplate) {
-        this.restTemplate = restTemplate;
-        this.healthCheckEndpoint = "";
-        this.timeout = DEFAULT_TIMEOUT;
-    }
-
-    public HttpPingImpl() {
-        this("");
-    }
-
-    public HttpPingImpl(IClientConfig clientConfig) {
-
-        if (!(clientConfig instanceof DefaultClientConfigImpl)) {
-            throw new UnsupportedOperationException("Unable to support the client config implementation: " + clientConfig.getClass().getName());
-        }
-
-        DefaultClientConfigImpl defaultClientConfig = (DefaultClientConfigImpl) clientConfig;
-
-        Map<String, Object> map = defaultClientConfig.getProperties();
-
-        this.setCredentials(map.get("username").toString(), map.get("password").toString());
-        this.setHealthCheckEndpoint(map.get("health.endpoint").toString());
-        this.setTimeoutInSecs(Integer.valueOf(map.get("pingport.timeout").toString()));
-
-        this.restTemplate = new RestTemplate();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setHealthCheckEndpoint(String endpoint) {
-        this.healthCheckEndpoint = endpoint;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public String getHealthCheckEndpoint() {
-        return healthCheckEndpoint;
-    }
-
-    @Override
-    public void setCredentials(String username, String password) {
-        this.username = username;
-        this.password = password;
-    }
-
-    public void setTimeoutInSecs(int timeout) {
-        this.timeout = timeout;
-    }
-
-    @Override
-    public Optional<String> getAuthorization() {
-
-        if (username == null && password == null) {
-            return Optional.empty();
-        }
-
-        if (username == null || username.isEmpty()) {
-            logger.error("Username is null while the password is not correctly set");
-            return Optional.empty();
-        }
-
-        if (password == null || password.isEmpty()) {
-            logger.error("Password is null while the username is not correctly set");
-            return Optional.empty();
-        }
-
-        String auth = String.format("%s:%s", username, password);
-        return Optional.ofNullable("Basic " + base64Encoder.encodeToString(auth.getBytes()));
-    }
-
-    /**
-     * @{inheritDoc}
-     */
-    @Override
-    public boolean isAlive(Server server) {
-
-        String url = null;
-
-        // If unable to ping the port then return immediately
-        if (!pingPort(server)) {
-            return false;
-        }
-
-        if (server.getPort() == HTTPS_PORT) {
-            url = "https://";
-        } else {
-
-            url = "http://";
-        }
-
-        url = url + server.getId();
-        url = url + this.getHealthCheckEndpoint();
-
-        boolean isAlive = false;
-
-        Optional<String> authorization = getAuthorization();
-
-        HttpHeaders httpHeaders = new HttpHeaders();
-        httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
-
-        if (authorization.isPresent()) {
-            httpHeaders.add("Authorization", authorization.get());
-        }
-
-        HttpEntity<String> httpEntity = new HttpEntity<>(httpHeaders);
-        try {
-
-            ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);
-
-            HttpStatus httpStatus = responseEntity.getStatusCode();
-
-            if (httpStatus == HttpStatus.OK) {
-                isAlive = true;
-                logger.info("Successfully established connection to the following url {}", url);
-                return isAlive;
-            }
-
-            logger.warn("Unable to establish a connection the following url {} due to HTTP Code {}, and reason {}",
-                    url, httpStatus.value(), httpStatus.getReasonPhrase());
-
-        } catch (HttpClientErrorException ex) {
-            HttpStatus httpStatus = ex.getStatusCode();
-            if (httpStatus == HttpStatus.FORBIDDEN) {
-                // This is a workaround being in play for the topics
-                // that are unable to read themselves for this user
-                // In the case of the username and password being
-                // wrong the response would be unauthorized (401) but if the
-                // user is authorized but unable to read this topic, then
-                // we get back the (403) with the message mrstatus 4002
-                // This is a temporary workaround to properly identify which server is down
-                String body = ex.getResponseBodyAsString();
-                if (body.matches(MR_STATUS_PATTERN)) {
-                    isAlive = true;
-                    logger.info("Successfully connected by workaround due to unable to read own topic {}", url);
-                    return isAlive;
-                } else {
-                    logger.warn("Unable to establish a connection to {} due to {}", server.getHostPort(), ex.getMessage());
-                }
-            } else {
-                logger.warn("Unable to establish a connection to {} due to {}", server.getHostPort(), ex.getMessage());
-            }
-        } catch (Exception ex) {
-            logger.warn("Unable to establish a connection to {} due to {}", server.getHostPort(), ex.getMessage());
-        }
-
-        return isAlive;
-    }
-
-    /**
-     * Returns true if it can connect to the host and port within
-     * the given timeout from the given server parameter
-     *
-     * @param server - server that will be taken from the src/main/resources/application.yml file
-     * @return true if it can make a successful socket connection to the port on the host
-     */
-    public boolean pingPort(Server server) {
-
-        String host = server.getHost();
-        Integer port = server.getPort();
-
-        boolean success = false;
-        SocketAddress socketAddress = new InetSocketAddress(host, port);
-
-        try (Socket socket = new Socket()) {
-            socket.connect(socketAddress, timeout * 1000);
-            if (socket.isConnected()) {
-                success = true;
-            }
-        } catch (IOException e) {
-            logger.warn("Unable to connect to the host {} on port {} due to {}", host, port, e.getLocalizedMessage());
-            success = false;
-        }
-
-        return success;
-    }
-}
index c00d38e..dc9b278 100644 (file)
             <artifactId>json-patch</artifactId>
             <version>1.9</version>
         </dependency>
-        <dependency>
-            <groupId>com.att.nsa</groupId>
-            <artifactId>dmaapClient</artifactId>
-            <version>0.2.12</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.att.aft</groupId>
-                    <artifactId>dme2</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
         <dependency>
             <groupId>org.powermock</groupId>
             <artifactId>powermock-module-javaagent</artifactId>
             <artifactId>httpclient</artifactId>
             <version>${httpclient.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.onap.aai.aai-common</groupId>
-            <artifactId>aai-client-loadbalancer</artifactId>
-            <version>${project.version}</version>
-        </dependency>
         <dependency>
             <groupId>org.apache.tinkerpop</groupId>
             <artifactId>gremlin-groovy</artifactId>
             <artifactId>jackson-annotations</artifactId>
             <version>2.8.11</version>
         </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>1.2.17</version>
+        </dependency>
     </dependencies>
 
     <!-- Plugins and repositories -->
index 29fac33..7634b74 100644 (file)
@@ -22,8 +22,8 @@ package org.onap.aai.config;
 import org.apache.activemq.ActiveMQConnectionFactory;
 import org.apache.activemq.broker.BrokerService;
 import org.apache.activemq.command.ActiveMQQueue;
-import org.onap.aai.dmaap.JMSConsumer;
-import org.onap.aai.dmaap.JMSProducer;
+import org.onap.aai.dmaap.AAIDmaapEventJMSConsumer;
+import org.onap.aai.dmaap.AAIDmaapEventJMSProducer;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -85,13 +85,13 @@ public class DmaapConfig {
     }
 
     @Bean
-    public JMSProducer jmsProducer(){
-        return new JMSProducer();
+    public AAIDmaapEventJMSProducer jmsProducer(){
+        return new AAIDmaapEventJMSProducer();
     }
 
     @Bean
-    public JMSConsumer jmsConsumer() throws Exception {
-        return new JMSConsumer();
+    public AAIDmaapEventJMSConsumer jmsConsumer() throws Exception {
+        return new AAIDmaapEventJMSConsumer();
     }
 
     @Bean
diff --git a/aai-core/src/main/java/org/onap/aai/config/EventClientPublisher.java b/aai-core/src/main/java/org/onap/aai/config/EventClientPublisher.java
new file mode 100644 (file)
index 0000000..1268bf8
--- /dev/null
@@ -0,0 +1,95 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.config;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Base64;
+
+@Configuration
+public class EventClientPublisher {
+
+    private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(EventClientPublisher.class);
+
+    @Value("${dmaap.ribbon.listOfServers}")
+    private String hosts;
+
+    @Value("${dmaap.ribbon.username:}")
+    private String username;
+
+    @Value("${dmaap.ribbon.password:}")
+    private String password;
+
+    @Value("${dmaap.ribbon.topic:AAI-EVENT}")
+    private String topic;
+
+    @Value("${dmaap.ribbon.batchSize:100}")
+    private int maxBatchSize;
+
+    @Value("${dmaap.ribbon.maxAgeMs:250}")
+    private int maxAgeMs;
+
+    @Value("${dmaap.ribbon.delayBetweenBatches:100}")
+    private int delayBetweenBatches;
+
+    @Value("${dmaap.ribbon.protocol:http}")
+    private String protocol;
+
+    @Value("${dmaap.ribbon.transportType:HTTPNOAUTH}")
+    private String tranportType;
+
+    @Value("${dmaap.ribbon.contentType:application/json}")
+    private String contentType;
+
+    @Bean
+    public RestTemplate dmaapRestTemplate(){
+        return new RestTemplate();
+    }
+
+    @Bean
+    public HttpHeaders dmaapHeaders() throws UnsupportedEncodingException
+    {
+
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+
+        if(username != null && password != null){
+
+            if(!StringUtils.EMPTY.equals(username) && !StringUtils.EMPTY.equals(password)){
+
+                byte[] userPass = (username + ":" + password).getBytes("UTF-8");
+
+                httpHeaders.set("Authorization", "Basic " + Base64.getEncoder().encodeToString(userPass));
+            }
+        }
+
+        return httpHeaders;
+    }
+
+}
index cc3afa6..5e28b3a 100644 (file)
@@ -21,63 +21,53 @@ package org.onap.aai.dmaap;
 
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.WebResource;
 import org.apache.log4j.MDC;
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.onap.aai.logging.ErrorLogHelper;
-import org.onap.aai.util.AAIConstants;
+import org.onap.aai.config.SpringContextAware;
+import org.onap.aai.logging.LogFormatTools;
 import org.onap.aai.logging.LoggingContext;
 import org.onap.aai.logging.LoggingContext.LoggingField;
 import org.onap.aai.logging.LoggingContext.StatusCode;
+import org.springframework.context.ApplicationContext;
+import org.springframework.core.env.Environment;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.web.client.RestTemplate;
 
 import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.MessageListener;
 import javax.jms.TextMessage;
-import javax.ws.rs.core.MediaType;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.Properties;
 
 public class AAIDmaapEventJMSConsumer implements MessageListener {
 
        private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(AAIDmaapEventJMSConsumer.class);
 
-       private Client httpClient;
+       private RestTemplate restTemplate;
 
-       private Properties aaiEventProps;
-       private String aaiEventUrl = "";
+       private HttpHeaders httpHeaders;
 
-       public AAIDmaapEventJMSConsumer() throws org.apache.commons.configuration.ConfigurationException {
-               super();
-               try(FileReader reader = new FileReader(new File(AAIConstants.AAI_EVENT_DMAAP_PROPS))) {
+       private Environment environment;
 
-                       if (this.httpClient == null) {
-                               aaiEventProps = new Properties();
-                               aaiEventProps.load(reader);
+       public AAIDmaapEventJMSConsumer() {
+        ApplicationContext applicationContext  = SpringContextAware.getApplicationContext();
 
-                               String host = aaiEventProps.getProperty("host");
-                               String topic = aaiEventProps.getProperty("topic");
-                               String protocol = aaiEventProps.getProperty("Protocol");
-
-                               aaiEventUrl = protocol + "://" + host + "/events/" + topic;
-                               httpClient = Client.create();
-                       }
-
-               } catch (IOException e) {
-                       ErrorLogHelper.logError("AAI_4000", "Error updating dmaap config file for aai event.");
-                       LOGGER.error(e.getMessage(), e);
+        if(applicationContext != null){
+                       restTemplate = (RestTemplate) applicationContext.getBean("dmaapRestTemplate");
+                       httpHeaders  = (HttpHeaders) applicationContext.getBean("dmaapHeaders");
+                       environment  = applicationContext.getEnvironment();
                }
-
        }
 
        @Override
        public void onMessage(Message message) {
 
+           if(restTemplate == null){
+               return;
+               }
+
                String jsmMessageTxt = "";
                String aaiEvent = "";
                String eventName = "";
@@ -111,49 +101,28 @@ public class AAIDmaapEventJMSConsumer implements MessageListener {
                                MDC.put(LoggingField.STATUS_CODE.toString(), StatusCode.COMPLETE.toString());
                                MDC.put(LoggingField.RESPONSE_CODE.toString(), "0");
                                LOGGER.info(eventName + "|" + aaiEvent);
+                               HttpEntity httpEntity = new HttpEntity(aaiEvent, httpHeaders);
+
+                               String transportType = environment.getProperty("dmaap.ribbon.transportType", "http");
+                               String baseUrl  = transportType + "://" + environment.getProperty("dmaap.ribbon.listOfServers");
+                               String endpoint = "/events/" + eventName;
 
                                if ("AAI-EVENT".equals(eventName)) {
-                                       this.sentWithHttp(this.httpClient, this.aaiEventUrl, aaiEvent);
+                    restTemplate.exchange(baseUrl + endpoint, HttpMethod.POST, httpEntity, String.class);
                                } else {
                                        LoggingContext.statusCode(StatusCode.ERROR);
                                        LOGGER.error(eventName + "|Event Topic invalid.");
                                }
-                       } catch (java.net.SocketException e) {
-                               if (!e.getMessage().contains("Connection reset")) {
-                                       MDC.put(LoggingField.STATUS_CODE.toString(), StatusCode.ERROR.toString());
-                                       MDC.put(LoggingField.RESPONSE_CODE.toString(), "200");
-                                       LOGGER.error("AAI_7304 Error reaching DMaaP to send event. " + aaiEvent, e);
-                               }
-                       } catch (IOException e) {
-                               MDC.put(LoggingField.STATUS_CODE.toString(), StatusCode.ERROR.toString());
-                               MDC.put(LoggingField.RESPONSE_CODE.toString(), "200");
-                               LOGGER.error("AAI_7304 Error reaching DMaaP to send event. " + aaiEvent, e);
                        } catch (JMSException | JSONException e) {
                                MDC.put(LoggingField.STATUS_CODE.toString(), StatusCode.ERROR.toString());
                                MDC.put(LoggingField.RESPONSE_CODE.toString(), "200");
-                               LOGGER.error("AAI_7350 Error parsing aaievent jsm message for sending to dmaap. " + jsmMessageTxt, e);
+                               LOGGER.error("AAI_7350 Error parsing aaievent jsm message for sending to dmaap. {} {}", jsmMessageTxt, LogFormatTools.getStackTop(e));
                        } catch (Exception e) {
                                MDC.put(LoggingField.STATUS_CODE.toString(), StatusCode.ERROR.toString());
                                MDC.put(LoggingField.RESPONSE_CODE.toString(), "200");
-                               LOGGER.error("AAI_7350 Error sending message to dmaap. " + jsmMessageTxt, e);
+                               LOGGER.error("AAI_7350 Error sending message to dmaap. {} {}" , jsmMessageTxt, LogFormatTools.getStackTop(e));
                        }
                }
 
        }
-
-       private boolean sentWithHttp(Client client, String url, String aaiEvent) throws IOException {
-
-               WebResource webResource = client.resource(url);
-
-               ClientResponse response = webResource
-                               .accept(MediaType.APPLICATION_JSON)
-                               .type(MediaType.APPLICATION_JSON)
-                               .post(ClientResponse.class, aaiEvent);
-
-               if (response.getStatus() != 200) {
-                       LOGGER.info("Failed : HTTP error code : " + response.getStatus());
-                       return false;
-               }
-               return true;
-       }
 }
diff --git a/aai-core/src/main/java/org/onap/aai/dmaap/JMSConsumer.java b/aai-core/src/main/java/org/onap/aai/dmaap/JMSConsumer.java
deleted file mode 100644 (file)
index 1609286..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.dmaap;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import org.apache.log4j.MDC;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.onap.aai.config.SpringContextAware;
-import org.onap.aai.logging.LoggingContext.LoggingField;
-import org.onap.aai.logging.LoggingContext.StatusCode;
-import org.springframework.cloud.client.ServiceInstance;
-import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
-import org.springframework.core.env.Environment;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.MediaType;
-import org.springframework.web.client.RestTemplate;
-
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.jms.TextMessage;
-import java.util.Base64;
-import java.util.Collections;
-
-public class JMSConsumer implements MessageListener {
-
-    private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(JMSConsumer.class);
-
-    private static final int HTTPS_PORT = 3905;
-    private static final Base64.Encoder base64Encoder = Base64.getEncoder();
-
-    private HttpHeaders httpHeaders;
-    private RestTemplate restTemplate;
-
-    private Environment environment;
-    private LoadBalancerClient loadBalancerClient;
-
-    public JMSConsumer() throws Exception {
-        this((LoadBalancerClient)SpringContextAware.getApplicationContext().getBean("loadBalancerClient"));
-    }
-
-    public JMSConsumer(LoadBalancerClient loadBalancerClient) throws Exception {
-        this.loadBalancerClient = loadBalancerClient;
-        this.httpHeaders  = new HttpHeaders();
-        this.httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
-        this.environment  = SpringContextAware.getApplicationContext().getEnvironment();
-
-        String username = this.environment.getProperty("dmaap.ribbon.username");
-        String password = this.environment.getProperty("dmaap.ribbon.password");
-
-        if(username == null || password == null){
-            throw new Exception("Unable to retrive username/password from the application properties");
-        }
-
-        String auth = String.format("%s:%s", username, password);
-        String authString = "Basic " + base64Encoder.encodeToString(auth.getBytes());
-        httpHeaders.add("Authorization", authString);
-
-        restTemplate = new RestTemplate();
-    }
-
-    @Override
-    public void onMessage(Message message) {
-
-        String jsmMessageTxt = "";
-        String aaiEvent = "";
-        String eventName = "";
-
-        String environment = System.getProperty("lrmRO");
-        if (environment == null) {
-            environment = "";
-        }
-
-        if (message instanceof TextMessage) {
-            try {
-                jsmMessageTxt = ((TextMessage) message).getText();
-                JSONObject jo = new JSONObject(jsmMessageTxt);
-
-                if (jo.has("aaiEventPayload")) {
-                    aaiEvent = jo.getJSONObject("aaiEventPayload").toString();
-                } else {
-                    return;
-                }
-                if (jo.getString("transId") != null) {
-                    MDC.put("requestId", jo.getString("transId"));
-                }
-                if (jo.getString("fromAppId") != null) {
-                    MDC.put("partnerName", jo.getString("fromAppId"));
-                }
-                MDC.put("targetEntity", "DMAAP");
-                if (jo.getString("event-topic") != null) {
-                    eventName = jo.getString("event-topic");
-                    MDC.put("targetServiceName", eventName);
-                }
-                MDC.put("serviceName", "AAI");
-                MDC.put(LoggingField.STATUS_CODE.toString(), StatusCode.COMPLETE.toString());
-                MDC.put(LoggingField.RESPONSE_CODE.toString(), "0");
-                LOGGER.info(eventName + "|" + aaiEvent);
-
-                HttpEntity<String> httpEntity = new HttpEntity<>(aaiEvent, httpHeaders);
-                ServiceInstance serviceInstance = loadBalancerClient.choose("dmaap");
-                String url = serviceInstance.getHost() + ":" + serviceInstance.getPort();
-
-                if(serviceInstance.getPort() == HTTPS_PORT){
-                    url = "https://" + url;
-                } else {
-                    url = "http://" + url;
-                }
-
-                url += "/events/" + eventName;
-
-                if ("AAI-EVENT".equals(eventName)) {
-                    restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
-                    LOGGER.info(eventName + "|Event sent.");
-                } else if ("AAI-VCE-INTERFACE-DATA".equals(eventName)) {
-                    restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
-                    String msg = "";
-                    LOGGER.info(eventName + "|Event sent. " + msg);
-                } else {
-                    MDC.put(LoggingField.STATUS_CODE.toString(), StatusCode.ERROR.toString());
-                    MDC.put(LoggingField.RESPONSE_CODE.toString(), "900");
-                    LOGGER.error(eventName + "|Event Topic invalid.");
-                }
-            } catch (JMSException | JSONException e) {
-                MDC.put(LoggingField.STATUS_CODE.toString(), StatusCode.ERROR.toString());
-                MDC.put(LoggingField.RESPONSE_CODE.toString(), "200");
-                LOGGER.error("AAI_7350 Error parsing aaievent jms message for sending to dmaap. " + jsmMessageTxt, e);
-            } catch (Exception e) {
-                MDC.put(LoggingField.STATUS_CODE.toString(), StatusCode.ERROR.toString());
-                MDC.put(LoggingField.RESPONSE_CODE.toString(), "200");
-                LOGGER.error("AAI_7350 Error sending message to dmaap. " + jsmMessageTxt, e);
-            }
-        }
-
-    }
-
-}
\ No newline at end of file
diff --git a/aai-core/src/main/java/org/onap/aai/dmaap/JMSProducer.java b/aai-core/src/main/java/org/onap/aai/dmaap/JMSProducer.java
deleted file mode 100644 (file)
index 6ddb141..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.dmaap;
-
-import org.apache.activemq.ActiveMQConnectionFactory;
-import org.apache.activemq.command.ActiveMQQueue;
-import org.json.JSONObject;
-import org.onap.aai.config.SpringContextAware;
-import org.onap.aai.util.AAIConfig;
-import org.springframework.context.ApplicationContext;
-import org.springframework.jms.connection.CachingConnectionFactory;
-import org.springframework.jms.core.JmsTemplate;
-
-public class JMSProducer implements MessageProducer {
-
-       private JmsTemplate jmsTemplate;
-
-       private ApplicationContext applicationContext;
-
-       public JMSProducer() {
-               if(AAIConfig.get("aai.jms.enable", "true").equals("true")){
-                       applicationContext = SpringContextAware.getApplicationContext();
-                       if(applicationContext == null){
-                               this.jmsTemplate = new JmsTemplate();
-                               String activeMqTcpUrl = System.getProperty("activemq.tcp.url", "tcp://localhost:61547");
-                               this.jmsTemplate.setConnectionFactory(new CachingConnectionFactory(new ActiveMQConnectionFactory(activeMqTcpUrl)));
-                               this.jmsTemplate.setDefaultDestination(new ActiveMQQueue("IN_QUEUE"));
-                       } else {
-                               jmsTemplate = (JmsTemplate) applicationContext.getBean("jmsTemplate");
-                       }
-               }
-       }
-
-       public void sendMessageToDefaultDestination(JSONObject finalJson) {
-               if(jmsTemplate != null){
-                       jmsTemplate.convertAndSend(finalJson.toString());
-               }
-       }
-}
index 375a2ad..6bde482 100644 (file)
  */
 package org.onap.aai.util;
 
-import java.io.StringWriter;
-import java.util.Iterator;
-import java.util.UUID;
-
-import javax.xml.bind.Marshaller;
-
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import org.eclipse.persistence.dynamic.DynamicEntity;
 import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.onap.aai.config.SpringContextAware;
 import org.onap.aai.dmaap.AAIDmaapEventJMSProducer;
-import org.onap.aai.dmaap.JMSProducer;
 import org.onap.aai.dmaap.MessageProducer;
 import org.onap.aai.domain.notificationEvent.NotificationEvent;
 import org.onap.aai.exceptions.AAIException;
 import org.onap.aai.introspection.Introspector;
 import org.onap.aai.introspection.Loader;
 import org.onap.aai.introspection.exceptions.AAIUnknownObjectException;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
 import org.springframework.context.ApplicationContext;
 import org.springframework.core.env.Environment;
 
+import javax.xml.bind.Marshaller;
+import java.io.StringWriter;
+import java.util.Iterator;
+import java.util.UUID;
+
 public class StoreNotificationEvent {
 
     private static final EELFLogger logger = EELFManager.getInstance().getLogger(StoreNotificationEvent.class);
@@ -60,27 +56,7 @@ public class StoreNotificationEvent {
         * Instantiates a new store notification event.
         */
        public StoreNotificationEvent(String transactionId, String sourceOfTruth) {
-               this.context         = SpringContextAware.getApplicationContext();
-               // If the context is null then this is being invoked from
-               // non spring context so creating the jms producer each time
-               // Otherwise, get the jms producer from the spring context so
-               // no need to create a instance of this each time
-        // Also check if the environment has the dmaap profile
-               // TODO - Add the constants for profile so do this when adding the https two-way ssl and one way with basic auth
-               if(this.context == null){
-                       this.messageProducer = new AAIDmaapEventJMSProducer();
-               } else {
-                   env = context.getEnvironment();
-                       if(env.acceptsProfiles("dmaap")){
-                               try {
-                                       this.messageProducer = (JMSProducer)context.getBean("jmsProducer");
-                               } catch(NoSuchBeanDefinitionException ex){
-                                       logger.error("Currently using the dmaap profile but still not able to find bean so check DmaapConfig", ex);
-                               }
-                       } else {
-                               this.messageProducer = new AAIDmaapEventJMSProducer();
-                       }
-               }
+           this.messageProducer = new AAIDmaapEventJMSProducer();
         this.transactionId   = transactionId;
         this.sourceOfTruth   = sourceOfTruth;
        }
diff --git a/pom.xml b/pom.xml
index e217e7a..e8c2548 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -42,7 +42,6 @@
         <module>aai-core</module>
         <module>aai-auth</module>
         <module>aai-utils</module>
-        <module>aai-client-loadbalancer</module>
     </modules>
 
     <properties>