I'm using this modified PMF class now and it seems to fix this problem, with the caveat that I haven't done any heavy load testing yet.
public final class PMF { private static final PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions- optional"); private PMF() { } public synchronized static PersistenceManagerFactory get() { return pmfInstance; } public synchronized static PersistenceManager getPersistenceManagerInstance() { return pmfInstance.getPersistenceManager(); } } Aaron Shepherd OnFast.com On May 13, 11:13 am, Juha K <juha.kosk...@gmail.com> wrote: > No, but I have single global instance of PersistenceManagerFactory, and from > it I call getPersistenceManager() every time I need it. > > perjantaina 13. toukokuuta 2011 18.07.22 UTC+3 Ikai L (Google) kirjoitti: > > > > > > > Do you just have a single global instance of persistence manager, or do you > > use the factory method? > > > Ikai Lan > > Developer Programs Engineer, Google App Engine > > Blog:http://googleappengine.blogspot.com > > Twitter:http://twitter.com/app_engine > > Reddit:http://www.reddit.com/r/appengine > > > On Thu, May 12, 2011 at 1:47 AM, Juha K <juha.k...@gmail.com> wrote: > > >> I've been running an application successfully for some time on the app > >> engine. During last week I've couple of times tried enabling threadsafe in > >> my app. It seems to randomly cause issues with retrieving or storing data > >> with JDO. What I see when I start to get these issues is this (I've > >> replaced > >> my apps class names with ---): > >> java.lang.UnsupportedOperationException > >> at > >> org.datanucleus.store.appengine.EntityUtils.getPropertyName(EntityUtils.jav > >> a:62) > >> at > >> org.datanucleus.store.appengine.DatastoreFieldManager.storeObjectField(Data > >> storeFieldManager.java:839) > >> at > >> org.datanucleus.store.appengine.DatastoreFieldManager.storeStringField(Data > >> storeFieldManager.java:474) > >> at > >> org.datanucleus.state.AbstractStateManager.providedStringField(AbstractStat > >> eManager.java:1023) > >> at ---.jdoProvideField(VAJDO.java) > >> at ---.jdoProvideFields(VAJDO.java) > >> at > >> org.datanucleus.state.JDOStateManagerImpl.provideFields(JDOStateManagerImpl > >> .java:2715) > >> at > >> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertPreProces > >> s(DatastorePersistenceHandler.java:341) > >> at > >> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects(D > >> atastorePersistenceHandler.java:251) > >> at > >> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject(Da > >> tastorePersistenceHandler.java:240) > >> at > >> org.datanucleus.state.JDOStateManagerImpl.internalMakePersistent(JDOStateMa > >> nagerImpl.java:3185) > >> at > >> org.datanucleus.state.JDOStateManagerImpl.makePersistent(JDOStateManagerImp > >> l.java:3161) > >> at > >> org.datanucleus.ObjectManagerImpl.persistObjectInternal(ObjectManagerImpl.j > >> ava:1298) > >> at > >> org.datanucleus.ObjectManagerImpl.persistObject(ObjectManagerImpl.java:1175 > >> ) > >> at > >> org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceM > >> anager.java:669) > >> at > >> org.datanucleus.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceMana > >> ger.java:694) > > >> I've seen the same exception also when calling > >> PersistenceManager.getObjectById(). The call to these methods comes > >> directly > >> from servlet requests. > > >> The error doesn't always happen, sometimes (especially for writes) when it > >> starts to happen, it seems to happen to all writes. I've set threadsafe to > >> false in my appengine-web.xml and the error goes away. But especially now > >> knowing the upcoming change in the pricing, I'd like to be able to run my > >> app multithreaded. My question is that is this a bug in the app engine, or > >> should I be synchronizing JDO use in my app in order to run it with > >> threadsafe=true? > > >> -- > >> 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-app...@googlegroups.com. > >> To unsubscribe from this group, send email to > >> google-appengine...@googlegroups.com. > >> 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 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 at http://groups.google.com/group/google-appengine-java?hl=en.