Hi guys,
I've been successfully used Cayenne for years now, but we have a
really weird issue right now : Cayenne is committing columns that are
never modified in our code.. I'm pretty sure Cayenne is not the problem,
but more the way we use it and I'd like your help on Cayenne internals
to discover where it comes from.
In our product we manipulate jobs (tasks), and you can change their
statuses (stop/start/restart...etc). For some reason when we commit the
status of a job Cayenne randomely updates another one (or more). This is
happening quite a lot and we discovered the issue because we have
triggers auditing the database. Here's an extract of the audit :
_Change Date Time_ _UserID_ _DB Table_ _JobName_
_COLUMN_ _Before Value_ _After Value
_
2010-12-09 08:00:52.700 teixeira SMASTER_AUX ARCANO-PUT Change
Reason (Record Added) Force Restart : (Teixeira on
09/12/2010 08:00)
2010-12-09 08:00:52.707 teixeira SMASTER ARCANO-PUT Job
Status Failed Wait to Start
2010-12-09 08:00:52.723 teixeira SMASTER NXGLoadPosLe Job
Status Finished OK Job Running
2010-12-09 08:00:52.723 teixeira SMASTER NXGLoadPosLe Exit
Description 0000000000 Pid = 4456
2011-01-14 19:29:10.763 oper-jla SMASTER_AUX LODH-REC-T Change
Reason (Record Added) Skip : RZU (Oper-JLA on 14/01/2011
19:29)
2011-01-14 19:29:10.773 oper-jla SMASTER G2-RECONSO Job
Status Finished OK Job Running
2011-01-14 19:29:10.773 oper-jla SMASTER G2-RECONSO Exit
Description 0000000000 Pid = 8968
2011-01-14 19:29:10.783 oper-jla SMASTER LODH-REC-T Job
Status Wait Job Dependency Job to be Skipped
You can see here that when the job ARCANO-PUT is updated, the job
/NXGLoadPosLe /gets updated too. Same for /G2-RECONSO /who gets updated
along with LODH-REC-T. You can think that it's a pretty normal behavior
(if the objects are modified in the same ObjectContext they'll be
commited together) but I'm sure we NEVER modify the column _Exit
Description_ ! In the other hand there is a thread that regularly
updates those jobs from the database so Cayenne can refresh this _Exit
Description_ column.
My guess is that while a refresh is made from the DB and the _Exit
Description_ is updated, a commit is made at the same time. Can it cause
that issue ? What happens if a thread update/refresh the jobs while
another commits on the same ObjectContext ?
Thank you for your help on this.
Laurent