Ensure HttpEntry bean is request scoped in aai-common 55/136955/2
authorFiete Ostkamp <Fiete.Ostkamp@telekom.de>
Wed, 10 Jan 2024 10:59:21 +0000 (11:59 +0100)
committerFiete Ostkamp <Fiete.Ostkamp@telekom.de>
Wed, 10 Jan 2024 12:08:23 +0000 (13:08 +0100)
- change beans to request scoped since the transaction handling inside it is not thread-safe
- bean injection in jersey is "request" scoped by default,
  but in a spring web context it is "prototype"
- in the prototype scope, multiple threads could access the same HttpEntry

Issue-ID: AAI-3723
Change-Id: I083e3b06cdbe4491f22746033cdcc80aa48a2d1b
Signed-off-by: Fiete Ostkamp <Fiete.Ostkamp@telekom.de>
aai-core/src/main/java/org/onap/aai/config/RestBeanConfig.java
aai-core/src/test/java/org/onap/aai/AAISetup.java

index 4dc8860..123d530 100644 (file)
@@ -5,6 +5,7 @@
  * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Modifications Copyright © 2018 IBM.
+ * Modifications Copyright © 2024 DEUTSCHE TELEKOM AG.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,21 +26,20 @@ package org.onap.aai.config;
 import org.onap.aai.introspection.ModelType;
 import org.onap.aai.rest.db.HttpEntry;
 import org.onap.aai.serialization.engines.QueryStyle;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Scope;
+import org.springframework.web.context.annotation.RequestScope;
 
 @Configuration
 public class RestBeanConfig {
+    @RequestScope
     @Bean(name = "traversalUriHttpEntry")
-    @Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
     public HttpEntry traversalUriHttpEntry() {
         return new HttpEntry(ModelType.MOXY, QueryStyle.TRAVERSAL_URI);
     }
 
+    @RequestScope
     @Bean(name = "traversalHttpEntry")
-    @Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
     public HttpEntry traversalHttpEntry() {
         return new HttpEntry(ModelType.MOXY, QueryStyle.TRAVERSAL);
     }
index 72d8273..a44226c 100644 (file)
@@ -43,7 +43,9 @@ import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit4.rules.SpringClassRule;
 import org.springframework.test.context.junit4.rules.SpringMethodRule;
+import org.springframework.test.context.web.WebAppConfiguration;
 
+@WebAppConfiguration
 @ContextConfiguration(
         classes = {ConfigConfiguration.class, AAIConfigTranslator.class, EdgeIngestor.class, EdgeSerializer.class,
                 NodeIngestor.class, SpringContextAware.class, IntrospectionConfig.class, RestBeanConfig.class,