Bug 146 : Lazy Loading invoking PropertyChangeListener ... getting too many events
Priority 
High
Reported Version 
 
Logged By 
Rob
Status 
Fixed
Fixed Version 
2.1.0
Assigned To 
 
Product 
Ebean - core
Duplicate Of 
 
Created 
27/08/2009
Updated 
27/08/2009
Type 
Bug
 
Attachments 
No attachments

On lazy load too many events are fired to the PropertyChangeListener.

 
Rob 27 Aug 11:58
Patch from Mario

Index: core/src/main/java/com/avaje/ebean/server/core/RefreshHelp.java
===================================================================
--- core/src/main/java/com/avaje/ebean/server/core/RefreshHelp.java (revision 398)
+++ core/src/main/java/com/avaje/ebean/server/core/RefreshHelp.java Wed Aug 26 15:58:38 CEST 2009
@@ -92,7 +92,12 @@

} else {
Object dbVal = prop.getValue(dbBean);
+ if (isLazyLoad) {
+ prop.setValue(o, dbVal);
+ }
+ else {
- prop.setValueIntercept(o, dbVal);
+ prop.setValueIntercept(o, dbVal);
+ }

if (setOriginalOldValues){
// maintain original oldValues for partially loaded bean
@@ -109,8 +114,13 @@

} else {
Object dbVal = prop.getValue(dbBean);
+ if (isLazyLoad) {
+ prop.setValue(o, dbVal);
+ }
+ else {
- prop.setValueIntercept(o, dbVal);
+ prop.setValueIntercept(o, dbVal);
+ }
-
+
if (setOriginalOldValues){
// maintain original oldValues for partially loaded bean
prop.setValue(originalOldValues, dbVal);
Index: core/src/test/java/com/avaje/tests/idkeys/TestPropertyChangeSupport.java
===================================================================
--- core/src/test/java/com/avaje/tests/idkeys/TestPropertyChangeSupport.java (revision 383)
+++ core/src/test/java/com/avaje/tests/idkeys/TestPropertyChangeSupport.java Wed Aug 26 15:59:39 CEST 2009
@@ -142,19 +142,12 @@
// this will lazy load and update the property
logLazy.setDescription("updated log");

- // which should result in two PCE events
- assertEquals(2, pces.size());
+ // which should result in one PCE events
+ assertEquals(1, pces.size());

- // the first for updating the property from null to the value in the database
- PropertyChangeEvent lazyLoadEvent = pces.get(0);
+ // test for the acutal update of the value
+ PropertyChangeEvent propertyChangeEvent = pces.get(0);

- assertEquals("description", lazyLoadEvent.getPropertyName());
- assertNull(lazyLoadEvent.getOldValue());
- assertEquals("log", lazyLoadEvent.getNewValue());
-
- // the second for the acutal update of the value
- PropertyChangeEvent propertyChangeEvent = pces.get(1);
-
assertEquals("description", propertyChangeEvent.getPropertyName());
assertEquals("log", propertyChangeEvent.getOldValue());
assertEquals("updated log", propertyChangeEvent.getNewValue());

woResponse

Upload a file