Hi,
Today I came one step close to understand the way GenericDao has implemented
the update in DB. I thought this understanding might be of use to someone who
is new
to CloudStack like myself. Please read on
Observation:
Changes in a setter in VO would never reflect in the DB.
public setName(String name) {
# it gets stored with the contents of argument "name" not "this.name"
this.name = "Name: " + name;
}
Reason:
The setter functions of a VO are intercepted and
UpdateBuilder.java stores the
argument in a private list "_changes" and this is what is used to update the DB
at a later stage and *not* the object present in the member variable
"this.name".
Suggestion/Fix:
In my case I had a function like the following
private String counterParameters;
setCounterParameters(Map map) {
//loop through all the entry sets
// concatenate them as a tempString store it like the following
this.counterParameters = tempString;
}
I changed it as
# Plain vanilla function that is intercepted for update
setCounterParameters(String counterParmaaters) {
this.counterParameters = counterParameters;
}
#custom setter which changes values
setCounterParametersForUpdate(Map map)
{
// loop through all the entry sets
// concatenate them as a tempString
setCounterParameters(tempString);
}
Any other Recommendation?:
Is there a better way to get the Fix done?
Thanks,
Vijay V.