Re: [Resin-interest] small question about entity ejb

2008-03-12 Thread Scott Ferguson

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 

Re: [Resin-interest] small question about entity ejb

2008-03-12 Thread Riccardo Cohen
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

2008-03-11 Thread Riccardo Cohen

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);
Listhomeinfo hitems = (Listhomeinfo)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

2008-03-11 Thread Riccardo Cohen
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 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);
 Listhomeinfo hitems = (Listhomeinfo)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

Re: [Resin-interest] small question about entity ejb

2008-03-11 Thread Scott Ferguson

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 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);
Listhomeinfo hitems = (Listhomeinfo)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 

Re: [Resin-interest] small question about entity ejb

2008-03-10 Thread Daniel López
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);
  Listhomeinfo hitems = (Listhomeinfo)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

2008-03-10 Thread Daniel López
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);
  Listhomeinfo hitems = (Listhomeinfo)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

2008-03-10 Thread Riccardo Cohen
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);
  Listhomeinfo hitems = (Listhomeinfo)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

2008-03-10 Thread Scott Ferguson

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);
 Listhomeinfo hitems = (Listhomeinfo)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

2008-03-09 Thread Matt Johnston
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);
  Listhomeinfo hitems = (Listhomeinfo)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