I have a play model called “JobStatus” and it’s just got one property, an enum with a JobState, (Running/notRunning).
The class extends model and is implemented as a singleton. You call it’s getInstance() method to get the only record in the underlying table.
I have a job that runs every month and in the job I will toggle the state of the JobStatus object back and forth at various times and call .save().
I’ve noticed it isn’t actually saving.
When the job starts off, it’s first line of code is
JobStatus thisJobStatus = jobStatus.getInstance();
...// exit if already running
thisJobStatus.JobState = JobState.Running;
thisJobStatus.save()
then when the job is done it will change the status back to NotRunning and save again.
The issue is that when I look in the MySql database the actual record value is never changed.
This causes a catastrophic failure because when other nodes try to run the job they check the state and since they’re seeing it as NotRunning, they all try to run the job also.
So my clever scheme for managing job state is failing because the actual value isn’t getting commited to the DB.
How do I force Play to write to the DB right away when I call .save() on a model?
Thanks
Josh
try adding this to your JobStatus and call it after save.