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.


Reply via email to