svn commit: r1090955 - in /ofbiz/branches/release10.04: ./ framework/entity/src/org/ofbiz/entity/Delegator.java framework/entity/src/org/ofbiz/entity/DelegatorFactory.java framework/entity/src/org/ofbiz/entity/GenericDelegator.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1090955 - in /ofbiz/branches/release10.04: ./ framework/entity/src/org/ofbiz/entity/Delegator.java framework/entity/src/org/ofbiz/entity/DelegatorFactory.java framework/entity/src/org/ofbiz/entity/GenericDelegator.java

jleroux@apache.org
Author: jleroux
Date: Mon Apr 11 07:13:44 2011
New Revision: 1090955

URL: http://svn.apache.org/viewvc?rev=1090955&view=rev
Log:
"Applied fix from trunk for revision: 1090952"
------------------------------------------------------------------------
r1090952 | jleroux | 2011-04-11 09:03:32 +0200 (lun., 11 avr. 2011) | 4 lines

A patch from Sascha Rodekamp "Infinite loop when instantiate the delegator using distributetCacheClear" https://issues.apache.org/jira/browse/OFBIZ-3987

We found an infinite loop when instantiate the delegator. This happens when you use the distributetCacheClear .
I moved the init of the dist cache clear to a separate method and call it in the factory which resolves the loop issue.
------------------------------------------------------------------------


Modified:
    ofbiz/branches/release10.04/   (props changed)
    ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/Delegator.java
    ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/DelegatorFactory.java
    ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/GenericDelegator.java

Propchange: ofbiz/branches/release10.04/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Apr 11 07:13:44 2011
@@ -1,3 +1,3 @@
 /ofbiz/branches/addbirt:831210-885099,885686-886087
 /ofbiz/branches/multitenant20100310:921280-927264
-/ofbiz/trunk:939988,939990,939999,940025,940053,940234,940248,940309,940401,940410,940425,940779,940815,940849,940851,941007,941047,941109,941177,941199,941261,941440,941600,941999,942084,942406,942414,942671,942883-942884,943168,943271-943272,943843,944614,944621,944623,944647,944669,944797,944895,945010,945018,945026,945118,945573,945578,945580,945582,945610,945619,945848,945852,945857,946061,946066,946073,946075,946080,946309,946313,946320,946322,946596,947004-947005,947392,947424,947679,947988,948017,948694,949174,949710,949844,950866,950870,950893,951005,951062,951098,951251,951367,951381,951672,952232,952249,952270,953294,953671,954135,954583,954733,954956,955568,956022,956206,956340,957160,958343,958514,958521,958752,958758,958769,958953,959456,960143,960491,960997,963610,964558,965470,965916,966525,966785,967098,978806,978893,978939,979104,980641-980642,980935,981051,981104,981123,981288,983920,983930,985163,985298,985473,985718,985856,985902,987841,989166,990127,990
 339,990539,991485,993344,993387,995384,995686,996069,996078-996079,996563,997418-997420,997423-997425,997431,997440,997526,997990,998061,998412,998557,1000621,1000725,1000998,1001099,1001131,1001185,1001574,1001849,1001962,1002963,1003434,1003450,1003829,1004139,1027756,1027960,1028053,1028625,1028627,1029600,1030016,1030385,1030390,1033928,1033953,1034138,1034179,1035080,1035084,1036426,1036669,1037507,1037559-1037560,1037567,1037883,1038228,1038990,1039256,1040044,1040091,1042009,1042034,1042038,1042132,1042188,1042222,1042317,1042348,1042396,1042411,1042950,1043861,1043996-1043998,1044047,1044084,1044912,1049031,1050602,1051111,1051450,1051812,1052195,1053285,1053289,1054565,1055057,1056072,1056305,1056803,1057519,1058028,1058056,1058488,1059180,1060236,1060261,1060368,1060933,1061167,1061307,1061346,1061886,1061939,1062138,1062144,1062152,1063273,1064090,1064953,1064993,1065550,1066048,1067097,1067942,1069597,1069965,1070193,1070229,1072017,1072378,1074624,1075205,107595
 2,1076115,1080218,1080959,1083144,1084572,1084671,1084689,1084855,1085697,1085774
+/ofbiz/trunk:939988,939990,939999,940025,940053,940234,940248,940309,940401,940410,940425,940779,940815,940849,940851,941007,941047,941109,941177,941199,941261,941440,941600,941999,942084,942406,942414,942671,942883-942884,943168,943271-943272,943843,944614,944621,944623,944647,944669,944797,944895,945010,945018,945026,945118,945573,945578,945580,945582,945610,945619,945848,945852,945857,946061,946066,946073,946075,946080,946309,946313,946320,946322,946596,947004-947005,947392,947424,947679,947988,948017,948694,949174,949710,949844,950866,950870,950893,951005,951062,951098,951251,951367,951381,951672,952232,952249,952270,953294,953671,954135,954583,954733,954956,955568,956022,956206,956340,957160,958343,958514,958521,958752,958758,958769,958953,959456,960143,960491,960997,963610,964558,965470,965916,966525,966785,967098,978806,978893,978939,979104,980641-980642,980935,981051,981104,981123,981288,983920,983930,985163,985298,985473,985718,985856,985902,987841,989166,990127,990
 339,990539,991485,993344,993387,995384,995686,996069,996078-996079,996563,997418-997420,997423-997425,997431,997440,997526,997990,998061,998412,998557,1000621,1000725,1000998,1001099,1001131,1001185,1001574,1001849,1001962,1002963,1003434,1003450,1003829,1004139,1027756,1027960,1028053,1028625,1028627,1029600,1030016,1030385,1030390,1033928,1033953,1034138,1034179,1035080,1035084,1036426,1036669,1037507,1037559-1037560,1037567,1037883,1038228,1038990,1039256,1040044,1040091,1042009,1042034,1042038,1042132,1042188,1042222,1042317,1042348,1042396,1042411,1042950,1043861,1043996-1043998,1044047,1044084,1044912,1049031,1050602,1051111,1051450,1051812,1052195,1053285,1053289,1054565,1055057,1056072,1056305,1056803,1057519,1058028,1058056,1058488,1059180,1060236,1060261,1060368,1060933,1061167,1061307,1061346,1061886,1061939,1062138,1062144,1062152,1063273,1064090,1064953,1064993,1065550,1066048,1067097,1067942,1069597,1069965,1070193,1070229,1072017,1072378,1074624,1075205,107595
 2,1076115,1080218,1080959,1083144,1084572,1084671,1084689,1084855,1085697,1085774,1090952

Modified: ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/Delegator.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/Delegator.java?rev=1090955&r1=1090954&r2=1090955&view=diff
==============================================================================
--- ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/Delegator.java (original)
+++ ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/Delegator.java Mon Apr 11 07:13:44 2011
@@ -796,6 +796,8 @@ public interface Delegator {
 
     public void initEntityEcaHandler();
 
+    public void initDistributedCacheClear();
+
     public GenericPK makePK(Element element);
 
     /** Creates a Primary Key in the form of a GenericPK without persisting it */

Modified: ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/DelegatorFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/DelegatorFactory.java?rev=1090955&r1=1090954&r2=1090955&view=diff
==============================================================================
--- ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/DelegatorFactory.java (original)
+++ ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/DelegatorFactory.java Mon Apr 11 07:13:44 2011
@@ -41,6 +41,10 @@ public abstract class DelegatorFactory i
                 // setup the Entity ECA Handler
                 delegator.initEntityEcaHandler();
                 //Debug.logInfo("got delegator(" + delegatorName + ") from cache", module);
+                
+                // setup the distributed CacheClear
+                delegator.initDistributedCacheClear();
+
                 return delegator;
             }
             try {

Modified: ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/GenericDelegator.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/GenericDelegator.java?rev=1090955&r1=1090954&r2=1090955&view=diff
==============================================================================
--- ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/GenericDelegator.java (original)
+++ ofbiz/branches/release10.04/framework/entity/src/org/ofbiz/entity/GenericDelegator.java Mon Apr 11 07:13:44 2011
@@ -280,38 +280,11 @@ public class GenericDelegator implements
 
         // setup the crypto class; this also after the delegator is in the cache otherwise we get infinite recursion
         this.crypto = new EntityCrypto(this);
-
-        //time to do some tricks with manual class loading that resolves circular dependencies, like calling services...
-        ClassLoader loader = Thread.currentThread().getContextClassLoader();
-
-        // if useDistributedCacheClear is false do nothing since the
-        // distributedCacheClear member field with a null value will cause the
-        // dcc code to do nothing
-        if (getDelegatorInfo().useDistributedCacheClear) {
-            // initialize the distributedCacheClear mechanism
-            String distributedCacheClearClassName = getDelegatorInfo().distributedCacheClearClassName;
-
-            try {
-                Class<?> dccClass = loader.loadClass(distributedCacheClearClassName);
-                this.distributedCacheClear = (DistributedCacheClear) dccClass.newInstance();
-                this.distributedCacheClear.setDelegator(this, getDelegatorInfo().distributedCacheClearUserLoginId);
-            } catch (ClassNotFoundException e) {
-                Debug.logWarning(e, "DistributedCacheClear class with name " + distributedCacheClearClassName + " was not found, distributed cache clearing will be disabled", module);
-            } catch (InstantiationException e) {
-                Debug.logWarning(e, "DistributedCacheClear class with name " + distributedCacheClearClassName + " could not be instantiated, distributed cache clearing will be disabled", module);
-            } catch (IllegalAccessException e) {
-                Debug.logWarning(e, "DistributedCacheClear class with name " + distributedCacheClearClassName + " could not be accessed (illegal), distributed cache clearing will be disabled", module);
-            } catch (ClassCastException e) {
-                Debug.logWarning(e, "DistributedCacheClear class with name " + distributedCacheClearClassName + " does not implement the DistributedCacheClear interface, distributed cache clearing will be disabled", module);
-            }
-        } else {
-            Debug.logInfo("Distributed Cache Clear System disabled for delegator [" + delegatorFullName + "]", module);
-        }
     }
-    
+
     protected void setDelegatorNames(String delegatorFullName) {
         this.delegatorFullName = delegatorFullName;
-        
+
         int hashSymbolIndex = delegatorFullName.indexOf('#');
         if (hashSymbolIndex == -1) {
             this.delegatorBaseName = delegatorFullName;
@@ -325,10 +298,13 @@ public class GenericDelegator implements
      * @see org.ofbiz.entity.Delegator#initEntityEcaHandler()
      */
     public synchronized void initEntityEcaHandler() {
-        if (!getDelegatorInfo().useEntityEca || this.entityEcaHandler != null) {
+        // Nothing to do if already assigned: the class loader has already been called, the class instantiated and casted to EntityEcaHandler
+        if (this.entityEcaHandler != null) {
             return;
         }
+        // If useEntityEca is false do nothing: the entityEcaHandler member field with a null value would cause its code to do nothing
         if (getDelegatorInfo().useEntityEca) {
+            //time to do some tricks with manual class loading that resolves circular dependencies, like calling services
             ClassLoader loader = Thread.currentThread().getContextClassLoader();
             // initialize the entity eca handler
             String entityEcaHandlerClassName = getDelegatorInfo().entityEcaHandlerClassName;
@@ -781,7 +757,7 @@ public class GenericDelegator implements
             } catch (GenericEntityException e) {
                 // see if this was caused by an existing record before resetting the sequencer and trying again
                 // NOTE: use the helper directly so ECA rules, etc won't be run
-                
+
                 GenericValue existingValue = null;
                 try {
                     existingValue = helper.findByPrimaryKey(value.getPrimaryKey());
@@ -2823,4 +2799,38 @@ public class GenericDelegator implements
             this.value = value;
         }
     }
+
+    /* (non-Javadoc)
+     * @see org.ofbiz.entity.Delegator#initDistributedCacheClear()
+     */
+    public void initDistributedCacheClear() {
+        // Nothing to do if already assigned: the class loader has already been called, the class instantiated and casted to DistributedCacheClear
+        if (this.distributedCacheClear != null) {
+            return;
+        }
+
+        // If useDistributedCacheClear is false do nothing: the distributedCacheClear member field with a null value would cause dcc code to do nothing
+        if (getDelegatorInfo().useDistributedCacheClear) {
+            //time to do some tricks with manual class loading that resolves circular dependencies, like calling services
+            ClassLoader loader = Thread.currentThread().getContextClassLoader();
+            // initialize the distributedCacheClear mechanism
+            String distributedCacheClearClassName = getDelegatorInfo().distributedCacheClearClassName;
+
+            try {
+                Class<?> dccClass = loader.loadClass(distributedCacheClearClassName);
+                this.distributedCacheClear = UtilGenerics.cast(dccClass.newInstance());
+                this.distributedCacheClear.setDelegator(this, getDelegatorInfo().distributedCacheClearUserLoginId);
+            } catch (ClassNotFoundException e) {
+                Debug.logWarning(e, "DistributedCacheClear class with name " + distributedCacheClearClassName + " was not found, distributed cache clearing will be disabled", module);
+            } catch (InstantiationException e) {
+                Debug.logWarning(e, "DistributedCacheClear class with name " + distributedCacheClearClassName + " could not be instantiated, distributed cache clearing will be disabled", module);
+            } catch (IllegalAccessException e) {
+                Debug.logWarning(e, "DistributedCacheClear class with name " + distributedCacheClearClassName + " could not be accessed (illegal), distributed cache clearing will be disabled", module);
+            } catch (ClassCastException e) {
+                Debug.logWarning(e, "DistributedCacheClear class with name " + distributedCacheClearClassName + " does not implement the DistributedCacheClear interface, distributed cache clearing will be disabled", module);
+            }
+        } else {
+            Debug.logVerbose("Distributed Cache Clear System disabled for delegator [" + delegatorFullName + "]", module);
+        }
+    }
 }