Openbravo Issue Tracking System - Openbravo ERP
View Issue Details
0040898Openbravo ERPA. Platformpublic2019-05-17 11:012019-05-24 08:38
alostale 
alostale 
immediateminorhave not tried
closedfixed 
5
 
3.0PR19Q2.13.0PR19Q2.1 
caristu
Core
Production - Confirmed Stable
2017-05-18
3.0PR17Q3
http://code.openbravo.com/erp/devel/pi/rev/383058dac5699aa263e209cbfcd10000b8153d3f [^]
No
0040898: unreachable system after tying to create a record through ws with unlimited access license
In professional instances with unlimited WS calls if the very first action after Tomcat restart is invoking a WS that performs DB modifications with a limited role, the system becomes unreachable.

Under these circumstances, TreeTablesEventHandler cannot be initialized with ExceptionInInitializerError because it is not executed in admin mode. This class is not tried to be initialized afterward so any subsequent DAL flush with dirty entities will fail with NoClassDefFoundError.

The only way to overcome this situation is to restart Tomcat and perform a regular login as the first action.
In a professional instance with unlimited WS access:
1. Create a ws role with access to only Alert window and assign as default role for a new user
2. Restart Tomcat
3. Create through WS a new AlertRule
  -> ERROR: cannot perform action
java.lang.ExceptionInInitializerError
    ...
    at org.openbravo.client.kernel.event.PersistenceEventOBInterceptor.sendNewEvent(PersistenceEventOBInterceptor.java:94) ~[classes/:?]
    at org.openbravo.client.kernel.event.PersistenceEventOBInterceptor.onSave(PersistenceEventOBInterceptor.java:83) ~[classes/:?]
    at org.openbravo.client.kernel.event.PersistenceEventOBInterceptor$Proxy$_$$_WeldClientProxy.onSave(Unknown Source) ~[classes/:?]
    at org.openbravo.dal.core.OBInterceptor.onSave(OBInterceptor.java:244) ~[classes/:?]
    ...
Caused by: org.openbravo.base.exception.OBSecurityException: Entity ADTable is not readable by the user C63AF5553AEB4BC498A680DA95C89B70
    at org.openbravo.dal.security.EntityAccessChecker.checkReadable(EntityAccessChecker.java:548) ~[classes/:?]
    at org.openbravo.dal.service.OBDal.checkReadAccess(OBDal.java:741) ~[classes/:?]
    at org.openbravo.dal.service.OBDal.checkReadAccess(OBDal.java:728) ~[classes/:?]
    at org.openbravo.dal.service.OBDal.createCriteria(OBDal.java:564) ~[classes/:?]
    at org.openbravo.client.application.event.TreeTablesEventHandler.getTreeTables(TreeTablesEventHandler.java:167) ~[classes/:?]
    at org.openbravo.client.application.event.TreeTablesEventHandler.<clinit>(TreeTablesEventHandler.java:58) ~[classes/:?]
    ...
4. Try to login with Openbravo user
  -> ERROR: cannot login
       ...
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.openbravo.client.application.event.TreeTablesEventHandler
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:?]
    at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:490) ~[?:?]
    at org.jboss.weld.injection.ConstructorInjectionPoint.newInstance(ConstructorInjectionPoint.java:119) ~[weld-core-impl-3.1.1.Final.jar:3.1.1.Final]
    at org.jboss.weld.injection.ConstructorInjectionPoint.invokeAroundConstructCallbacks(ConstructorInjectionPoint.java:92) ~[weld-core-impl-3.1.1.Final.jar:3.1.1.Final]
    at org.jboss.weld.injection.ConstructorInjectionPoint.newInstance(ConstructorInjectionPoint.java:78) ~[weld-core-impl-3.1.1.Final.jar:3.1.1.Final]
    at org.jboss.weld.injection.producer.AbstractInstantiator.newInstance(AbstractInstantiator.java:28) ~[weld-core-impl-3.1.1.Final.jar:3.1.1.Final]
    at org.jboss.weld.injection.producer.BasicInjectionTarget.produce(BasicInjectionTarget.java:112) ~[weld-core-impl-3.1.1.Final.jar:3.1.1.Final]
    at org.jboss.weld.injection.producer.BeanInjectionTarget.produce(BeanInjectionTarget.java:186) ~[weld-core-impl-3.1.1.Final.jar:3.1.1.Final]
 ...
No tags attached.
blocks defect 0040897 closed alostale unreachable system after tying to create a record through ws with unlimited access license 
Issue History
2019-05-17 11:16alostaleTypedefect => backport
2019-05-17 11:16alostaleTarget Version => 3.0PR19Q2.1
2019-05-21 14:10hgbotCheckin
2019-05-21 14:10hgbotNote Added: 0111952
2019-05-21 14:10hgbotStatusscheduled => resolved
2019-05-21 14:10hgbotResolutionopen => fixed
2019-05-21 14:10hgbotFixed in SCM revision => http://code.openbravo.com/erp/backports/3.0PR19Q2.1/rev/4ef35101e3dd2a181dd19ef9fde684f8458acaf4 [^]
2019-05-24 08:38caristuNote Added: 0112109
2019-05-24 08:38caristuStatusresolved => closed
2019-05-24 08:38caristuFixed in Version => 3.0PR19Q2.1

Notes
(0111952)
hgbot   
2019-05-21 14:10   
Repository: erp/backports/3.0PR19Q2.1
Changeset: 4ef35101e3dd2a181dd19ef9fde684f8458acaf4
Author: Asier Lostalé <asier.lostale <at> openbravo.com>
Date: Fri May 17 11:14:19 2019 +0200
URL: http://code.openbravo.com/erp/backports/3.0PR19Q2.1/rev/4ef35101e3dd2a181dd19ef9fde684f8458acaf4 [^]

fixed bug 40898: broken system if tying to create a ws row with unlimited WS

  System became unreacheable after trtying to create/update a record through WS
  as first action after Tomcat restart having unlimited WS access license.

  This occurred because TreeTablesEventHandler initialization assumed to be in
  admin mode. As unlimited access license does not do any DB modification on login,
  which is what occurs in standard login and with limited acess licenses, first
  flush with dirty entities causes TreeTablesEventHandler init to fail in a
  unrecoverable manner.

  Now TreeTablesEventHandler is initialized in admin mode to prevent this case.

---
M modules/org.openbravo.client.application/src/org/openbravo/client/application/event/TreeTablesEventHandler.java
---
(0112109)
caristu   
2019-05-24 08:38   
Reviewed + tested