Hi,
Can anybody help solve my problem?
Gunnar
Here is the testcode:
package appengine.test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import javax.jdo.JDOHelper;
import javax.jdo.ObjectState;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.jdo.Transaction;
import javax.jdo.spi.PersistenceCapable;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public class ListordertestServlet extends HttpServlet {
StringBuilder sb = new StringBuilder();
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
sb = new StringBuilder();
resp.setContentType("text/plain");
deleteAll();
MyEntity entity = persist();
entity = add(entity, "one");
query();
entity = add(entity, "two");
query();
entity = add(entity, "three");
query();
entity = reorder(entity);
query();
resp.getWriter().println(sb.toString());
}
private MyEntity persist() {
MyEntity entity = new MyEntity();
// MyEntity detached = null;
ArrayList<SubEntity> subEntities = new ArrayList<SubEntity>();
entity.setMyList(subEntities);
PersistenceManager pm = PMF.get().getPersistenceManager();
Transaction tx = pm.currentTransaction();
pm.setDetachAllOnCommit(true);
try {
tx.begin();
pm.makePersistent(entity);
tx.commit();
// detached = pm.detachCopy(entity);
sb.append("persisted entity: " + entity.getId() + "\n");
// sb.append("detached object: " + detached + "\n");
} catch (Exception e) {
printStackTrace(e);
} finally {
if (tx.isActive())
tx.rollback();
pm.close();
}
// return detached;
return entity;
}
private MyEntity add(MyEntity entity, String name) {
// MyEntity detached = null;
sb.append("before add " + entity.toString() + "\n");
PersistenceManager pm = PMF.get().getPersistenceManager();
Transaction tx = pm.currentTransaction();
pm.setDetachAllOnCommit(true);
try {
tx.begin();
final SubEntity subEntity = new SubEntity(name);
entity.getMyList().add(0,subEntity);
entity = pm.makePersistent(entity);
tx.commit();
// detached = pm.detachCopy(entity);
// pm.detachCopy(entity);
sb.append("added sub-entity " + name + "\n");
// sb.append("detached object: " + detached + "\n");
sb.append("after add: " + entity + "\n");
} catch (Exception e) {
printStackTrace(e);
} finally {
if (tx.isActive())
tx.rollback();
pm.close();
}
// return detached;
return entity;
}
private MyEntity reorder(MyEntity entity) {
// MyEntity detached = null;
sb.append("before reorder " + entity.toString() + "\n");
PersistenceManager pm = PMF.get().getPersistenceManager();
Transaction tx = pm.currentTransaction();
pm.setDetachAllOnCommit(true);
try {
tx.begin();
ArrayList<SubEntity> myList = entity.getMyList();
SubEntity first = myList.remove(0);
myList.add(first);
entity = pm.makePersistent(entity);
tx.commit();
// detached = pm.detachCopy(entity);
// sb.append("detached object: " + detached + "\n");
sb.append("reordered object: " + entity + "\n");
} catch (Exception e) {
printStackTrace(e);
} finally {
if (tx.isActive())
tx.rollback();
pm.close();
}
// return detached;
return entity;
}
@SuppressWarnings("unchecked")
private void deleteAll() {
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()) {
pm.deletePersistentAll(results);
}
tx.commit();
sb.append("deleted all objects" + "\n");
} catch (Exception e) {
printStackTrace(e);
} finally {
if (tx.isActive())
tx.rollback();
query.closeAll();
pm.close();
}
}
@SuppressWarnings("unchecked")
private void query() {
sb.append("query\n");
PersistenceManager pm = PMF.get().getPersistenceManager();
Query query = pm.newQuery(MyEntity.class);
try {
List<MyEntity> results = (List<MyEntity>)
query.execute();
if (results.iterator().hasNext()) {
for (MyEntity e : results) {
sb.append(e + "\n");
for (SubEntity s : e.getMyList()) {
sb.append(s + "\n");
}
sb.append("-------------\n");
}
}
} catch (Exception e) {
printStackTrace(e);
} finally {
query.closeAll();
pm.close();
}
}
private void printStackTrace(Exception e) {
final ByteArrayOutputStream ba = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(ba);
e.printStackTrace(ps);
sb.append(ba.toString());
e.printStackTrace();
}
}
--
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.