Openbravo Issue Tracking System - Openbravo ERP
View Issue Details
0039006Openbravo ERPA. Platformpublic2018-07-20 08:132018-07-27 10:27
alostale 
alostale 
urgentmajorrandom
closedfixed 
5
 
3.0PR18Q33.0PR18Q3 
caristu
Core
No
0039006: BaseComponentProvider is not thread safe
BaseComponentProvider has a field (appDependencies) which is thread unsafe.

This static field is a HashMap which is not thread safe, it is generally initialized by different ComponentProviders in their static initializers for example in MobileCoreComponentProvider:

  static {
    // Set dependency on Mobile Core app
    BaseComponentProvider.setAppDependencies(MobileCoreConstants.RETAIL_CORE,
        Arrays.asList(MobileCoreConstants.APP_IDENTIFIER));
  }


If two different threads execute static initializer of different ComponentProviders concurrently, the contents of this field can be uncertain.
Unclear and random.

It could cause the following problem:

1. In an instance with retail
2. Load login page
  -> ERROR: Nothing is loaded an error page is seen saying "The WebPOS cannot be loaded"

This can occur the first time login page is loaded. If it occurs, WebPOS won't be loadable till Tomcat is restarted, if it does not occur 1st load, subsequent ones will continue working.

See https://ci.openbravo.com/view/try-retail/job/try-ret-test-pgsql-suite8/4853/artifact/SANDBOX/automation/pi-mobile/last-results/try-ret-test-pgsql-suite8/screenshots/15%3A01%3A44%20FAILED%3A%20ATT010_AttributesLayaways.png [^]
Change appDependencies from HashMap to ConcurrentHashMap.
No tags attached.
blocks defect 0039005 closed alostale BaseComponentProvider is not thread safe 
Issue History
2018-07-20 08:33alostaleTypedefect => backport
2018-07-20 08:33alostaleTarget Version => 3.0PR18Q3
2018-07-20 09:05hgbotCheckin
2018-07-20 09:05hgbotNote Added: 0105821
2018-07-20 09:05hgbotStatusscheduled => resolved
2018-07-20 09:05hgbotResolutionopen => fixed
2018-07-20 09:05hgbotFixed in SCM revision => http://code.openbravo.com/erp/backports/3.0PR18Q3/rev/09564d201f76928ccbdf9ea5372913ce6c3e8c35 [^]
2018-07-27 10:27caristuNote Added: 0105973
2018-07-27 10:27caristuStatusresolved => closed
2018-07-27 10:27caristuFixed in Version => 3.0PR18Q3

Notes
(0105821)
hgbot   
2018-07-20 09:05   
Repository: erp/backports/3.0PR18Q3
Changeset: 09564d201f76928ccbdf9ea5372913ce6c3e8c35
Author: Asier Lostalé <asier.lostale <at> openbravo.com>
Date: Fri Jul 20 08:30:59 2018 +0200
URL: http://code.openbravo.com/erp/backports/3.0PR18Q3/rev/09564d201f76928ccbdf9ea5372913ce6c3e8c35 [^]

fixed bug 39006: BaseComponentProvider is not thread safe

  Static appDependencies has been changed from HashMap to ConcurrentHashMap,
  this field can potentially be concurrently initialized from several classes
  being HashMap not thread safe can lead to inconsistent results.

---
M modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/BaseComponentProvider.java
---
(0105973)
caristu   
2018-07-27 10:27   
Code reviewed