On Mar 11, 2008, at 6:28 AM, Riccardo Cohen wrote:

> After some new tests, I found something that works :
>
> if I do :
>
>         homeobj=m_manager.find(homeinfo.class,theid);
>         homeobj.setTitle(title);
>
> the object is saved
> but if I use the homeobj that comes from
>
> Query hqr=m_manager.createQuery("select h from homeinfo h where
> h.id_user="+id_user);
>
> and I try to call setTitle, then the object is not saved.
>
> I don't understand why, can somebody explain me please ? (or give a  
> link
> to the right doc...)

Can you turn on the log for this to make sure it's in a transaction?   
The @TransactionAttribute must be on a protected or public method, by  
the way.  There was a missing validation that didn't report an error  
on a private method.

I've just tested that case for the Query inside a transaction and the  
changed data is getting properly updated in my example.

e.g.

@In UserTransaction _ut;

void foo()
{
   _ut.begin();

   query = ...
   homeobj = (Home) query.getSingleResult();
   homeobj.setTitle("new-title");

   _ut.commit();
}

or

@TransactionAttribute
protected void foo()
{
   query = ...;
   homeobj = (Home) query.getSingleResult();
   homeobj.setTitle("new-title");
}

-- Scott

>
>
> Thanks a lot.
>
>
>
> Riccardo Cohen wrote:
>> Hi again,
>>
>> I tried @TransactionAnnotation but it generated frequent errors  
>> like this :
>>
>> [10:44:42.851] {http--8000-2} error: cannot read: mp/ 
>> adminservlet.java
>> [10:44:42.851] {http--8000-2} 1 error
>>
>> the select still work but no update
>>
>>
>> I tried then with the UserTransaction method, but there was no  
>> update. I
>> looked at the amber-basic-field example, and found that even if the
>> _uTrans was defined, it was not used, instead I found
>> _manager.getTransaction(), so I tried with that, and still no update.
>>
>> but now I can see in the finer log for sql :
>>
>> [11:18:22.968] {http--8000-10} mp_db_pool.0:setAutoCommit(false)
>> [11:18:22.968] {http--8000-10} mp_db_pool.0:commit()
>> [11:18:22.969] {http--8000-10} mp_db_pool.0:setAutoCommit(true)
>>
>> Which means that the transaction is being used, but no update when  
>> doing
>> setTitle()
>>
>> I must be missing something, because the sample works all right. I
>> re-read all conf, and found nothing strange. The only difference  
>> seems
>> to be that I use jdbc to mysql instead of "jdbc/resin" embedded db.
>>
>> Thanks for any info.
>> Attached some files of my little test.
>>
>> Scott Ferguson wrote:
>>> On Mar 10, 2008, at 1:29 AM, Riccardo Cohen wrote:
>>>
>>>> Thanks a lot, I understand that I need a transaction now, while  
>>>> before
>>>> it could work without this... I have no idea of how to do that.
>>>>
>>>> I noticed that in the doc of amber
>>>> (http://caucho.com/resin/doc/amber.xtp) there was a
>>>> @TransactionAnnotation but this makes a syntax error !
>>>> Thanks to eclipse I found a @TransactionAnn, I added it at the
>>>> beginning
>>>> of my function definition, but this does not change (no update
>>>> generated)
>>>
>>> It should be @TransactionAttribute.  I'm fixing the docs.
>>>
>>> The @TransactionAttribute is the easiest method.  You need to put it
>>> on a Resin-IoC-aware object, e.g. a <bean> or an EJB stateless bean
>>> or  a servlet.  If you put it on an arbitrary class, it won't do
>>> anything.
>>>
>>> You can also use UserTransaction to do essentially the same thing:
>>>
>>> class MyFoo {
>>>   @In UserTransaction _ut;
>>>
>>>   void myStuff()
>>>   {
>>>     _ut.begin();
>>>     try {
>>>       ...
>>>     } finally {
>>>       ut.commit();
>>>     }
>>>  }
>>>
>>> That's essentially identical to
>>>
>>>   @TransactionAttribute void myStuff()
>>>   {
>>>     ...
>>>   }
>>>
>>> If you turn logging level="fine", you'll see the transaction  
>>> begin()/
>>> commit().  So you can use the log to make sure the transactions are
>>> working properly.
>>>
>>> -- Scott
>>>>
>>>> Is there any doc about this ?
>>>> Thanks
>>>>
>>>> Daniel López wrote:
>>>>> Hi again,
>>>>>
>>>>> Some quick tests show that no persist() or merge() should be   
>>>>> necessary
>>>>> to update an entity inside a persistent context. I tested with
>>>>> Hibernate
>>>>> and Amber as persistence providers and in both cases, nothing was
>>>>> necessary. That was using Resin 3.1.5 and RESOURCE_LOCAL as
>>>>> transaction
>>>>> type, which means that the problem might be with the container   
>>>>> managed
>>>>> transactions.
>>>>>
>>>>> S!
>>>>> D.
>>>>>
>>>>> Daniel López escribió:
>>>>>> AFAIK, using merge should not be necessary unless the entity  
>>>>>> has  been
>>>>>> updated outside a "persistent context" and then needs to be
>>>>>> synchronised
>>>>>> back with the DB contents. persist() is just for new entities so
>>>>>> reading
>>>>>> the docs, updating an entity inside a persistent context should
>>>>>> require
>>>>>> no action. Unless an exception is thrown, of course ;).
>>>>>>
>>>>>> I'm going to do some tests...
>>>>>>
>>>>>> S!
>>>>>> D.
>>>>>>
>>>>>> Matt Johnston escribió:
>>>>>>> I think you will need to use either the persist() or merge()
>>>>>>> methods of
>>>>>>> the EntityManager in order to save your data to the database. In
>>>>>>> your
>>>>>>> case since you are updating an existing record, you will need to
>>>>>>> use:
>>>>>>>
>>>>>>> m_manager.merge(homeobj)
>>>>>>>
>>>>>>>
>>>>>>> Matt
>>>>>>>
>>>>>>> Riccardo Cohen wrote:
>>>>>>>> Hi
>>>>>>>> I used to play with entity ejb with resin 3.0 with no problem.
>>>>>>>> Now in
>>>>>>>> 3.1.5 I have this code :
>>>>>>>>
>>>>>>>>  @PersistenceContext(name="public") private EntityManager
>>>>>>>> m_manager;
>>>>>>>>
>>>>>>>>  public boolean set_homeinfo(int id_user,String title)
>>>>>>>>  {
>>>>>>>>    boolean success=false;
>>>>>>>>    Query hqr=m_manager.createQuery("select h from homeinfo h   
>>>>>>>> where
>>>>>>>> h.id_user="+id_user);
>>>>>>>>    List<homeinfo> hitems = (List<homeinfo>)hqr.getResultList();
>>>>>>>>    if (hitems.size()==1)
>>>>>>>>    {
>>>>>>>>      homeinfo homeobj=hitems.get(0);
>>>>>>>>      System.out.println("title was "+homeobj.getTitle());
>>>>>>>>      homeobj.setTitle(title);
>>>>>>>>      success=true;
>>>>>>>>    }
>>>>>>>>    return(success);
>>>>>>>>  }
>>>>>>>>
>>>>>>>> The select works all right, but the "title" field is never
>>>>>>>> modified. I
>>>>>>>> added finer info on sql to see database requests in log, and
>>>>>>>> there is no
>>>>>>>> "update". Did I miss something ?
>>>>>>>>
>>>>>>>> I looked at the resin amber tutorials, but there are only  
>>>>>>>> "select"
>>>>>>>> samples, I did not see "insert" and "update" samples... I  
>>>>>>>> remember
>>>>>>>> problems like this with 3.0 when the entity bean was reused, it
>>>>>>>> was not
>>>>>>>> saved, but here it is not the case.
>>>>>>>>
>>>>>>>> Thanks for any help.
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> resin-interest mailing list
>>>>> resin-interest@caucho.com
>>>>> http://maillist.caucho.com/mailman/listinfo/resin-interest
>>>>>
>>>> -- 
>>>> Très cordialement,
>>>>
>>>> Riccardo Cohen
>>>> -------------------------------------------
>>>> Articque
>>>> http://www.articque.com
>>>> 149 av Général de Gaulle
>>>> 37230 Fondettes - France
>>>> tel : 02-47-49-90-49
>>>> fax : 02-47-49-91-49
>>>>
>>>>
>>>> _______________________________________________
>>>> resin-interest mailing list
>>>> resin-interest@caucho.com
>>>> http://maillist.caucho.com/mailman/listinfo/resin-interest
>>>
>>>
>>>
>>> _______________________________________________
>>> resin-interest mailing list
>>> resin-interest@caucho.com
>>> http://maillist.caucho.com/mailman/listinfo/resin-interest
>>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> resin-interest mailing list
>> resin-interest@caucho.com
>> http://maillist.caucho.com/mailman/listinfo/resin-interest
>
> -- 
> Très cordialement,
>
> Riccardo Cohen
> -------------------------------------------
> Articque
> http://www.articque.com
> 149 av Général de Gaulle
> 37230 Fondettes - France
> tel : 02-47-49-90-49
> fax : 02-47-49-91-49
>
>
> _______________________________________________
> resin-interest mailing list
> resin-interest@caucho.com
> http://maillist.caucho.com/mailman/listinfo/resin-interest



_______________________________________________
resin-interest mailing list
resin-interest@caucho.com
http://maillist.caucho.com/mailman/listinfo/resin-interest

Reply via email to