Re: [Resin-interest] small question about entity ejb
I found what was wrong, the begin() was not at the right place : query = ... homeobj = (Home) query.getSingleResult(); _ut.begin(); homeobj.setTitle("new-title"); _ut.commit(); Sorry for the trouble. I'll write a little sample to clarify all that (for me at least) The @TransactionAttribute still does the error "cannot read: mp/adminservlet.java" this is the function : @TransactionAttribute public boolean set_homeinfo(int id_user,String title) Scott Ferguson wrote: > 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 > -- 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
Re: [Resin-interest] small question about entity ejb
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 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. >>>
Re: [Resin-interest] small question about entity ejb
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...) Thanks. I've filed this as http://bugs.caucho.com/view.php?id=2514 It sounds like an Amber bug. -- 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 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")
Re: [Resin-interest] small question about entity ejb
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...) 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 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 hitems = (List)hqr.getResultList(); >>> if
Re: [Resin-interest] small question about entity ejb
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 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 hitems = (List)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
Re: [Resin-interest] small question about entity ejb
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 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 hitems = (List)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
Re: [Resin-interest] small question about entity ejb
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) 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 hitems = (List)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
Re: [Resin-interest] small question about entity ejb
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 hitems = (List)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
Re: [Resin-interest] small question about entity ejb
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 hitems = (List)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
Re: [Resin-interest] small question about entity ejb
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 hitems = (List)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. > -- Matt Johnston http://www.lattaoutdoors.com http://www.gearapalooza.com ___ resin-interest mailing list resin-interest@caucho.com http://maillist.caucho.com/mailman/listinfo/resin-interest