Okay, sorry for the delay, I haven't been able to focus on this for a few days.
here is the full (including the jar libararies in case there is an issue with them). http://www.resmarksystems.com/code/JdoTest.zip It's a very simple Servlet, by hitting the url hostname/jdotest you should execute the test case that is failing for me. I really appreciate your taking a look at this. I'm looking forward to getting it working. -bryce On Tue, Dec 1, 2009 at 10:15 PM, Max Ross (Google) <[email protected]> wrote: > Just give me the smallest amount of compilable, runnable code that > demonstrates the incorrect behavior. A unit test is preferable because I > can just drop it into my own test framework and run it, but I'll take > whatever format you can manage. > > Thanks, > Max > > On Tue, Dec 1, 2009 at 1:18 PM, bryce cottam <[email protected]> wrote: >> >> yeah, I didn't see a TransactionNotActiveException. >> here is my jdoconfig.xml: >> <persistence-manager-factory name="transactions-optional"> >> <property name="javax.jdo.PersistenceManagerFactoryClass" >> >> value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/> >> <property name="javax.jdo.option.ConnectionURL" value="appengine"/> >> <property name="javax.jdo.option.NontransactionalRead" >> value="true"/> >> <property name="javax.jdo.option.NontransactionalWrite" >> value="true"/> >> <property name="javax.jdo.option.RetainValues" value="true"/> >> <property name="datanucleus.appengine.autoCreateDatastoreTxns" >> value="true"/> >> </persistence-manager-factory> >> >> I think the only thing I changed was putting in this line: >> <property name="datanucleus.appengine.autoCreateDatastoreTxns" >> value="true"/> >> >> which may explain why I don't get the TransactionNotActiveException. >> So, for this unit test/servlet, you want me to just post the class >> file here, or strip down all my code and put up all my model classes >> and the test case/servlet code somewhere in a war or something? >> >> .... hmmmm I just commented out that line, and I still get the same >> behavior (i.e. I don't get the TransactionNotActiveException). Not >> sure what's going on. >> >> thanks, >> -bryce >> >> On Tue, Dec 1, 2009 at 2:04 PM, Max Ross (Google) >> <[email protected]> wrote: >> > Now I'm starting to suspect something funny going on with your config. >> > I >> > received a TransactionNotActiveException when I tried to run your code >> > without starting the txn, and the fact that you didn't receive that >> > exception doesn't make any sense to me. I can't explain why you see the >> > exception and I don't. The best thing would be for you to put together >> > a >> > stripped down test case that demonstrates the problem. An actual unit >> > test >> > would be ideal, but if you're not a position to write one then just a >> > simple >> > standalone servlet should suffice. >> > >> > Thanks, >> > Max >> > >> > >> > On Tue, Dec 1, 2009 at 1:00 PM, bryce cottam <[email protected]> wrote: >> >> >> >> that is both a type-o and it was missing :) It was missing from my >> >> test code, but it was present in my "real" code. So, after putting >> >> the tx.begin() in the test code, I get the exact same behavior as the >> >> "real" code (i.e. nothing gets written to the datastore and I get the >> >> exception. Sorry about missing that in the code I posted. >> >> >> >> I'm kinda lost on where to go with this and where to look. I did >> >> notice that the code actually prompts the exception is in the >> >> datanucleus core and there is a comment above it that says: >> >> / TODO Factor out this PersistenceCapable reference >> >> ((PersistenceCapable)value).jdoCopyKeyFieldsFromObjectId(new >> >> AppIDObjectIdFieldConsumer(param, om, ps, >> >> javaTypeMappings), id); >> >> >> >> so, I'm not sure if this has soemthing to do with code style >> >> datanucleus is trying to phase out or what? Again, I'm not gonna be >> >> shocked if I'm missing something though. >> >> thanks! >> >> -bryce >> >> >> >> >> >> On Tue, Dec 1, 2009 at 1:53 PM, Max Ross (Google) >> >> <[email protected]> wrote: >> >> > I don't see a call to tx.begin() in the code below. Is that a typo >> >> > or >> >> > is it >> >> > actually missing? >> >> > >> >> > On Tue, Dec 1, 2009 at 12:29 PM, bryce cottam <[email protected]> >> >> > wrote: >> >> >> >> >> >> thanks so much for checking into this Max. >> >> >> >> >> >> The data that I'm saving is user generated, so there's not a set >> >> >> script for it. Conceptually what I'm doing is this: >> >> >> >> >> >> Bundle bundle = new Bundle(); >> >> >> >> >> >> bundle.setName("My Bundle"); >> >> >> bundle.setDescription(new >> >> >> com.google.appengine.api.datastore.Text("My Description")); >> >> >> bundle.setPricingModel(PricingModel.PER_GUEST); >> >> >> >> >> >> RatePlan ratePlan = new RatePlan(); >> >> >> ratePlan.setPricingModel(PricingModel.PER_GUEST); >> >> >> ratePlan.setAdultPrice(new >> >> >> java.math.BigDecimal("300.00")); >> >> >> ratePlan.setYouthPrice(new >> >> >> java.math.BigDecimal("275.00")); >> >> >> >> >> >> bundle.setRatePlan(ratePlan); >> >> >> >> >> >> List<Key> activityIds = getActivityIds(); >> >> >> int i = 0; >> >> >> for (Key id : activityIds) { >> >> >> BundledActivity bundledActivity = new >> >> >> BundledActivity(); >> >> >> bundledActivity.setDay(++i); >> >> >> >> >> >> ActivityFK activityFk = new ActivityFK(); >> >> >> activityFk.setKey(id); >> >> >> activityFk.setName("activity " + i); >> >> >> >> >> >> activityFk.setPricingModel(PricingModel.PER_GUEST); >> >> >> >> >> >> bundledActivity.setActivity(activityFk); >> >> >> >> >> >> RatePlan activityRate = new RatePlan(); >> >> >> >> >> >> activityRate.setPricingModel(PricingModel.PER_GUEST); >> >> >> activityRate.setAdultPrice(new >> >> >> java.math.BigDecimal("150.00")); >> >> >> activityRate.setYouthPrice(new >> >> >> java.math.BigDecimal("120.00")); >> >> >> >> >> >> bundledActivity.setRatePlan(activityRate); >> >> >> bundle.getActivities().add(bundledActivity); >> >> >> } >> >> >> >> >> >> PersistenceManager pm = PMF.createManager(); >> >> >> Transaction tx = pm.currentTransaction(); >> >> >> >> >> >> try { >> >> >> bundle = pm.makePersistent(bundle); >> >> >> tx.commit(); >> >> >> } >> >> >> finally { >> >> >> if (tx.isActive()) { >> >> >> tx.rollback(); >> >> >> } >> >> >> >> >> >> pm.close(); >> >> >> } >> >> >> >> >> >> I get the Bundle saved just fine, but when it tries to save it's >> >> >> child >> >> >> BundledActivity instances, it breaks. However, when I do the same >> >> >> thing through the UI of my app, I get the error when attempting to >> >> >> save the Bundle (i.e. nothing gets written to the datastore, where >> >> >> as >> >> >> in this test code above, the parent Bundle is getting written, but >> >> >> none of it's children are getting written). >> >> >> >> >> >> Of course anytime I post my code, I kind of summarize, there are >> >> >> utilities that I use etc. But I am able to reproduce the issue >> >> >> without using any of my "helper" apis. I am completely open to just >> >> >> sending you my code (it's all proof of concept right now, so no >> >> >> disclosure issues) and you can see how all the pieces I'm using are >> >> >> fitting together. >> >> >> >> >> >> I appreciate you taking a look at this, I'd love to know if I'm >> >> >> doing >> >> >> something wrong. >> >> >> thanks, >> >> >> -bryce >> >> >> >> >> >> >> >> >> >> >> >> On Tue, Dec 1, 2009 at 11:03 AM, Max Ross (Google) >> >> >> <[email protected]> wrote: >> >> >> > Hi Bryce, >> >> >> > >> >> >> > Thanks for posting your model objects. I'm not able to reproduce >> >> >> > the >> >> >> > exception you're reporting, but then again I'm just guessing at >> >> >> > how >> >> >> > you're >> >> >> > populating your objects and persisting them. Here's what I did: >> >> >> > >> >> >> > Bundle b = new Bundle(); >> >> >> > RatePlan rp = new RatePlan(); >> >> >> > rp.setPricingModel(PricingModel.BOTH); >> >> >> > b.setRatePlan(rp); >> >> >> > b.setPricingModel(PricingModel.PER_GUEST); >> >> >> > BundledActivity ba = new BundledActivity(); >> >> >> > ba.setDay(3); >> >> >> > ActivityFK activityFK = new ActivityFK(); >> >> >> > activityFK.setName("harold"); >> >> >> > activityFK.setPricingModel(PricingModel.PER_UNIT); >> >> >> > ba.setActivity(activityFK); >> >> >> > RatePlan anotherRatePlan = new RatePlan(); >> >> >> > ba.setRatePlan(anotherRatePlan); >> >> >> > b.getActivities().add(ba); >> >> >> > beginTxn(); >> >> >> > pm.makePersistent(b); >> >> >> > commitTxn(); >> >> >> > >> >> >> > If you can tell me how what you're doing differs from what I'm >> >> >> > doing >> >> >> > I >> >> >> > can >> >> >> > investigate further. >> >> >> > >> >> >> > Thanks, >> >> >> > Max >> >> >> > >> >> >> > On Mon, Nov 30, 2009 at 5:34 PM, bcottam <[email protected]> >> >> >> > wrote: >> >> >> >> >> >> >> >> no one has any ideas on this? >> >> >> >> >> >> >> >> I'd really like to know if this is just a bug that will be >> >> >> >> resolved >> >> >> >> (in which case I'll continue to use this data model) or if there >> >> >> >> is >> >> >> >> a >> >> >> >> flaw in my data model/JDO usage. >> >> >> >> >> >> >> >> thanks! >> >> >> >> -bryce >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> On Nov 30, 1:21 am, bcottam <[email protected]> wrote: >> >> >> >> > I'm trying to save some data in my app, quite similar to almost >> >> >> >> > all >> >> >> >> > other data I've previously saved. However, I'm now getting >> >> >> >> > this >> >> >> >> > stack >> >> >> >> > trace: >> >> >> >> > >> >> >> >> > java.lang.ClassCastException: oid is not instanceof >> >> >> >> > javax.jdo.identity.ObjectIdentity >> >> >> >> > at >> >> >> >> > com.resmark.client.model.RatePlan.jdoCopyKeyFieldsFromObjectId >> >> >> >> > (RatePlan.java) >> >> >> >> > at >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > org.datanucleus.store.mapped.mapping.PersistenceCapableMapping.setObjectAsValue >> >> >> >> > (PersistenceCapableMapping.java:657) >> >> >> >> > at >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > org.datanucleus.store.mapped.mapping.PersistenceCapableMapping.setObject >> >> >> >> > (PersistenceCapableMapping.java:364) >> >> >> >> > at >> >> >> >> > org.datanucleus.store.appengine.DatastoreRelationFieldManager >> >> >> >> > $1.setObjectViaMapping(DatastoreRelationFieldManager.java:132) >> >> >> >> > at >> >> >> >> > org.datanucleus.store.appengine.DatastoreRelationFieldManager >> >> >> >> > $1.apply(DatastoreRelationFieldManager.java:108) >> >> >> >> > at >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > org.datanucleus.store.appengine.DatastoreRelationFieldManager.storeRelations >> >> >> >> > (DatastoreRelationFieldManager.java:80) >> >> >> >> > at >> >> >> >> > >> >> >> >> > >> >> >> >> > org.datanucleus.store.appengine.DatastoreFieldManager.storeRelations >> >> >> >> > (DatastoreFieldManager.java:795) >> >> >> >> > at >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > org.datanucleus.store.appengine.DatastorePersistenceHandler.insertPostProcess >> >> >> >> > (DatastorePersistenceHandler.java:288) >> >> >> >> > at >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects >> >> >> >> > (DatastorePersistenceHandler.java:241) >> >> >> >> > at >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject >> >> >> >> > (DatastorePersistenceHandler.java:225) >> >> >> >> > at >> >> >> >> > >> >> >> >> > org.datanucleus.state.JDOStateManagerImpl.internalMakePersistent >> >> >> >> > (JDOStateManagerImpl.java:3185) >> >> >> >> > at >> >> >> >> > org.datanucleus.state.JDOStateManagerImpl.makePersistent >> >> >> >> > (JDOStateManagerImpl.java:3161) >> >> >> >> > at >> >> >> >> > org.datanucleus.ObjectManagerImpl.persistObjectInternal >> >> >> >> > (ObjectManagerImpl.java:1298) >> >> >> >> > at org.datanucleus.ObjectManagerImpl.persistObject >> >> >> >> > (ObjectManagerImpl.java:1175) >> >> >> >> > at >> >> >> >> > org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent >> >> >> >> > (JDOPersistenceManager.java:669) >> >> >> >> > at >> >> >> >> > org.datanucleus.jdo.JDOPersistenceManager.makePersistent >> >> >> >> > (JDOPersistenceManager.java:694) >> >> >> >> > at >> >> >> >> > com.resmark.server.model.service.BaseDataService.create >> >> >> >> > (BaseDataService.java:227) >> >> >> >> > at com.resmark.server.SetupServiceImpl.updateOrCreate >> >> >> >> > (SetupServiceImpl.java:120) >> >> >> >> > at >> >> >> >> > com.resmark.server.SetupServiceImpl.updateOrCreateBundle >> >> >> >> > (SetupServiceImpl.java:67) >> >> >> >> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native >> >> >> >> > Method) >> >> >> >> > at sun.reflect.NativeMethodAccessorImpl.invoke >> >> >> >> > (NativeMethodAccessorImpl.java:39) >> >> >> >> > at sun.reflect.DelegatingMethodAccessorImpl.invoke >> >> >> >> > (DelegatingMethodAccessorImpl.java:25) >> >> >> >> > at java.lang.reflect.Method.invoke(Method.java:597) >> >> >> >> > at >> >> >> >> > >> >> >> >> > >> >> >> >> > com.google.appengine.tools.development.agent.runtime.Runtime.invoke >> >> >> >> > (Runtime.java:100) >> >> >> >> > at >> >> >> >> > com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse >> >> >> >> > (RPC.java:527) >> >> >> >> > at >> >> >> >> > com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall >> >> >> >> > (RemoteServiceServlet.java:166) >> >> >> >> > at >> >> >> >> > com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost >> >> >> >> > (RemoteServiceServlet.java:86) >> >> >> >> > at >> >> >> >> > javax.servlet.http.HttpServlet.service(HttpServlet.java:713) >> >> >> >> > at >> >> >> >> > javax.servlet.http.HttpServlet.service(HttpServlet.java:806) >> >> >> >> > at >> >> >> >> > >> >> >> >> > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java: >> >> >> >> > 487) >> >> >> >> > at >> >> >> >> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter >> >> >> >> > (ServletHandler.java:1093) >> >> >> >> > at >> >> >> >> > >> >> >> >> > >> >> >> >> > com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter >> >> >> >> > (TransactionCleanupFilter.java:43) >> >> >> >> > at >> >> >> >> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter >> >> >> >> > (ServletHandler.java:1084) >> >> >> >> > at >> >> >> >> > >> >> >> >> > com.google.appengine.tools.development.StaticFileFilter.doFilter >> >> >> >> > (StaticFileFilter.java:121) >> >> >> >> > at >> >> >> >> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter >> >> >> >> > (ServletHandler.java:1084) >> >> >> >> > at org.mortbay.jetty.servlet.ServletHandler.handle >> >> >> >> > (ServletHandler.java:360) >> >> >> >> > at org.mortbay.jetty.security.SecurityHandler.handle >> >> >> >> > (SecurityHandler.java:216) >> >> >> >> > at org.mortbay.jetty.servlet.SessionHandler.handle >> >> >> >> > (SessionHandler.java:181) >> >> >> >> > at org.mortbay.jetty.handler.ContextHandler.handle >> >> >> >> > (ContextHandler.java:712) >> >> >> >> > at >> >> >> >> > >> >> >> >> > org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: >> >> >> >> > 405) >> >> >> >> > at >> >> >> >> > >> >> >> >> > com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle >> >> >> >> > (DevAppEngineWebAppContext.java:54) >> >> >> >> > at org.mortbay.jetty.handler.HandlerWrapper.handle >> >> >> >> > (HandlerWrapper.java:139) >> >> >> >> > at >> >> >> >> > com.google.appengine.tools.development.JettyContainerService >> >> >> >> > $ApiProxyHandler.handle(JettyContainerService.java:342) >> >> >> >> > at org.mortbay.jetty.handler.HandlerWrapper.handle >> >> >> >> > (HandlerWrapper.java:139) >> >> >> >> > at org.mortbay.jetty.Server.handle(Server.java:313) >> >> >> >> > at >> >> >> >> > >> >> >> >> > >> >> >> >> > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java: >> >> >> >> > 506) >> >> >> >> > at >> >> >> >> > org.mortbay.jetty.HttpConnection$RequestHandler.content >> >> >> >> > (HttpConnection.java:844) >> >> >> >> > at >> >> >> >> > org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644) >> >> >> >> > at >> >> >> >> > >> >> >> >> > org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) >> >> >> >> > at >> >> >> >> > >> >> >> >> > org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) >> >> >> >> > at org.mortbay.io.nio.SelectChannelEndPoint.run >> >> >> >> > (SelectChannelEndPoint.java:396) >> >> >> >> > at org.mortbay.thread.BoundedThreadPool$PoolThread.run >> >> >> >> > (BoundedThreadPool.java:442) >> >> >> >> > >> >> >> >> > I've seen this come up when a data model has a many-to-one >> >> >> >> > relationship and a one-to-one relationship with the same data >> >> >> >> > type, >> >> >> >> > but I'm not doing that. >> >> >> >> > >> >> >> >> > here is the code referenced: >> >> >> >> > @PersistenceCapable(identityType=IdentityType.APPLICATION) >> >> >> >> > public class Bundle implements Serializable { >> >> >> >> > @PrimaryKey >> >> >> >> > @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY) >> >> >> >> > private Key id; >> >> >> >> > >> >> >> >> > @Persistent >> >> >> >> > private String name; >> >> >> >> > @Persistent >> >> >> >> > private Text description; >> >> >> >> > >> >> >> >> > @Persistent >> >> >> >> > private RatePlan ratePlan; >> >> >> >> > @Persistent >> >> >> >> > private PricingModel pricingModel; >> >> >> >> > >> >> >> >> > @Persistent >> >> >> >> > private List<BundledActivity> activities = new >> >> >> >> > ArrayList<BundledActivity>(); >> >> >> >> > .... >> >> >> >> > >> >> >> >> > } >> >> >> >> > >> >> >> >> > @PersistenceCapable(identityType=IdentityType.APPLICATION) >> >> >> >> > public class RatePlan implements Serializable { >> >> >> >> > >> >> >> >> > @PrimaryKey >> >> >> >> > @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY) >> >> >> >> > public Key id; >> >> >> >> > >> >> >> >> > @Persistent >> >> >> >> > private String name; >> >> >> >> > >> >> >> >> > @Persistent >> >> >> >> > private BigDecimal adultPrice; >> >> >> >> > @Persistent >> >> >> >> > private BigDecimal youthPrice; >> >> >> >> > @Persistent >> >> >> >> > private BigDecimal unitPrice; >> >> >> >> > >> >> >> >> > @Persistent >> >> >> >> > private PricingModel pricingModel; >> >> >> >> > >> >> >> >> > @Persistent >> >> >> >> > private boolean active = true; >> >> >> >> > ..... >> >> >> >> > >> >> >> >> > } >> >> >> >> > >> >> >> >> > @PersistenceCapable(identityType=IdentityType.APPLICATION) >> >> >> >> > public class BundledActivity implements Serializable { >> >> >> >> > >> >> >> >> > @PrimaryKey >> >> >> >> > @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY) >> >> >> >> > private Key id; >> >> >> >> > >> >> >> >> > @Embedded >> >> >> >> > @Persistent >> >> >> >> > private ActivityFK activity; >> >> >> >> > @Persistent >> >> >> >> > private RatePlan ratePlan; >> >> >> >> > @Persistent >> >> >> >> > private int day; >> >> >> >> > >> >> >> >> > @Persistent >> >> >> >> > @Extension(vendorName="datanucleus", >> >> >> >> > key="gae.parent-pk", >> >> >> >> > value="true") >> >> >> >> > private Key bundleId; >> >> >> >> > ..... >> >> >> >> > >> >> >> >> > } >> >> >> >> > >> >> >> >> > @PersistenceCapable(identityType=IdentityType.NONDURABLE) >> >> >> >> > public class ActivityFK implements Serializable { >> >> >> >> > >> >> >> >> > @Persistent >> >> >> >> > private Key key; >> >> >> >> > @Persistent >> >> >> >> > private String name; >> >> >> >> > @Persistent >> >> >> >> > private PricingModel pricingModel; >> >> >> >> > .... >> >> >> >> > >> >> >> >> > } >> >> >> >> > >> >> >> >> > public enum PricingModel implements Serializable { >> >> >> >> > PER_GUEST, PER_UNIT, BOTH; >> >> >> >> > >> >> >> >> > } >> >> >> >> > >> >> >> >> > perhaps there's something I'm missing about the model. I've >> >> >> >> > done >> >> >> >> > almost the same thing in most of my other data model objects >> >> >> >> > and >> >> >> >> > their >> >> >> >> > relationships. I think about the only thing that's different >> >> >> >> > here >> >> >> >> > is >> >> >> >> > the @Extension annotation, but that's not where the error is >> >> >> >> > happening. Any suggestions would be very welcome. >> >> >> >> > >> >> >> >> > Thanks! >> >> >> >> > -bryce >> >> >> >> >> >> >> >> -- >> >> >> >> >> >> >> >> 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. >> >> >> >> >> >> >> >> >> >> >> > >> >> >> > -- >> >> >> > >> >> >> > 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. >> >> >> > >> >> >> >> >> >> -- >> >> >> >> >> >> 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. >> >> >> >> >> >> >> >> > >> >> > -- >> >> > >> >> > 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. >> >> > >> >> >> >> -- >> >> >> >> 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. >> >> >> >> >> > >> > -- >> > >> > 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. >> > >> >> -- >> >> 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. >> >> > > -- > > 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. > -- 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.
