السلام عليكم ورحمة الله وبركاته
نظرا لصعوبة ترجمة المشكلة الى العربي اضطررت الى وضعها بالانجليزي
Hello everyone,
i'm runing a printing queue web service on glassfish v2, the clients ask for thier printing jobs and the server send it to them. After each successful print the client invokes a web service method to flag that certain job as being "done" so that the client will not have it sent to him again the next round when it askes for available printg jobs...
it hapens many times that the new status "done" will not persist to the data base which leads to the printing job being sent over and over again.
i tried container managed transactions and bean managed transaction with the same result. i even tried em.flush(), but no luck.....
i'm using oracle toplink..
here is how the code looks like .....
.
.
.
private void persist(Object obj){
try{
//ut.begin();
//em.merge(obj);
em.persist(obj);
//ut.commet();
}catch(Exception ex){
...
}
}
@webmethod
public boolean markJobAsDone(long jobID){
try{
PrintingJob aJob = em.find(PrintingJob.class,jobID);
aJob.setStatus("done");
persist(aJob);
}catch(Exception ex){
return false;
}
return true;
}also the clients are asking for jobs every 30 seconds
another question, is there any other aproach to these queues and jobs?
i just wanted to add that i can recreate the problem simply by changing the status of a job manualy form "SQL Developer" for example from "Done" to "pending" and the job will keep beibg sent and will never be set to "Done" again....
