persistence@glassfish.java.net

Re: Updated Objects Are Not Being Persisted

From: Adam Bien <abien_at_adam-bien.com>
Date: Sat, 12 Jul 2008 15:20:01 +0200

Hi Xedus,

you have to have an object to refresh it :-). If you clear the EM - it
should be empty - then it is forced to load the entities from the database.
Except - the second level cache is not too aggresive....

thank you in advance,

adam
xedus schrieb:
> greetings,
>
>
>
> you mean doing a refresh before doing find to update?
> is there a way to prevent caching which i think the reason for this
> problem....?
>
> thank you
>
>
> Adam Bien wrote:
>
>> Hi Xedus,
>>
>> and you do it inside a TX? Try to clear the EM before reading,
>>
>> adam
>> xedus schrieb:
>>
>>> 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 invoke 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 pritnig 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?
>>>
>>> please help
>>>
>>>
>>>
>>> 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....
>>>
>>>
>>>
>> --
>> Consultant, Author, Java Champion
>>
>> Homepage: www.adam-bien.com
>> Weblog: blog.adam-bien.com
>> eMail: abien_at_adam-bien.com
>> Mobile: 0049(0)170 280 3144
>>
>> Books: Enterprise Architekturen (ISBN: 393504299X),
>> Java EE 5 Architekturen (ISBN: 3939084247),
>> J2EE Patterns, J2EE Hotspots, Enterprise Frameworks and Struts
>>
>>
>>
>>
>>
>>
>
>