Openbravo Issue Tracking System - Openbravo ERP
View Issue Details
0039007Openbravo ERPA. Platformpublic2018-07-20 08:132018-07-27 10:28
alostale 
alostale 
urgentmajorrandom
closedfixed 
5
 
3.0PR18Q2.23.0PR18Q2.2 
caristu
Core
No
0039007: 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.0PR18Q2.2
2018-07-20 08:57hgbotCheckin
2018-07-20 08:57hgbotNote Added: 0105820
2018-07-20 08:57hgbotStatusscheduled => resolved
2018-07-20 08:57hgbotResolutionopen => fixed
2018-07-20 08:57hgbotFixed in SCM revision => http://code.openbravo.com/erp/backports/3.0PR18Q2.2/rev/50cdb7ce18beb7aac148724ab47ac8afe708c780 [^]
2018-07-27 10:28caristuNote Added: 0105974
2018-07-27 10:28caristuStatusresolved => closed
2018-07-27 10:28caristuFixed in Version => 3.0PR18Q2.2

Notes
(0105820)
hgbot   
2018-07-20 08:57   
Repository: erp/backports/3.0PR18Q2.2
Changeset: 50cdb7ce18beb7aac148724ab47ac8afe708c780
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.0PR18Q2.2/rev/50cdb7ce18beb7aac148724ab47ac8afe708c780 [^]

fixed bug 39007: 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
---
(0105974)
caristu   
2018-07-27 10:28   
Code reviewed