[appengine-java] Re: lost sub entity

2010-03-03 Thread Gunnar
Hi,
I finally found a solution like this:
list.add(first.copy());
where copy creates a new SubEntity and copies all fields except the
key to the new instance.
Do you regard this as a bug?
Gunnar


On 2 mar, 20:28, Gunnar gunnar@gmail.com wrote:
 I've uploaded my app to google with the same result, so it's not a
 problem with Eclipse or sdk version.
 Gunnar

 On 1 mar, 20:59, John Patterson jdpatter...@gmail.com wrote:

 http://lmgtfy.com/?q=appengine+jdo+%22default+fetch+group%22

  On 2 Mar 2010, at 02:50, Gunnar wrote:

   I don't jnow what you mean with look into default fetch group!.
   Please explain.
   Gunnar

   On 1 mar, 19:20, John Patterson jdpatter...@gmail.com wrote:
   Did you look into default fetch group?

   On 2 Mar 2010, at 01:04, Gunnar wrote:

   Hi,
   I followed Jakes advice to do e.setList(list) but no change.
   I've also stepped through my code, but there is no exception!
   Btw I use version 1.3.1 of the SDK.
   Gunnar

   On 1 mar, 15:28, John Patterson jdpatter...@gmail.com wrote:
   It is unusual that you see no  stack trace.  Are you sure you are  
   not
   catching it?  You could step through the code line by line to see
   what
   happens after the line with the problem.

   Could this be something to do with setting the fetch group to
   default?  That seems to be the problem with a lot of peoples JDO
   code :)

   On 1 Mar 2010, at 21:19, Jake wrote:

   If I recall, JDO is picky when it comes to being aware of changes
   made
   to a persisted object.  For example, changing fields directly
   (object.field = newValue;) doesn't work - you need to use a  
   getter/
   setter (object.setField(newValue);).  Perhaps you are encountering
   the
   same issue here?  Does the following type of thing work?

   LIstSubEntity list = e.getMyList();
   SubEntity first = list.remove(0);
   list.add(first);
   e.setMyList(list);
   pm.makePersistent(e);
   tx.commit();

   Jake

   On Feb 28, 11:05 am, Gunnar gunnar@gmail.com wrote:
   Hi,
   John and Karel, you are right about the placement of the commit
   statement.
   It worked in the test example because I only had one instance of
   MyEntity.
   I don't get any exception at all in the Eclipse console!
   When I add a second instance of MyEntity if fails with  
   Transaction
   is
   not active as expected.

   Now I've changed the code in the try statement like this, but  
   still
   the first sub entity is lost and no exception is thrown!
   (Of cause it would fail it the list is empty.)

   ListMyEntity results = (ListMyEntity) query.execute();
           if (results.iterator().hasNext()) {
                   tx.begin();
                   MyEntity e = results.iterator().next();
                   ListSubEntity list = e.getMyList();
                   SubEntity first = list.remove(0);
                   boolean ok = list.add(first);
                   if (!ok) {
                           System.err.println(could not add  
   first);
                   }
                   System.out.println(list);
                   pm.makePersistent(e);
                   tx.commit();
           }

   On 28 Feb, 02:51, John Patterson jdpatter...@gmail.com wrote:

   This should be throwing an exception.  The JavaDocs for
   Transaction.commit() say
   Commits the transaction. Whether this call succeeds or fails,  
   all
   subsequent method invocations on this object will throw
   IllegalStateException.

   When something does not work as you expect the first place to  
   look
   is
   the logs under your application console.

   On 28 Feb 2010, at 05:25, Karel Alvarez wrote:

   dont you get any exceptions stacktrace  in the server  
   console? it
   would help... also you are calling commit() inside the for  
   loop,
   although the transactions is started only once... that would
   crash
   in the second iteration in a normal db server, I am not sure  
   what
   GAE does with it, in any case I dont think it is what you
   intended...

   On Sat, Feb 27, 2010 at 2:52 PM, Gunnar gunnar@gmail.com
   wrote:
   Hi,
   I have problem with reordering a List.
   I created a test with an entity called MyEntity which have a
   ListSubEntity.
   First I persist one instance of MyEntity with a list  
   containing 3
   SubEntity.
   This works fine. Then I call a reorder servlet that moves the
   first
   SubEntity to the last position in the list.
   The result is that the first SubEntity is lost and the  
   datastore
   only
   contains 2 SubEntity instances.
   What can be wrong?
   Here is the reorder code:

   package com.google.appengine.demo;

   import java.io.IOException;
   import java.util.List;

   import javax.jdo.PersistenceManager;
   import javax.jdo.Query;
   import javax.jdo.Transaction;
   import javax.servlet.http.HttpServlet;
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;

   @SuppressWarnings(serial)
   public class ReorderServlet extends HttpServlet {
   

[appengine-java] Re: lost sub entity

2010-03-02 Thread Gunnar
I've uploaded my app to google with the same result, so it's not a
problem with Eclipse or sdk version.
Gunnar

On 1 mar, 20:59, John Patterson jdpatter...@gmail.com wrote:
 http://lmgtfy.com/?q=appengine+jdo+%22default+fetch+group%22

 On 2 Mar 2010, at 02:50, Gunnar wrote:

  I don't jnow what you mean with look into default fetch group!.
  Please explain.
  Gunnar

  On 1 mar, 19:20, John Patterson jdpatter...@gmail.com wrote:
  Did you look into default fetch group?

  On 2 Mar 2010, at 01:04, Gunnar wrote:

  Hi,
  I followed Jakes advice to do e.setList(list) but no change.
  I've also stepped through my code, but there is no exception!
  Btw I use version 1.3.1 of the SDK.
  Gunnar

  On 1 mar, 15:28, John Patterson jdpatter...@gmail.com wrote:
  It is unusual that you see no  stack trace.  Are you sure you are  
  not
  catching it?  You could step through the code line by line to see
  what
  happens after the line with the problem.

  Could this be something to do with setting the fetch group to
  default?  That seems to be the problem with a lot of peoples JDO
  code :)

  On 1 Mar 2010, at 21:19, Jake wrote:

  If I recall, JDO is picky when it comes to being aware of changes
  made
  to a persisted object.  For example, changing fields directly
  (object.field = newValue;) doesn't work - you need to use a  
  getter/
  setter (object.setField(newValue);).  Perhaps you are encountering
  the
  same issue here?  Does the following type of thing work?

  LIstSubEntity list = e.getMyList();
  SubEntity first = list.remove(0);
  list.add(first);
  e.setMyList(list);
  pm.makePersistent(e);
  tx.commit();

  Jake

  On Feb 28, 11:05 am, Gunnar gunnar@gmail.com wrote:
  Hi,
  John and Karel, you are right about the placement of the commit
  statement.
  It worked in the test example because I only had one instance of
  MyEntity.
  I don't get any exception at all in the Eclipse console!
  When I add a second instance of MyEntity if fails with  
  Transaction
  is
  not active as expected.

  Now I've changed the code in the try statement like this, but  
  still
  the first sub entity is lost and no exception is thrown!
  (Of cause it would fail it the list is empty.)

  ListMyEntity results = (ListMyEntity) query.execute();
          if (results.iterator().hasNext()) {
                  tx.begin();
                  MyEntity e = results.iterator().next();
                  ListSubEntity list = e.getMyList();
                  SubEntity first = list.remove(0);
                  boolean ok = list.add(first);
                  if (!ok) {
                          System.err.println(could not add  
  first);
                  }
                  System.out.println(list);
                  pm.makePersistent(e);
                  tx.commit();
          }

  On 28 Feb, 02:51, John Patterson jdpatter...@gmail.com wrote:

  This should be throwing an exception.  The JavaDocs for
  Transaction.commit() say
  Commits the transaction. Whether this call succeeds or fails,  
  all
  subsequent method invocations on this object will throw
  IllegalStateException.

  When something does not work as you expect the first place to  
  look
  is
  the logs under your application console.

  On 28 Feb 2010, at 05:25, Karel Alvarez wrote:

  dont you get any exceptions stacktrace  in the server  
  console? it
  would help... also you are calling commit() inside the for  
  loop,
  although the transactions is started only once... that would
  crash
  in the second iteration in a normal db server, I am not sure  
  what
  GAE does with it, in any case I dont think it is what you
  intended...

  On Sat, Feb 27, 2010 at 2:52 PM, Gunnar gunnar@gmail.com
  wrote:
  Hi,
  I have problem with reordering a List.
  I created a test with an entity called MyEntity which have a
  ListSubEntity.
  First I persist one instance of MyEntity with a list  
  containing 3
  SubEntity.
  This works fine. Then I call a reorder servlet that moves the
  first
  SubEntity to the last position in the list.
  The result is that the first SubEntity is lost and the  
  datastore
  only
  contains 2 SubEntity instances.
  What can be wrong?
  Here is the reorder code:

  package com.google.appengine.demo;

  import java.io.IOException;
  import java.util.List;

  import javax.jdo.PersistenceManager;
  import javax.jdo.Query;
  import javax.jdo.Transaction;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;

  @SuppressWarnings(serial)
  public class ReorderServlet extends HttpServlet {
        �...@suppresswarnings(unchecked)
         public void doGet(HttpServletRequest req,
  HttpServletResponse
  resp)
  throws IOException {
                 PersistenceManager pm =
  PMF.get().getPersistenceManager();
                 Query query = pm.newQuery(MyEntity.class);
                 Transaction tx = pm.currentTransaction();
                 try {
          

[appengine-java] Re: lost sub entity

2010-03-01 Thread Jake
If I recall, JDO is picky when it comes to being aware of changes made
to a persisted object.  For example, changing fields directly
(object.field = newValue;) doesn't work - you need to use a getter/
setter (object.setField(newValue);).  Perhaps you are encountering the
same issue here?  Does the following type of thing work?

LIstSubEntity list = e.getMyList();
SubEntity first = list.remove(0);
list.add(first);
e.setMyList(list);
pm.makePersistent(e);
tx.commit();

Jake

On Feb 28, 11:05 am, Gunnar gunnar@gmail.com wrote:
 Hi,
 John and Karel, you are right about the placement of the commit
 statement.
 It worked in the test example because I only had one instance of
 MyEntity.
 I don't get any exception at all in the Eclipse console!
 When I add a second instance of MyEntity if fails with Transaction is
 not active as expected.

 Now I've changed the code in the try statement like this, but still
 the first sub entity is lost and no exception is thrown!
 (Of cause it would fail it the list is empty.)

 ListMyEntity results = (ListMyEntity) query.execute();
         if (results.iterator().hasNext()) {
                 tx.begin();
                 MyEntity e = results.iterator().next();
                 ListSubEntity list = e.getMyList();
                 SubEntity first = list.remove(0);
                 boolean ok = list.add(first);
                 if (!ok) {
                         System.err.println(could not add first);
                 }
                 System.out.println(list);
                 pm.makePersistent(e);
                 tx.commit();
         }

 On 28 Feb, 02:51, John Patterson jdpatter...@gmail.com wrote:

  This should be throwing an exception.  The JavaDocs for  
  Transaction.commit() say
  Commits the transaction. Whether this call succeeds or fails, all  
  subsequent method invocations on this object will throw  
  IllegalStateException.

  When something does not work as you expect the first place to look is  
  the logs under your application console.

  On 28 Feb 2010, at 05:25, Karel Alvarez wrote:

   dont you get any exceptions stacktrace  in the server console? it  
   would help... also you are calling commit() inside the for loop,  
   although the transactions is started only once... that would crash  
   in the second iteration in a normal db server, I am not sure what  
   GAE does with it, in any case I dont think it is what you intended...

   On Sat, Feb 27, 2010 at 2:52 PM, Gunnar gunnar@gmail.com wrote:
   Hi,
   I have problem with reordering a List.
   I created a test with an entity called MyEntity which have a
   ListSubEntity.
   First I persist one instance of MyEntity with a list containing 3
   SubEntity.
   This works fine. Then I call a reorder servlet that moves the first
   SubEntity to the last position in the list.
   The result is that the first SubEntity is lost and the datastore only
   contains 2 SubEntity instances.
   What can be wrong?
   Here is the reorder code:

   package com.google.appengine.demo;

   import java.io.IOException;
   import java.util.List;

   import javax.jdo.PersistenceManager;
   import javax.jdo.Query;
   import javax.jdo.Transaction;
   import javax.servlet.http.HttpServlet;
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;

   @SuppressWarnings(serial)
   public class ReorderServlet extends HttpServlet {
         �...@suppresswarnings(unchecked)
          public void doGet(HttpServletRequest req, HttpServletResponse  
   resp)
   throws IOException {
                  PersistenceManager pm =  
   PMF.get().getPersistenceManager();
                  Query query = pm.newQuery(MyEntity.class);
                  Transaction tx = pm.currentTransaction();
                  try {
                          tx.begin();
                          ListMyEntity results = (ListMyEntity)  
   query.execute();
                          if (results.iterator().hasNext()) {
                                  for (MyEntity e : results) {
                                          ListSubEntity list =  
   e.getMyList();
                                          SubEntity first =  
   list.remove(0);
                                          boolean ok = list.add(first);
                                          if (!ok) {

   System.err.println(could not add first);
                                          }
                                          System.out.println(list);
                                          pm.makePersistent(e);
                                          tx.commit();
                                  }
                          }
                  } catch (Exception e) {
                          e.printStackTrace();
                  } finally {
                          if (tx.isActive())
                                  tx.rollback();
                          query.closeAll();
                          pm.close();
                  }
              

Re: [appengine-java] Re: lost sub entity

2010-03-01 Thread John Patterson
It is unusual that you see no  stack trace.  Are you sure you are not  
catching it?  You could step through the code line by line to see what  
happens after the line with the problem.


Could this be something to do with setting the fetch group to  
default?  That seems to be the problem with a lot of peoples JDO code :)


On 1 Mar 2010, at 21:19, Jake wrote:


If I recall, JDO is picky when it comes to being aware of changes made
to a persisted object.  For example, changing fields directly
(object.field = newValue;) doesn't work - you need to use a getter/
setter (object.setField(newValue);).  Perhaps you are encountering the
same issue here?  Does the following type of thing work?

LIstSubEntity list = e.getMyList();
SubEntity first = list.remove(0);
list.add(first);
e.setMyList(list);
pm.makePersistent(e);
tx.commit();

Jake

On Feb 28, 11:05 am, Gunnar gunnar@gmail.com wrote:

Hi,
John and Karel, you are right about the placement of the commit
statement.
It worked in the test example because I only had one instance of
MyEntity.
I don't get any exception at all in the Eclipse console!
When I add a second instance of MyEntity if fails with Transaction  
is

not active as expected.

Now I've changed the code in the try statement like this, but still
the first sub entity is lost and no exception is thrown!
(Of cause it would fail it the list is empty.)

ListMyEntity results = (ListMyEntity) query.execute();
if (results.iterator().hasNext()) {
tx.begin();
MyEntity e = results.iterator().next();
ListSubEntity list = e.getMyList();
SubEntity first = list.remove(0);
boolean ok = list.add(first);
if (!ok) {
System.err.println(could not add first);
}
System.out.println(list);
pm.makePersistent(e);
tx.commit();
}

On 28 Feb, 02:51, John Patterson jdpatter...@gmail.com wrote:


This should be throwing an exception.  The JavaDocs for
Transaction.commit() say
Commits the transaction. Whether this call succeeds or fails, all
subsequent method invocations on this object will throw
IllegalStateException.


When something does not work as you expect the first place to look  
is

the logs under your application console.



On 28 Feb 2010, at 05:25, Karel Alvarez wrote:



dont you get any exceptions stacktrace  in the server console? it
would help... also you are calling commit() inside the for loop,
although the transactions is started only once... that would crash
in the second iteration in a normal db server, I am not sure what
GAE does with it, in any case I dont think it is what you  
intended...


On Sat, Feb 27, 2010 at 2:52 PM, Gunnar gunnar@gmail.com  
wrote:

Hi,
I have problem with reordering a List.
I created a test with an entity called MyEntity which have a
ListSubEntity.
First I persist one instance of MyEntity with a list containing 3
SubEntity.
This works fine. Then I call a reorder servlet that moves the first
SubEntity to the last position in the list.
The result is that the first SubEntity is lost and the datastore  
only

contains 2 SubEntity instances.
What can be wrong?
Here is the reorder code:



package com.google.appengine.demo;



import java.io.IOException;
import java.util.List;



import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.jdo.Transaction;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



@SuppressWarnings(serial)
public class ReorderServlet extends HttpServlet {
   @SuppressWarnings(unchecked)
   public void doGet(HttpServletRequest req,  
HttpServletResponse

resp)
throws IOException {
   PersistenceManager pm =
PMF.get().getPersistenceManager();
   Query query = pm.newQuery(MyEntity.class);
   Transaction tx = pm.currentTransaction();
   try {
   tx.begin();
   ListMyEntity results = (ListMyEntity)
query.execute();
   if (results.iterator().hasNext()) {
   for (MyEntity e : results) {
   ListSubEntity list =
e.getMyList();
   SubEntity first =
list.remove(0);
   boolean ok =  
list.add(first);

   if (!ok) {



System.err.println(could not add first);
   }
   System.out.println(list);
   pm.makePersistent(e);
   tx.commit();
   }
   }
   } catch (Exception e) {
   e.printStackTrace();
   } finally {
   if (tx.isActive())

[appengine-java] Re: lost sub entity

2010-03-01 Thread Gunnar
Hi,
I followed Jakes advice to do e.setList(list) but no change.
I've also stepped through my code, but there is no exception!
Btw I use version 1.3.1 of the SDK.
Gunnar


On 1 mar, 15:28, John Patterson jdpatter...@gmail.com wrote:
 It is unusual that you see no  stack trace.  Are you sure you are not  
 catching it?  You could step through the code line by line to see what  
 happens after the line with the problem.

 Could this be something to do with setting the fetch group to  
 default?  That seems to be the problem with a lot of peoples JDO code :)

 On 1 Mar 2010, at 21:19, Jake wrote:

  If I recall, JDO is picky when it comes to being aware of changes made
  to a persisted object.  For example, changing fields directly
  (object.field = newValue;) doesn't work - you need to use a getter/
  setter (object.setField(newValue);).  Perhaps you are encountering the
  same issue here?  Does the following type of thing work?

  LIstSubEntity list = e.getMyList();
  SubEntity first = list.remove(0);
  list.add(first);
  e.setMyList(list);
  pm.makePersistent(e);
  tx.commit();

  Jake

  On Feb 28, 11:05 am, Gunnar gunnar@gmail.com wrote:
  Hi,
  John and Karel, you are right about the placement of the commit
  statement.
  It worked in the test example because I only had one instance of
  MyEntity.
  I don't get any exception at all in the Eclipse console!
  When I add a second instance of MyEntity if fails with Transaction  
  is
  not active as expected.

  Now I've changed the code in the try statement like this, but still
  the first sub entity is lost and no exception is thrown!
  (Of cause it would fail it the list is empty.)

  ListMyEntity results = (ListMyEntity) query.execute();
          if (results.iterator().hasNext()) {
                  tx.begin();
                  MyEntity e = results.iterator().next();
                  ListSubEntity list = e.getMyList();
                  SubEntity first = list.remove(0);
                  boolean ok = list.add(first);
                  if (!ok) {
                          System.err.println(could not add first);
                  }
                  System.out.println(list);
                  pm.makePersistent(e);
                  tx.commit();
          }

  On 28 Feb, 02:51, John Patterson jdpatter...@gmail.com wrote:

  This should be throwing an exception.  The JavaDocs for
  Transaction.commit() say
  Commits the transaction. Whether this call succeeds or fails, all
  subsequent method invocations on this object will throw
  IllegalStateException.

  When something does not work as you expect the first place to look  
  is
  the logs under your application console.

  On 28 Feb 2010, at 05:25, Karel Alvarez wrote:

  dont you get any exceptions stacktrace  in the server console? it
  would help... also you are calling commit() inside the for loop,
  although the transactions is started only once... that would crash
  in the second iteration in a normal db server, I am not sure what
  GAE does with it, in any case I dont think it is what you  
  intended...

  On Sat, Feb 27, 2010 at 2:52 PM, Gunnar gunnar@gmail.com  
  wrote:
  Hi,
  I have problem with reordering a List.
  I created a test with an entity called MyEntity which have a
  ListSubEntity.
  First I persist one instance of MyEntity with a list containing 3
  SubEntity.
  This works fine. Then I call a reorder servlet that moves the first
  SubEntity to the last position in the list.
  The result is that the first SubEntity is lost and the datastore  
  only
  contains 2 SubEntity instances.
  What can be wrong?
  Here is the reorder code:

  package com.google.appengine.demo;

  import java.io.IOException;
  import java.util.List;

  import javax.jdo.PersistenceManager;
  import javax.jdo.Query;
  import javax.jdo.Transaction;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;

  @SuppressWarnings(serial)
  public class ReorderServlet extends HttpServlet {
        �...@suppresswarnings(unchecked)
         public void doGet(HttpServletRequest req,  
  HttpServletResponse
  resp)
  throws IOException {
                 PersistenceManager pm =
  PMF.get().getPersistenceManager();
                 Query query = pm.newQuery(MyEntity.class);
                 Transaction tx = pm.currentTransaction();
                 try {
                         tx.begin();
                         ListMyEntity results = (ListMyEntity)
  query.execute();
                         if (results.iterator().hasNext()) {
                                 for (MyEntity e : results) {
                                         ListSubEntity list =
  e.getMyList();
                                         SubEntity first =
  list.remove(0);
                                         boolean ok =  
  list.add(first);
                                         if (!ok) {

  System.err.println(could not add first);
                  

[appengine-java] Re: lost sub entity

2010-03-01 Thread Gunnar
Hi,
I have not defined any fetch group, should I? If so how should I do
that?
Gunnar


On 1 mar, 15:28, John Patterson jdpatter...@gmail.com wrote:
 It is unusual that you see no  stack trace.  Are you sure you are not  
 catching it?  You could step through the code line by line to see what  
 happens after the line with the problem.

 Could this be something to do with setting the fetch group to  
 default?  That seems to be the problem with a lot of peoples JDO code :)

 On 1 Mar 2010, at 21:19, Jake wrote:

  If I recall, JDO is picky when it comes to being aware of changes made
  to a persisted object.  For example, changing fields directly
  (object.field = newValue;) doesn't work - you need to use a getter/
  setter (object.setField(newValue);).  Perhaps you are encountering the
  same issue here?  Does the following type of thing work?

  LIstSubEntity list = e.getMyList();
  SubEntity first = list.remove(0);
  list.add(first);
  e.setMyList(list);
  pm.makePersistent(e);
  tx.commit();

  Jake

  On Feb 28, 11:05 am, Gunnar gunnar@gmail.com wrote:
  Hi,
  John and Karel, you are right about the placement of the commit
  statement.
  It worked in the test example because I only had one instance of
  MyEntity.
  I don't get any exception at all in the Eclipse console!
  When I add a second instance of MyEntity if fails with Transaction  
  is
  not active as expected.

  Now I've changed the code in the try statement like this, but still
  the first sub entity is lost and no exception is thrown!
  (Of cause it would fail it the list is empty.)

  ListMyEntity results = (ListMyEntity) query.execute();
          if (results.iterator().hasNext()) {
                  tx.begin();
                  MyEntity e = results.iterator().next();
                  ListSubEntity list = e.getMyList();
                  SubEntity first = list.remove(0);
                  boolean ok = list.add(first);
                  if (!ok) {
                          System.err.println(could not add first);
                  }
                  System.out.println(list);
                  pm.makePersistent(e);
                  tx.commit();
          }

  On 28 Feb, 02:51, John Patterson jdpatter...@gmail.com wrote:

  This should be throwing an exception.  The JavaDocs for
  Transaction.commit() say
  Commits the transaction. Whether this call succeeds or fails, all
  subsequent method invocations on this object will throw
  IllegalStateException.

  When something does not work as you expect the first place to look  
  is
  the logs under your application console.

  On 28 Feb 2010, at 05:25, Karel Alvarez wrote:

  dont you get any exceptions stacktrace  in the server console? it
  would help... also you are calling commit() inside the for loop,
  although the transactions is started only once... that would crash
  in the second iteration in a normal db server, I am not sure what
  GAE does with it, in any case I dont think it is what you  
  intended...

  On Sat, Feb 27, 2010 at 2:52 PM, Gunnar gunnar@gmail.com  
  wrote:
  Hi,
  I have problem with reordering a List.
  I created a test with an entity called MyEntity which have a
  ListSubEntity.
  First I persist one instance of MyEntity with a list containing 3
  SubEntity.
  This works fine. Then I call a reorder servlet that moves the first
  SubEntity to the last position in the list.
  The result is that the first SubEntity is lost and the datastore  
  only
  contains 2 SubEntity instances.
  What can be wrong?
  Here is the reorder code:

  package com.google.appengine.demo;

  import java.io.IOException;
  import java.util.List;

  import javax.jdo.PersistenceManager;
  import javax.jdo.Query;
  import javax.jdo.Transaction;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;

  @SuppressWarnings(serial)
  public class ReorderServlet extends HttpServlet {
        �...@suppresswarnings(unchecked)
         public void doGet(HttpServletRequest req,  
  HttpServletResponse
  resp)
  throws IOException {
                 PersistenceManager pm =
  PMF.get().getPersistenceManager();
                 Query query = pm.newQuery(MyEntity.class);
                 Transaction tx = pm.currentTransaction();
                 try {
                         tx.begin();
                         ListMyEntity results = (ListMyEntity)
  query.execute();
                         if (results.iterator().hasNext()) {
                                 for (MyEntity e : results) {
                                         ListSubEntity list =
  e.getMyList();
                                         SubEntity first =
  list.remove(0);
                                         boolean ok =  
  list.add(first);
                                         if (!ok) {

  System.err.println(could not add first);
                                         }
                                         

Re: [appengine-java] Re: lost sub entity

2010-03-01 Thread John Patterson

Did you look into default fetch group?

On 2 Mar 2010, at 01:04, Gunnar wrote:


Hi,
I followed Jakes advice to do e.setList(list) but no change.
I've also stepped through my code, but there is no exception!
Btw I use version 1.3.1 of the SDK.
Gunnar


On 1 mar, 15:28, John Patterson jdpatter...@gmail.com wrote:

It is unusual that you see no  stack trace.  Are you sure you are not
catching it?  You could step through the code line by line to see  
what

happens after the line with the problem.

Could this be something to do with setting the fetch group to
default?  That seems to be the problem with a lot of peoples JDO  
code :)


On 1 Mar 2010, at 21:19, Jake wrote:

If I recall, JDO is picky when it comes to being aware of changes  
made

to a persisted object.  For example, changing fields directly
(object.field = newValue;) doesn't work - you need to use a getter/
setter (object.setField(newValue);).  Perhaps you are encountering  
the

same issue here?  Does the following type of thing work?



LIstSubEntity list = e.getMyList();
SubEntity first = list.remove(0);
list.add(first);
e.setMyList(list);
pm.makePersistent(e);
tx.commit();



Jake



On Feb 28, 11:05 am, Gunnar gunnar@gmail.com wrote:

Hi,
John and Karel, you are right about the placement of the commit
statement.
It worked in the test example because I only had one instance of
MyEntity.
I don't get any exception at all in the Eclipse console!
When I add a second instance of MyEntity if fails with Transaction
is
not active as expected.



Now I've changed the code in the try statement like this, but still
the first sub entity is lost and no exception is thrown!
(Of cause it would fail it the list is empty.)



ListMyEntity results = (ListMyEntity) query.execute();
if (results.iterator().hasNext()) {
tx.begin();
MyEntity e = results.iterator().next();
ListSubEntity list = e.getMyList();
SubEntity first = list.remove(0);
boolean ok = list.add(first);
if (!ok) {
System.err.println(could not add first);
}
System.out.println(list);
pm.makePersistent(e);
tx.commit();
}



On 28 Feb, 02:51, John Patterson jdpatter...@gmail.com wrote:



This should be throwing an exception.  The JavaDocs for
Transaction.commit() say
Commits the transaction. Whether this call succeeds or fails, all
subsequent method invocations on this object will throw
IllegalStateException.



When something does not work as you expect the first place to look
is
the logs under your application console.



On 28 Feb 2010, at 05:25, Karel Alvarez wrote:



dont you get any exceptions stacktrace  in the server console? it
would help... also you are calling commit() inside the for loop,
although the transactions is started only once... that would  
crash

in the second iteration in a normal db server, I am not sure what
GAE does with it, in any case I dont think it is what you
intended...



On Sat, Feb 27, 2010 at 2:52 PM, Gunnar gunnar@gmail.com
wrote:
Hi,
I have problem with reordering a List.
I created a test with an entity called MyEntity which have a
ListSubEntity.
First I persist one instance of MyEntity with a list containing 3
SubEntity.
This works fine. Then I call a reorder servlet that moves the  
first

SubEntity to the last position in the list.
The result is that the first SubEntity is lost and the datastore
only
contains 2 SubEntity instances.
What can be wrong?
Here is the reorder code:



package com.google.appengine.demo;



import java.io.IOException;
import java.util.List;



import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.jdo.Transaction;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



@SuppressWarnings(serial)
public class ReorderServlet extends HttpServlet {
   @SuppressWarnings(unchecked)
   public void doGet(HttpServletRequest req,
HttpServletResponse
resp)
throws IOException {
   PersistenceManager pm =
PMF.get().getPersistenceManager();
   Query query = pm.newQuery(MyEntity.class);
   Transaction tx = pm.currentTransaction();
   try {
   tx.begin();
   ListMyEntity results = (ListMyEntity)
query.execute();
   if (results.iterator().hasNext()) {
   for (MyEntity e : results) {
   ListSubEntity list =
e.getMyList();
   SubEntity first =
list.remove(0);
   boolean ok =
list.add(first);
   if (!ok) {



System.err.println(could not add first);
   }
   System.out.println(list);
   

[appengine-java] Re: lost sub entity

2010-03-01 Thread Gunnar
I don't jnow what you mean with look into default fetch group!.
Please explain.
Gunnar

On 1 mar, 19:20, John Patterson jdpatter...@gmail.com wrote:
 Did you look into default fetch group?

 On 2 Mar 2010, at 01:04, Gunnar wrote:

  Hi,
  I followed Jakes advice to do e.setList(list) but no change.
  I've also stepped through my code, but there is no exception!
  Btw I use version 1.3.1 of the SDK.
  Gunnar

  On 1 mar, 15:28, John Patterson jdpatter...@gmail.com wrote:
  It is unusual that you see no  stack trace.  Are you sure you are not
  catching it?  You could step through the code line by line to see  
  what
  happens after the line with the problem.

  Could this be something to do with setting the fetch group to
  default?  That seems to be the problem with a lot of peoples JDO  
  code :)

  On 1 Mar 2010, at 21:19, Jake wrote:

  If I recall, JDO is picky when it comes to being aware of changes  
  made
  to a persisted object.  For example, changing fields directly
  (object.field = newValue;) doesn't work - you need to use a getter/
  setter (object.setField(newValue);).  Perhaps you are encountering  
  the
  same issue here?  Does the following type of thing work?

  LIstSubEntity list = e.getMyList();
  SubEntity first = list.remove(0);
  list.add(first);
  e.setMyList(list);
  pm.makePersistent(e);
  tx.commit();

  Jake

  On Feb 28, 11:05 am, Gunnar gunnar@gmail.com wrote:
  Hi,
  John and Karel, you are right about the placement of the commit
  statement.
  It worked in the test example because I only had one instance of
  MyEntity.
  I don't get any exception at all in the Eclipse console!
  When I add a second instance of MyEntity if fails with Transaction
  is
  not active as expected.

  Now I've changed the code in the try statement like this, but still
  the first sub entity is lost and no exception is thrown!
  (Of cause it would fail it the list is empty.)

  ListMyEntity results = (ListMyEntity) query.execute();
          if (results.iterator().hasNext()) {
                  tx.begin();
                  MyEntity e = results.iterator().next();
                  ListSubEntity list = e.getMyList();
                  SubEntity first = list.remove(0);
                  boolean ok = list.add(first);
                  if (!ok) {
                          System.err.println(could not add first);
                  }
                  System.out.println(list);
                  pm.makePersistent(e);
                  tx.commit();
          }

  On 28 Feb, 02:51, John Patterson jdpatter...@gmail.com wrote:

  This should be throwing an exception.  The JavaDocs for
  Transaction.commit() say
  Commits the transaction. Whether this call succeeds or fails, all
  subsequent method invocations on this object will throw
  IllegalStateException.

  When something does not work as you expect the first place to look
  is
  the logs under your application console.

  On 28 Feb 2010, at 05:25, Karel Alvarez wrote:

  dont you get any exceptions stacktrace  in the server console? it
  would help... also you are calling commit() inside the for loop,
  although the transactions is started only once... that would  
  crash
  in the second iteration in a normal db server, I am not sure what
  GAE does with it, in any case I dont think it is what you
  intended...

  On Sat, Feb 27, 2010 at 2:52 PM, Gunnar gunnar@gmail.com
  wrote:
  Hi,
  I have problem with reordering a List.
  I created a test with an entity called MyEntity which have a
  ListSubEntity.
  First I persist one instance of MyEntity with a list containing 3
  SubEntity.
  This works fine. Then I call a reorder servlet that moves the  
  first
  SubEntity to the last position in the list.
  The result is that the first SubEntity is lost and the datastore
  only
  contains 2 SubEntity instances.
  What can be wrong?
  Here is the reorder code:

  package com.google.appengine.demo;

  import java.io.IOException;
  import java.util.List;

  import javax.jdo.PersistenceManager;
  import javax.jdo.Query;
  import javax.jdo.Transaction;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;

  @SuppressWarnings(serial)
  public class ReorderServlet extends HttpServlet {
        �...@suppresswarnings(unchecked)
         public void doGet(HttpServletRequest req,
  HttpServletResponse
  resp)
  throws IOException {
                 PersistenceManager pm =
  PMF.get().getPersistenceManager();
                 Query query = pm.newQuery(MyEntity.class);
                 Transaction tx = pm.currentTransaction();
                 try {
                         tx.begin();
                         ListMyEntity results = (ListMyEntity)
  query.execute();
                         if (results.iterator().hasNext()) {
                                 for (MyEntity e : results) {
                                         ListSubEntity list =
  e.getMyList();
            

Re: [appengine-java] Re: lost sub entity

2010-03-01 Thread John Patterson

http://lmgtfy.com/?q=appengine+jdo+%22default+fetch+group%22

On 2 Mar 2010, at 02:50, Gunnar wrote:


I don't jnow what you mean with look into default fetch group!.
Please explain.
Gunnar

On 1 mar, 19:20, John Patterson jdpatter...@gmail.com wrote:

Did you look into default fetch group?

On 2 Mar 2010, at 01:04, Gunnar wrote:


Hi,
I followed Jakes advice to do e.setList(list) but no change.
I've also stepped through my code, but there is no exception!
Btw I use version 1.3.1 of the SDK.
Gunnar



On 1 mar, 15:28, John Patterson jdpatter...@gmail.com wrote:
It is unusual that you see no  stack trace.  Are you sure you are  
not

catching it?  You could step through the code line by line to see
what
happens after the line with the problem.



Could this be something to do with setting the fetch group to
default?  That seems to be the problem with a lot of peoples JDO
code :)



On 1 Mar 2010, at 21:19, Jake wrote:



If I recall, JDO is picky when it comes to being aware of changes
made
to a persisted object.  For example, changing fields directly
(object.field = newValue;) doesn't work - you need to use a  
getter/

setter (object.setField(newValue);).  Perhaps you are encountering
the
same issue here?  Does the following type of thing work?



LIstSubEntity list = e.getMyList();
SubEntity first = list.remove(0);
list.add(first);
e.setMyList(list);
pm.makePersistent(e);
tx.commit();



Jake



On Feb 28, 11:05 am, Gunnar gunnar@gmail.com wrote:

Hi,
John and Karel, you are right about the placement of the commit
statement.
It worked in the test example because I only had one instance of
MyEntity.
I don't get any exception at all in the Eclipse console!
When I add a second instance of MyEntity if fails with  
Transaction

is
not active as expected.


Now I've changed the code in the try statement like this, but  
still

the first sub entity is lost and no exception is thrown!
(Of cause it would fail it the list is empty.)



ListMyEntity results = (ListMyEntity) query.execute();
if (results.iterator().hasNext()) {
tx.begin();
MyEntity e = results.iterator().next();
ListSubEntity list = e.getMyList();
SubEntity first = list.remove(0);
boolean ok = list.add(first);
if (!ok) {
System.err.println(could not add  
first);

}
System.out.println(list);
pm.makePersistent(e);
tx.commit();
}



On 28 Feb, 02:51, John Patterson jdpatter...@gmail.com wrote:



This should be throwing an exception.  The JavaDocs for
Transaction.commit() say
Commits the transaction. Whether this call succeeds or fails,  
all

subsequent method invocations on this object will throw
IllegalStateException.


When something does not work as you expect the first place to  
look

is
the logs under your application console.



On 28 Feb 2010, at 05:25, Karel Alvarez wrote:


dont you get any exceptions stacktrace  in the server  
console? it
would help... also you are calling commit() inside the for  
loop,

although the transactions is started only once... that would
crash
in the second iteration in a normal db server, I am not sure  
what

GAE does with it, in any case I dont think it is what you
intended...



On Sat, Feb 27, 2010 at 2:52 PM, Gunnar gunnar@gmail.com
wrote:
Hi,
I have problem with reordering a List.
I created a test with an entity called MyEntity which have a
ListSubEntity.
First I persist one instance of MyEntity with a list  
containing 3

SubEntity.
This works fine. Then I call a reorder servlet that moves the
first
SubEntity to the last position in the list.
The result is that the first SubEntity is lost and the  
datastore

only
contains 2 SubEntity instances.
What can be wrong?
Here is the reorder code:



package com.google.appengine.demo;



import java.io.IOException;
import java.util.List;



import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.jdo.Transaction;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



@SuppressWarnings(serial)
public class ReorderServlet extends HttpServlet {
   @SuppressWarnings(unchecked)
   public void doGet(HttpServletRequest req,
HttpServletResponse
resp)
throws IOException {
   PersistenceManager pm =
PMF.get().getPersistenceManager();
   Query query = pm.newQuery(MyEntity.class);
   Transaction tx = pm.currentTransaction();
   try {
   tx.begin();
   ListMyEntity results =  
(ListMyEntity)

query.execute();
   if (results.iterator().hasNext()) {
   for (MyEntity e : results) {
   ListSubEntity list =
e.getMyList();
   SubEntity first =
list.remove(0);

[appengine-java] Re: lost sub entity

2010-02-28 Thread Gunnar
Hi,
John and Karel, you are right about the placement of the commit
statement.
It worked in the test example because I only had one instance of
MyEntity.
I don't get any exception at all in the Eclipse console!
When I add a second instance of MyEntity if fails with Transaction is
not active as expected.

Now I've changed the code in the try statement like this, but still
the first sub entity is lost and no exception is thrown!
(Of cause it would fail it the list is empty.)

ListMyEntity results = (ListMyEntity) query.execute();
if (results.iterator().hasNext()) {
tx.begin();
MyEntity e = results.iterator().next();
ListSubEntity list = e.getMyList();
SubEntity first = list.remove(0);
boolean ok = list.add(first);
if (!ok) {
System.err.println(could not add first);
}
System.out.println(list);
pm.makePersistent(e);
tx.commit();
}


On 28 Feb, 02:51, John Patterson jdpatter...@gmail.com wrote:
 This should be throwing an exception.  The JavaDocs for  
 Transaction.commit() say
 Commits the transaction. Whether this call succeeds or fails, all  
 subsequent method invocations on this object will throw  
 IllegalStateException.

 When something does not work as you expect the first place to look is  
 the logs under your application console.

 On 28 Feb 2010, at 05:25, Karel Alvarez wrote:

  dont you get any exceptions stacktrace  in the server console? it  
  would help... also you are calling commit() inside the for loop,  
  although the transactions is started only once... that would crash  
  in the second iteration in a normal db server, I am not sure what  
  GAE does with it, in any case I dont think it is what you intended...

  On Sat, Feb 27, 2010 at 2:52 PM, Gunnar gunnar@gmail.com wrote:
  Hi,
  I have problem with reordering a List.
  I created a test with an entity called MyEntity which have a
  ListSubEntity.
  First I persist one instance of MyEntity with a list containing 3
  SubEntity.
  This works fine. Then I call a reorder servlet that moves the first
  SubEntity to the last position in the list.
  The result is that the first SubEntity is lost and the datastore only
  contains 2 SubEntity instances.
  What can be wrong?
  Here is the reorder code:

  package com.google.appengine.demo;

  import java.io.IOException;
  import java.util.List;

  import javax.jdo.PersistenceManager;
  import javax.jdo.Query;
  import javax.jdo.Transaction;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;

  @SuppressWarnings(serial)
  public class ReorderServlet extends HttpServlet {
        �...@suppresswarnings(unchecked)
         public void doGet(HttpServletRequest req, HttpServletResponse  
  resp)
  throws IOException {
                 PersistenceManager pm =  
  PMF.get().getPersistenceManager();
                 Query query = pm.newQuery(MyEntity.class);
                 Transaction tx = pm.currentTransaction();
                 try {
                         tx.begin();
                         ListMyEntity results = (ListMyEntity)  
  query.execute();
                         if (results.iterator().hasNext()) {
                                 for (MyEntity e : results) {
                                         ListSubEntity list =  
  e.getMyList();
                                         SubEntity first =  
  list.remove(0);
                                         boolean ok = list.add(first);
                                         if (!ok) {

  System.err.println(could not add first);
                                         }
                                         System.out.println(list);
                                         pm.makePersistent(e);
                                         tx.commit();
                                 }
                         }
                 } catch (Exception e) {
                         e.printStackTrace();
                 } finally {
                         if (tx.isActive())
                                 tx.rollback();
                         query.closeAll();
                         pm.close();
                 }
                 resp.setContentType(text/plain);
                 resp.getWriter().println(reordered);
         }
  }

  --
  You received this message because you are subscribed to the Google  
  Groups Google App Engine for Java group.
  To post to this group, send email to google-appengine-java@googlegroups.com
  .
  To unsubscribe from this group, send email to 
  google-appengine-java+unsubscr...@googlegroups.com
  .
  For more options, visit this group 
  athttp://groups.google.com/group/google-appengine-java?hl=en
  .

  --
  You received this message because you are subscribed to the Google  
  Groups Google App Engine for Java