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.)
List<MyEntity> results = (List<MyEntity>) query.execute();
if (results.iterator().hasNext()) {
tx.begin();
MyEntity e = results.iterator().next();
List<SubEntity> 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 <[email protected]> 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 <[email protected]> wrote:
> > Hi,
> > I have problem with reordering a List.
> > I created a test with an entity called MyEntity which have a
> > List<SubEntity>.
> > 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();
> > List<MyEntity> results = (List<MyEntity>)
> > query.execute();
> > if (results.iterator().hasNext()) {
> > for (MyEntity e : results) {
> > List<SubEntity> 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 [email protected]
> > .
> > To unsubscribe from this group, send email to
> > [email protected]
> > .
> > 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" group.
> > To post to this group, send email to [email protected]
> > .
> > To unsubscribe from this group, send email to
> > [email protected]
> > .
> > 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" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine-java?hl=en.